Vérifier les valeurs d'une colonne en VBA

Bonjour,

J'imagine que c'est un sujet vu et revu pourtant après une matinée de recherche je n'arrive pas à trouver le bon code à utiliser .

Voici mon besoin :

Je souhaite vérifier que toute les lignes d'une colonne d'un fichier sont bien renseignées avec une seule valeur par défaut (exemple: 1) et ce, en excluant l'en-tête (en première ligne). Le nombre de lignes n'est pas fixe pour chaque fichier, il peut évoluer dans une limite de 10000 lignes.

Si une ligne (hors en-tête n'est pas renseignée avec la bonne valeur) je souhaite afficher un message d'erreur.

Je souhaite également vérifier si le nombre de lignes de toutes les colonnes vérifiées est bien égal (une colonne ne doit pas être plus petite qu'une autre...).

J'ai une petite dizaine de colonnes à vérifier qui n'ont pas forcément la même valeur par défaut.

Merci beaucoup.

K.

Bonjour

Cordialement

Bonjour Dan,

Voici un exemple de fichier très simplifié des données que je souhaite contrôler.

Merci d'avance pour votre aide.

99fichier-test-k.xlsm (13.50 Ko)

Cdt,

K.

Salut Kolibri,

Salut Dan,

tu parles d'abord de vérifier une colonne ensuite de vérifier plusieurs colonnes : quelle(s) colonne(s) et quelle est leur valeur par défaut ?

Dans ton exemple, j'imagine que [D:D] doit être égale à zéro mais comment peut-on connaître cette valeur par défaut ?

Un fichier, oui, mais un fichier réel avec explications de l'objectif à atteindre, histoire de ne pas avoir un post à rallonge...

A+

Bonjour,

Les colonnes A et D devront toujours avoir respectivement 1 ou 0, si ce n'est pas le cas c'est que c'est une erreur.

Les valeurs par défaut sont définies en "dur" dans le code. A chaque colonne sa valeur par défaut.

Dans mon fichier exemple les colonnes A, C et D n'ont pas le même nombre de lignes, ce qui devrait générer une erreur.

La colonne B est une colonne vide qui dans ce cas doit être ignorée.

Est-ce que c'est plus clair ?

Merci.

Cdt,

K.

Un peu plus clair, on approche car tu dis...

A chaque colonne sa valeur par défaut.

Donc, comme je comprends, il y a UNE valeur par colonne!

Je répète donc : quelle valeur par défaut pour quelle colonne?

A+

Colonne A toujours 1 (sauf l'en-tête bien sûr).

Colonne D toujours 0 (sauf l'en-tête bien sûr).

Bonjour le fil, bonjour le forum,

Peut-être comme ça :

Sub Macro1()
Dim O As Worksheet 'déclare la variable O (Onglet)
Dim TV As Variant 'déclare la variable TV (Tableau des Valeurs)
Dim NL As Integer 'déclare la variable NL (Nombre de Lignes)
Dim NC As Integer 'déclare la variable NC (Nombre de Colonnes)
Dim LI As Integer 'déclare la variable LI (LIgne)
Dim COL As Integer 'déclare la variable COL (COLonne)
Dim VR As Variant 'déclare la variable VR (Valeur de Référence)

Set O = Worksheets("Feuil1") 'définit l'onglet O (à adapter a ton cas)
TV = O.Range("A1").CurrentRegion 'définit le tableau des valeurs TV
NL = UBound(TV, 1) 'définit le nombre de ligne NL du tableau des valeurs TV
NC = UBound(TV, 2) 'définit le nombre de colonnes NC du tableau des valeurs TV
For COL = 1 To NC 'boucle sur toutes les colonnes COL du tableau des valeurs TV
    If O.Cells(Application.Rows.Count, COL).End(xlUp).Row <> NL Then 'condition : si la dernière ligne éditée de la colonne COL est différente de NL
        O.Activate 'active l'onglet O
        O.Cells(Application.Rows.Count, COL).End(xlUp).Select 'sélectionne la dernière ligne en question
        MsgBox "La colonne " & Split(O.Columns(COL).Address(0, 0), ":")(0) & " contient un nombre différent de lignes !." 'message
        Exit Sub 'sort de la procédure
    End If 'fin de la condition
Next COL 'prochaine colonne de la boucle
For COL = 1 To NC 'boucle 1 : sur toutes les colonnes COL du tableau des valeurs TV
    VR = InputBox("Indiquer la valeur de référence pour la colonne " & Split(O.Columns(COL).Address(0, 0), ":")(0), "Valeur de référence", O.Cells(2, COL).Value)
    If VR = False Or VR = "" Then GoTo suite 'si bouton "Annuler", va à l'étiquette "suite"
    For LI = 2 To NL 'boucle 2 : sur toutes les lignes LI de la colonne de la boucle
        If CStr(TV(LI, COL)) <> VR Then 'condition : si la valeur de la cellule de la boucle est différente de la valeur de référence VR
            O.Activate 'active l'onglet O
            O.Cells(LI, COL).Select 'sélectionne la cellule en question
            'arrête la procédure si "Oui" au message ou continue la recherche si "Non" au message
            If MsgBox("Valeur différente en colonne " & Split(O.Columns(COL).Address(0, 0), ":")(0) & " ! Modifier ?", vbYesNo, "ATTENTION") = vbYes Then Exit Sub
        End If 'fin de la condition
    Next LI 'prochaine ligne de la boucle 2
suite: 'étiquette
Next COL 'prochaine colonne de la boucle 1
End Sub

Bonjour,

Merci beaucoup pour cette proposition. Je suis en train de décortiquer et j'ai un peu de mal malgré les multiples commentaires (merci également au passage). Je ne comprends pas où je dois déclarer les valeurs uniques pour chaque colonne car il ne s'agit pas d'une saisie mais de paramètres définis (exemple : valeur de référence de la colonne A = 1) pour chaque colonne.

Autre question, si la boucle 1 est effectuée pour chaque colonne, que se passera-t-il pour les colonnes qui sont vides ou qui ont d'autres valeurs; ne faut-il pas que j'indique quelque part par exemple que veux effectuer le traitement pour colonne "A" et "D"uniquement ?

Merci d'avance.

Cdt,

K.

ne faut-il pas que j'indique quelque part par exemple que veux effectuer le traitement pour colonne "A" et "D"uniquement

Ah! Quand même!

Autre chose : tu as maintenant 2 options!

  • soit, on corrige d'office les valeurs fausses par les valeurs par défaut ET on allonge avec ces valeurs les colonnes trop courtes ;
  • soit on te fait une recap de toutes les erreurs rencontrées.

A+

désolée, je n'ai pas compris ton

Ah! Quand même!

j'ai besoin de la seconde option : un recap de toutes les erreurs rencontrées.

Merci.

Cdt,

K.

Rechercher des sujets similaires à "verifier valeurs colonne vba"