XL 2016 Controle chaine de caractère

ynx69

XLDnaute Junior
Bonjour,

Encore moi ^^ :)

J'ai une problématique sur laquelle je coince dans le cadre d'un projet que je gère.

Afin d'illustrer mon propos, je vous ai mis en pièce jointe un cas que je souhaiterais traiter.

L'objectif pour moi est de contrôler à l'aide d'un bouton, les caractères qui seront rentrés par un utilisateur.

En suivant mon exemple :
La "range" A19:H19 est une série de paramètre que l'on ne touche pas.
En ligne 20 même chose, il s'agit de mes en-têtes : on ne les touches pas non plus.

A partir de la ligne 21 , sur la colonne A , l'utilisateur entre une série de code qui doivent tous être de 8 Caractères !
Le nombre de ligne est variable : On peut avoir 1 code comme n codes

Ce que je souhaiterais c'est qu'à l'aide d'un bouton, une macro contrôle ses codes lignes par lignes : Si le code est bon on ne fait rien , si celui-ci possède un nombre de caractère inférieur à 8 ou supérieur à 8 alors on colorie la cellule en rouge et on affiche un msg box disant à l'utilisateur : x codes sont faux, merci de les corriger..

Un point de repère peut être utiliser pour compter les lignes : la cellule totale sur la colonne E.

Merci pour votre aide
 

Pièces jointes

  • contrl ligne.xlsx
    8.6 KB · Affichages: 9

ynx69

XLDnaute Junior
Hello :)

Merci pour ton message ! Globalement j’y avais pensé à la mise en forme conditionnelle et la validation des données aussi. La problématique c’est que la plage est Variable et je ne sais pas si ça s’étendra de manière automatique. Et j’aime bien les macros .. :)

L’objectif pour moi c’est vraiment que la feuille soit totalement vierge aux yeux des utilisateurs et que tout tourne par une macro.
 

D.D.

XLDnaute Impliqué
Ok.
Comme ca alors ?

Code:
Sub Yo_Man()
Dercell = Range("A1048576").End(xlUp).Row
For f = 21 To Dercell
    If Len(Cells(f, 1)) <> 8 Then
        Cells(f, 1).Select
        With Selection.Interior
            .Pattern = xlSolid
            .PatternColorIndex = xlAutomatic
            .Color = 255
            .TintAndShade = 0
            .PatternTintAndShade = 0
        End With
        A = MsgBox("Cellule non conforme", vbInformation, "Yo_Man")
        Exit Sub
    Else
            With Cells(f, 1).Interior
            .Pattern = xlSolid
            .PatternColorIndex = xlAutomatic
            .ThemeColor = xlThemeColorAccent2
            .TintAndShade = 0.599993896298105
            .PatternTintAndShade = 0
            End With
    End If
Next f
End Sub
 

D.D.

XLDnaute Impliqué
Ou peut être plutôt comme ca. A toi de choisir
Code:
Sub Yo_Man()
Dercell = Range("A1048576").End(xlUp).Row
X = 0
For f = 21 To Dercell
    If Len(Cells(f, 1)) <> 8 Then
        With Cells(f, 1).Interior
            .Pattern = xlSolid
            .PatternColorIndex = xlAutomatic
            .Color = 255
            .TintAndShade = 0
            .PatternTintAndShade = 0
        End With
        X = X + 1
    Else
            With Cells(f, 1).Interior
            .Pattern = xlSolid
            .PatternColorIndex = xlAutomatic
            .ThemeColor = xlThemeColorAccent2
            .TintAndShade = 0.599993896298105
            .PatternTintAndShade = 0
            End With
    End If

Next f
        A = MsgBox(X & " Cellule(s) non conforme", vbInformation, "Yo_Man")
End Sub
 

ynx69

XLDnaute Junior
Hello :)

Merci pour ton retour et ton aide ! Je vois comment tu formes ta macro.
Par contre ( si je dis des bêtises arrête moi ) : est ce que tu prend en compte la cellule « total » comme repère de ligne ?

Parce que si je comprend le code tu pars de tout en bas de la colonne À et tu remontes...
sauf que admettons que j’ai 10 codes , en dessous de ces 10 codes j’ai donc la ligne total en colonne E qui encadre le nombre de ligne mais sur les lignes en dessous j’ai d’autres éléments que je ne peux pas toucher et j’ai l’impression que ta macro va contrôler ces éléments là sauf qu’on en a pas besoin.

Est ce que tu vois ce que je veux dire ?
 

D.D.

XLDnaute Impliqué
Oui, je vois ce que tu veux dire.
Actuellement je n'utilise pas la ligne "Total" car... Ben y'avait rien dedans et je n'avais pas vraiment compris.
Si tu modifies
Dercell = Range("A1048576").End(xlUp).Row
en
Dercell = Range("E1048576").End(xlUp).Row
Alors la dernière ligne prise en compte sera la ou il y a quelque chose dans la colonne E
 

Discussions similaires