nombre caractères classeur excel

fred014

Habitué
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 :)
 

zeb

Modérateur
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...
 

fred014

Habitué
ok voici un exemple
[cpp]
Attribute VB_Name = "DecouperChaineSansCouperMots"

'Découper une phrase pour que les morceaux ne fassent pas
'plus de 20 caractères et qu'aucun mot ne soit coupé (la chaine est en A1)

Sub SplitTextInCell()

Dim SourceCell As Range
Dim DestCell As Range
Dim SplitArray As Variant
Dim Element As Variant
Dim Dummy As Variant

Set SourceCell = Range("A1") 'adapter
Set DestCell = Range("B1") 'adapter

SplitArray = Split(SourceCell.Value)

For Each Element In SplitArray
Dummy = Dummy & Element & Chr(32)
If Len(Dummy) > 21 Then
DestCell.Value = Trim(Left(Dummy, _
Len(Dummy) - (Len(Element) + 1)))
Set DestCell = DestCell.Offset(0, 1)
Dummy = Element & Chr(32)
End If
Next Element
DestCell.Value = Trim(Dummy)

End Sub
[/cpp]
seulement je n'arive à le faire fonctionner pour mon cas :( :( :( :(
 

fred014

Habitué
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

Modérateur
Pour parcourrir toutes les cellules d'une plage :

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

Pour connaître la longueur du texte d'une cellule :
Code:
Dim cell As Range
..
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...
 

fred014

Habitué
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

Modérateur
:/

cell doit être affecté à quelque chose !

Dans une boucle [fixed]For Each cell In Range("..")[/fixed]c'est fait automatiquement.

En dehors d'une telle boucle, tu dois l'affecter explicitement :
Code:
Dim cell As Range
Set cell = Range("A1")
MsgBox "La longueur du texte de la cellule A1 est : " & Len(cell.Text)
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:
MsgBox "La longueur du texte de la cellule A1 est : " & Len(Range("A1").Text)
 

fred014

Habitué
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

Modérateur
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).
 

fred014

Habitué
ok donc voilà ou j'en suis

[cpp]
Sub controle()
Dim cell As Range
Const limit As Integer = 10
For Each cell In Range("A1:C10")
If cell.Value > limit Then
MsgBox "la cellule comporte : " & Len(cell.Text) & " caractères "
cell.Interior.ColorIndex = 27
End If
Next
End Sub
[/cpp]

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 !!!! :??: :??: :??: :??: :??:
 

fred014

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

[cpp]
Sub controle()
Dim cell As Range
Const limit As Integer = 10
For Each cell In Range("A1:C10" )
If len(cell) > limit Then
MsgBox "la cellule comporte : " & Len(cell.Text) & " caractères "
cell.Interior.ColorIndex = 27
End If
Next
End Sub
[/cpp]

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

zeb

Modérateur
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.
 

willabe

Nouveau membre
: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

Modérateur
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 ?
 
Vous devez vous inscrire ou vous connecter pour répondre ici.
Derniers messages publiés
Statistiques globales
Discussions
730 134
Messages
6 718 077
Membres
1 586 394
Dernier membre
Manoushk
Partager cette page
Haut