If imbriqués codes postaux [Résolu]

Signaler
Messages postés
3
Date d'inscription
mardi 28 janvier 2014
Statut
Membre
Dernière intervention
29 janvier 2014
-
Messages postés
32950
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
13 juin 2021
-
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

End If
Next

1 réponse

Messages postés
32950
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
13 juin 2021
351
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