Faire une recherche sur le nombre de caractère d'une cellule. Possible ?

Rookiz

XLDnaute Nouveau
Bonjour,

Après de nombreuses recherches, je n'arrive pas trouver de réponse à mon interrogation.

Pour le besoin de ma macro et parce qu'elle s'appuie sur une source d'environ 14 000 lignes, je cherche a trouver toutes les cellules (sur 3 colonnes) contenant exactement 8 caractères, pour pouvoir y ajouter un 0 devant.

J'ai la possibilité de le faire en parcourant toutes les cellules une à une, mais mon temps de traitement serait beaucoup trop long.

Donc, je voudrais savoir si ce que je souhaite faire est possible ? :confused:

Et si oui, quel est le code ? :D

Merci beaucoup pour votre aide.:)
 

Gareth

XLDnaute Impliqué
Re : Faire une recherche sur le nombre de caractère d'une cellule. Possible ?

Bonjour,

Ci-dessous un exemple à adapter:
Code:
Sub test()
For Each X In Range("A1:C14000")
    If Len(X.Value) = 8 Then X.Value = "0" & X.Value
Next
End Sub

Si les chaines de caracteres que tu veux modifier sont des chiffres, cette macro n'aura aucun effet.

Autres solutions :

Code:
Sub test()
For Each X In Range("A1:C14000")
    If Len(X.Value) = 8 Then X.NumberFormat = "000000000" 'Applique un format Nombre
Next
End Sub

Sub test2()
For Each X In Range("A1:C14000")
    If Len(X.Value) = 8 Then X.Value = "'0" & X.Value 'Transforme en texte
Next
End Sub

Sub test3()
For Each X In Range("A1:C14000")
    If Len(X.Value) = 8 Then
        X.NumberFormat = "@" 'Formate en texte la cellule
        X.Value = "0" & X.Value 'rajoute un zero
    End If
Next
End Sub
 
Dernière édition:

ROGER2327

XLDnaute Barbatruc
Re : Faire une recherche sur le nombre de caractère d'une cellule. Possible ?

Bonjour à tous.


Essayez ceci :​
VB:
Sub toto()
Dim oPlg As Range, oCel As Range
    Set oPlg = Range("A2:A21") 'plage à traiter
    With Application: .ScreenUpdating = 0: .EnableEvents = 0: .Calculation = -4135: End With
    For Each oCel In oPlg.Cells
        If Len(CStr(oCel.Value)) = 8 Then
        oCel.Value = "'0" & CStr(oCel.Value)
        End If
    Next
    With Application: .Calculation = -4105: .EnableEvents = 1: .ScreenUpdating = 1: End With
End Sub


ROGER2327
#6462


Vendredi 27 Gueules 140 (Saint Tabagie, cosmogène - fête Suprême Quarte)
3 Ventôse An CCXXI, 4,7988h - violier
2013-W08-4T11:31:02Z
 

Rookiz

XLDnaute Nouveau
Re : Faire une recherche sur le nombre de caractère d'une cellule. Possible ?

Ouaaaa cool, merci a vous deux. Vos deux solutions fonctionnent.

En fait, je m'obstinais à vouloir utiliser un "FIND" et donc à vouloir adapter un "Len" dessus.
Quel boulet !!!

Merci encore à vous deux ;)

PS : ROGER2327 ça te dérangerait de m'expliquer plus en détail ton code. Je ne comprend pas toute les expressions/termes et je n'aime pas rester dans le flou. Surtout que ça pourrait me servir pour une autre fois. Merci d'avance !!!
 

ROGER2327

XLDnaute Barbatruc
Re : Faire une recherche sur le nombre de caractère d'une cellule. Possible ?

Re...

(...)
PS : ROGER2327 ça te dérangerait de m'expliquer plus en détail ton code. Je ne comprend pas toute les expressions/termes et je n'aime pas rester dans le flou. Surtout que ça pourrait me servir pour une autre fois. Merci d'avance !!!
VB:
Sub toto()
'Après déclaration des variables...
Dim oPlg As Range, oCel As Range
'...définition de la plage à traiter...
    Set oPlg = Range("A2:A21")
'...inhibation du rafraichîssement de l'écran, de la prise en
'compte des évènements qui pourraient déclencher des procédures
'évènementielles, du calcul automatique des formules...
'(Cette précaution permet potentiellement une exécution rapide.)
    With Application: .ScreenUpdating = 0: .EnableEvents = 0: .Calculation = -4135: End With
'...examen de chaque cellule de la plage à traiter...
    For Each oCel In oPlg.Cells
'...et adjonction d'un zéro en tête du contenu de la cellule
'lorsqu'elle contient 8 caractères...
        If Len(CStr(oCel.Value)) = 8 Then oCel.Value = "'0" & CStr(oCel.Value)
    Next
'...puis rétablissement du rafraichîssement de l'écran, de la
'prise en compte des évènements qui pourraient déclencher des
'procédures évènementielles, du calcul automatique des formules.
    With Application: .Calculation = -4105: .EnableEvents = 1: .ScreenUpdating = 1: End With
'Terminé !
'
'   Pour connaître exactement la signification de, par exemple,
'   EnableEvents, Set, ou tout autre mot, le sélectionner et
'   presser la touche F1 : l'aide fournie par Microsoft est
'   à disposition de tout un chacun...
'
End Sub


ROGER2327
#6463


Vendredi 27 Gueules 140 (Saint Tabagie, cosmogène - fête Suprême Quarte)
3 Ventôse An CCXXI, 5,8110h - violier
2013-W08-4T13:56:47Z
 

Discussions similaires

Statistiques des forums

Discussions
312 362
Messages
2 087 637
Membres
103 621
dernier inscrit
breizhyoda