• Initiateur de la discussion Initiateur de la discussion Julien
  • Date de début Date de début

Boostez vos compétences Excel avec notre communauté !

Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force. Apprenez, échangez, progressez – et tout ça gratuitement ! 👉 Inscrivez-vous maintenant !

J

Julien

Guest
Bonjour à tous,

Ma requête est peut-être un peu bizarre, c'est la raison pour laquelle je n'ai rien trouvé dans les archives du forum.

En fait, je dispose d'une colonne de chiffres et/ou lettres. Je souhaiterais compter chaque cellule de la colonne afin de déterminer le nombre de caractères contenues dans la cellule. Si le nombre de caractère est inférieur au nombre stipulé dans ma cellule K1 (soit 8 dans le cas présent), je souhaiterais ajouter autant de 0 que nécessaire en dernière position de ma cellule pour parvenir à mon nombre de 8 caractères.

Ex :

Colonne A

12345
123456

Je souhaiterais obtenir 12345000 et 12345600.


Merci par avance.
 
Re

Public Sub toto()
Dim I, J As Long
Application.ScreenUpdating = False ' pour la rapidité on désactive l'actualisation de l'écran

For I = 1 To Worksheets("Feuil1").Range("A65536").End(xlUp).Row
J = Len(Cells(I, 1).Value)
If J < 8 Then
If IsNumeric(Cells(I, 1)) Then
Cells(I, 1) = Cells(I, 1) * (10 ^ (8 - J))
Else
Cells(I, 1) = Mid(Cells(I, 1) & "00000000", 1, 8)
End If
End If
Next I

Application.ScreenUpdating = True 'l'actualisation de l'écran est réactivée

End Sub
@+Jean-Marie
 
Bonjour Jean-Marie,

Merci bcq pour ta réponse si rapide. J'essaie de comprendre ton code.

Par contre est-il possible d'ajouter qq chose comme :

If IsNumeric(Cells(I, 1)) or IsAlphanumericCells(I, 1)) Then...

car parfois je suis amené à avoir des chaînes du type 26A88 etc...

Dernière requête afin de ne pas appliquer le code bêtement. Pourrais-tu m'expliquer les lignes suivantes stp :

Cells(I, 1) = Cells(I, 1) * (10 ^ (8 - J))
Else
Cells(I, 1) = Mid(Cells(I, 1) & "00000000", 1, 8)


Merci encore .
 
Re...

Pour ce qui des valeurs numériques, le symbole ^ est égale à la mise à la puissance, donc 10^2 = 100 ; 10^2 = 1000 ; 10^4= 10000; etc. Ce qui ramène à faire multiplication

Pour les valeur alphanumérique, il faut faire ce que l'on appelle une concaténation, on prendre une chaîne de caractères on y rajoute une deuxième chaîne, etc. Puis par l'instruction Mid on coupe la chaîne à la longueur voulue.

Tu peux voir une différence d'écriture entre le code VBA et de la formule A1&STXT("00000000";1;8-NBCAR(A1)) fait la même chose que Mid(Cells(I, 1) & "00000000", 1, 8), à une différence près, il y a une opération de soustraction en moins.
On pourrait aussi éviter de la faire dans la formule en l'écrivant
=SI(ESTNUM(A1);A1*(10^(8-NBCAR(A1)));STXT(A1&"00000000";1;8))
Je n'ai vu cette simplification qu'au moment de l'écriture du code VBA. Pour la petite histoire.

@+Valeur
 
Re Jean-Marie,

Dernière question,

Le code marche très bien avec la colonne A.
Mais je souhaiterais faire la même chose sur la colonne C (sur la même feuille que A).
Donc j'ai réadapté ton code comme ceci :

For I = Range("C5") To Range("C50").End(xlUp).Row
J = Len(Cells(I, 1).Value)
If J < 8 Then
If IsNumeric(Cells(I, 1)) Then
Cells(I, 1) = Cells(I, 1) * (10 ^ (8 - J))
Else
Cells(I, 1) = Mid(Cells(I, 1) & "00000000", 1, 8)
End If
End If
Next I

Mais cela ne marche pas.

Où me suis trompé ?


Merci.
 
Bonjour le Julien, Jean Marie et le Forum

Bonjour Julien tu peux essayer ce code cela devrait fonctionner

Dim i As Byte
Dim j As Byte
For i = 1 To Range("C50").End(xlUp).Row
j = Len(Cells(i, 3).Value)
If j < 8 Then
If IsNumeric(Cells(i, 1)) Then
Cells(i, 3) = Cells(i, 3) * (10 ^ (8 - j))
Else
Cells(i, 3) = Mid(Cells(i, 3) & "00000000", 1, 8)
End If
End If
Next i
End Sub


@+ Salim
 
Bonsoir Jean-Marie et le forum,

Après avoir étudié ton code, je me suis demandé quelle était le rôle de la 2è condition. En effet, en enlevant cette 2è condition j'obtiens le même résultat que si je la maintenais :

Public Sub toto()
Dim I, J As Long
Application.ScreenUpdating = False

For I = 3 To Worksheets("Feuil1").Range("A30").End(xlUp).Row
J = Len(Cells(I, 1).Value)
If J < 8 Then
Cells(I, 1) = Cells(I, 1) * (10 ^ (8 - J))
End If
Next I

Application.ScreenUpdating = True

End Sub


Pourrais-tu stp m'éclairer sur ce point ?

Merci.
 
Re,

Mais bien-sûr, je me réponds à moi même

Cette 2è condition permet de faire tourner le code même s'il existe des chaînes mélangeant chiffres et lettres.

Désolé pour cette question de vrai débutant.
 
- Navigue sans publicité
- Accède à Cléa, notre assistante IA experte Excel... et pas que...
- Profite de fonctionnalités exclusives
Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel.
Je deviens Supporter XLD
Assurez vous de marquer un message comme solution pour une meilleure transparence.

Discussions similaires

Retour