clemath69
Messages postés3Date d'inscriptionmardi 28 janvier 2014StatutMembreDernière intervention29 janvier 2014
-
29 janv. 2014 à 12:26
jordane45
Messages postés37545Date d'inscriptionmercredi 22 octobre 2003StatutModérateurDernière intervention 8 juin 2023
-
29 janv. 2014 à 13:27
Bonjour,
Je travaille sur un projet VBA de code postaux
et pour la Belgique j'ai écrit ça pour identifier en vert les codes posant un problème (même si j'aurais préféré enlever la ligne et la mettre dans une autre feuille...mais je débute donc j'ai choisi l'option de mettre en vert en premier lieu!)
Et là mon code fait bien les modifications sur le code postal ( à savoir il enlève les autres caractères texte qui sont ajoutés abusivement à la fin de chaque code postaux), mais il met en vert tous les codes! lol donc ce n'est pas terrible!
une suggestion?
For Each cel In Range("S:S")
ValeurdelaCellule = cel.Value
NumeroLigneCellule = cel.Row
'test si BE est présent dans la colonne 22
If Cells(NumeroLigneCellule, 22).Value = "BE" Then
'On vérfie que la longeur est égale à 4 et qu'elle est numérique
If Len(ValeurdelaCellule) = 4 And IsNumeric(ValeurdelaCellule) Then
' puis on vérifie que le code est compris entre 1000 et 9992
If (ValeurdelaCellule <= 1000) And (ValeurdelaCellule >= 9992) Then
'si c'est le cas on change rien
cel.Value = cel.Value
End If
End If
'on vérifie que si la longueur est sup à 4 et que les 4 premiers chiffres sont num alors on garde que les 4 chiffres de gauche
If Len(ValeurdelaCellule) > 4 And IsNumeric(Left(ValeurdelaCellule, 4)) Then
cel.Value = Left(ValeurdelaCellule, 4)
'sinon on colorie en vert (idéalement j'aurais préféré couper la ligne entière pour la mettre ds un nouveau doc mais bon... )
Else: cel.Interior.ColorIndex = 4
End If
jordane45
Messages postés37545Date d'inscriptionmercredi 22 octobre 2003StatutModérateurDernière intervention 8 juin 2023341 29 janv. 2014 à 13:27
Bonjour,
Déjà.. merci d'utiliser la coloration syntaxique lorsque tu postes du code ici..
Donc.. merci de lire le lien suivant :
Ensuite... quelques erreurs dans ton code.
Déjà :
If (ValeurdelaCellule <= 1000) And (ValeurdelaCellule >= 9992) Then
Ce qui veut dire : Si ma cellule est inférieure ou égale à 1000 ET supérieur ou égale à 9992... humm... ce n'est pas possible..non ?!!
A changer en :
' puis on vérifie que le code est compris entre 1000 et 9992
If (ValeurdelaCellule >= 1000) And (ValeurdelaCellule <= 9992) Then
'si c'est le cas on change rien
cel.Value = cel.Value
Quel est l'intérêt de lui faire réécrire la valeur de ta cellule dans cette même cellule ?
Ça consomme des ressources et n'apporte rien à ton programme.
Donc... A RETIRER !
Toutes tes cellules passent en vert... Oui.. si tu relances cette macro plusieurs fois.. car les cellules qui ont été traitées une première fois..n'ont plus que 4 chiffres à l'intérieur.. donc le ELSE se déclenche.
Pour éviter cela..il faut ajouter un = pour avoir >= plutôt que ">" tout seul dans ton if.
If Len(ValeurdelaCellule) >= 4 And IsNumeric(Left(ValeurdelaCellule, 4)) Then
Ce qui, au final, donnerait un code du genre :
For Each cel In Range("A1:A50")
ValeurdelaCellule = cel.Value
NumeroLigneCellule = cel.Row
'test si BE est présent dans la colonne 22
If Cells(NumeroLigneCellule, 2).Value = "BE" Then
'on vérifie que si la longueur est sup à 4
' et que les 4 premiers chiffres sont num alors on garde que les 4 chiffres de gauche
If Len(ValeurdelaCellule) >= 4 And IsNumeric(Left(ValeurdelaCellule, 4)) Then
cel.Value = Left(ValeurdelaCellule, 4)
Else
'sinon on colorie en vert
'(idéalement j'aurais préféré couper la ligne entière pour la mettre ds un nouveau doc mais bon... )
cel.Interior.ColorIndex = 4
End If
End If
Next