FORUM Tom's Hardware » Programmation » VB / VBA / VBS » nombre caractères classeur excel
 

nombre caractères classeur excel

Il y a 342 utilisateurs connus et inconnus. Pour voir la liste des connectés connus, cliquez ici
Ajouter une réponse



 Mot :   Pseudo :  
 
Bas de page
Auteur
 Sujet : nombre caractères classeur excel
 
Plus d'informations

voilà, :??:  
dans un classeur excel, jai 3 colonne (E;F;G) qui correspond à 3 ligne adresse  importer à partir fichier bloc note:
ligne 1 (E):8 boulevard des prés tralala et tralali
ligne 2 (F):batiment du chemin chapi chapo
ligne 3 G():allées des paquerettes patati et patata
ma question :
existe t il un code vba  excel qui permet de limiter de nombre de caractère dans ses colonnes et qui déplace les caractères sans couper les mots en trop dans la colonnes à cotés en plus des autres caractères déjà existant .
Donc au départ colonne E; colonne F; colonne G et apres macro vba --> colonne E; colonne F avec surplus de la colonne E; et colonne G avec srplus de la colonne F .
je sais pas si je suis clair dans mon explication.
merci :)


Message édité par fred014 le 11-01-2007 à 15:37:36

zeb
Profil : Modérateur libre
Plus d'informations

Pas trop clair. Donne nous un exemple.
Non, ce code VBA n'existe pas ... encore. ;) Mais tu peux l'écrire.
 
Je te propose de nous écrire très précisément l'algo en bon français, je (ou un autre volontaire) t'aiderais à en faire du VB...

Plus d'informations

ok voici un exemple  

Code :
  1. Attribute VB_Name = "DecouperChaineSansCouperMots"
  2. 'Découper une phrase pour que les morceaux ne fassent pas
  3. 'plus de 20 caractères et qu'aucun mot ne soit coupé (la chaine est en A1)
  4. Sub SplitTextInCell()
  5. Dim SourceCell As Range
  6. Dim DestCell As Range
  7. Dim SplitArray As Variant
  8. Dim Element As Variant
  9. Dim Dummy As Variant
  10.     Set SourceCell = Range("A1" ) 'adapter
  11.     Set DestCell = Range("B1" )   'adapter
  12.     SplitArray = Split(SourceCell.Value)
  13.     For Each Element In SplitArray
  14.         Dummy = Dummy & Element & Chr(32)
  15.         If Len(Dummy) > 21 Then
  16.             DestCell.Value = Trim(Left(Dummy, _
  17.                 Len(Dummy) - (Len(Element) + 1)))
  18.             Set DestCell = DestCell.Offset(0, 1)
  19.             Dummy = Element & Chr(32)
  20.         End If
  21.     Next Element
  22.     DestCell.Value = Trim(Dummy)
  23. End Sub


seulement je n'arive à le faire fonctionner pour mon cas  :(  :(  :(  :(

Plus d'informations

bon en fait c est pas du tout ce que je souhaite réaliser .
pour faire plus simple, ce serait avoir un code qui lorsque je clic sur un bouton,
analyse le nombre de caractère dans les colonne E,F et G et qu un msgbox me dit "il a plus de 31 caractères dans la cellule "  " "
ou alors deuxième possibilité au moment du clic sur le bouton les cellules comportant plus de 31 caractères se mettent de couleur rouge .
si quelqu un peu m aider merci d avance

zeb
Profil : Modérateur libre
Plus d'informations

Pour parcourrir toutes les cellules d'une plage :
 

Code :
  1. Dim cell As Range
  2. For Each cell In Range ("E1;G65535" )
  3.   .. 
  4. Next


 
Pour connaître la longueur du texte d'une cellule :

Code :
  1. Dim cell As Range
  2. ..
  3. Len(cell.Text)


 
Pour mettre en couleur :
 
[:zeb] Eh! si tu essayais de comprendre comment ça marche par toi-même, l'enregistreur de macro est ton ami...

Plus d'informations

merci pour ton aide ,
 
pour parcourir et mettre en couleur pas de problème mais la fonction  
Len(cell.Text) je ne comprends pas . il me met  " attendu:identificateur"
sachant que dans les cellules E2:G50 la longueur du texte change  à chaque fois que j importe un fichier de valeurs séparées par des virgules Microsoft Excel.

zeb
Profil : Modérateur libre
Plus d'informations

:/
 
cell doit être affecté à quelque chose !
 
Dans une boucle

For Each cell In Range(".." )

c'est fait automatiquement.
 
En dehors d'une telle boucle, tu dois l'affecter explicitement :

Code :
  1. Dim cell As Range
  2. Set cell = Range("A1" )
  3. MsgBox "La longueur du texte de la cellule A1 est : " & Len(cell.Text)
  4. Set cell = Nothing


 
La ligne 4, c'est pour faire propre. (Mais on est en VB :sarcastic:)
 
Selon le cas, tu voudras peut être écrire directement ceci :

Code :
  1. MsgBox "La longueur du texte de la cellule A1 est : " & Len(Range("A1" ).Text)

Plus d'informations

donc pour savoir combien de cellules ont un nombre de caractère supérieur à 31 , il me faut faire une boucle " for each " puis msgbox "len"
mais sa me designe pas automatiquement la cellule qui justement comporte plus de 31 caractère

zeb
Profil : Modérateur libre
Plus d'informations

Ben figure toi qu'il n'y a pas une fonction VB qui dit recherche et qui renvoie la liste des cellules qui comportent plus de 31 caractères. [:spamafote]
C'est à toi de la créer. :o
 
Tu as tout ce qu'il te faut :  

  • de quoi parcourir ta plage de cellules ( For Each cell ) ;
  • de quoi renvoyer la longueur du texte d'une cellule (Len).

Plus d'informations

ok donc voilà ou j'en suis
 

Code :
  1. Sub controle()
  2. Dim cell As Range
  3. Const limit As Integer = 10
  4. For Each cell In Range("A1:C10" )
  5. If cell.Value > limit Then
  6. MsgBox "la cellule comporte : " & Len(cell.Text) & "  caractères  "
  7. cell.Interior.ColorIndex = 27
  8. End If
  9. Next
  10. End Sub


 
mais cela ne tiens pas compte de ma limite à 10 caractères .
même si il y a moins de 10 caractères dans la cellule, celle-ci passe en jaune .
peut être qu'il ne comprend pas ma limite de caractère ?? je ne sais pas !!!! :??:  :??:  :??:  :??:  :??:

Plus d'informations

c'est bon j'ai trouvé voilà la solution  :pt1cable:  :pt1cable:  :pt1cable:  
 

Code :
  1. Sub controle()
  2. Dim cell As Range
  3. Const limit As Integer = 10
  4. For Each cell In Range("A1:C10" )
  5. If len(cell) > limit Then
  6. MsgBox "la cellule comporte : " & Len(cell.Text) & "  caractères  "
  7. cell.Interior.ColorIndex = 27
  8. End If
  9. Next
  10. End Sub


 
si celà peu aider quelqu'un !!!    :lol:  :lol:  

zeb
Profil : Modérateur libre
Plus d'informations

Ligne 5 : len(cell)
Ligne 6 : len(cell.Text)
 
Sois logique avec toi même ;)
 
Je suppose par ailleurs que la ligne 6 était la pour tester, et que la version finale ne contient plus cette ligne.

Plus d'informations


 :pfff:  
sos  j ai une liste de 5900 lignes a découper  dans la colonne d  30 caractères et les autre a mettre dans la colonne E .comment faire avec une macro
 merçie a+  
 
labe william@wanadoo.fr

zeb
Profil : Modérateur libre
Plus d'informations

1°) Tu n'apportes rien au sujet de fred. Je te propose de créer ton propre sujet.
 
2°) Si tu crées ton propre sujet, évite de demander un truc tout fait. Le présent sujet est un bon exemple, le code proposé par Fred s'est vu amélioré au fur et à mesure. Mais rien ne lui a été donné tout cuit dans le bec !
 
3°) Mettre son adresse email en clair sur un site public est imprudent : Tu cherches à te faire spammer ?


---------------
Règlement du forum / Règlement de Programmation / Règlement du Monde de Linux euh, n'y en a pas...

Aller à :
Ajouter une réponse
  FORUM Tom's Hardware » Programmation » VB / VBA / VBS » nombre caractères classeur excel
 

Annonces Google
Publicité
Les ressources relatives