Contrôle dans une plage de données

Bonjour à tous,

Je souhaiterais vérifier si les informations contenus dans la colonne D de mon tableau existe dans ma plage de données en colonne A de ma feuille "Données".

Si ce n'est pas le cas, un MsgBox apparait "Le contenu dans la cellule X est correcte"

On m'a parlé de la fonction "Intersect" mais je ne sais pas du tout comment l'utiliser.

Si vous avez quelques pistes, je suis preneur

Merci pour votre aide.

5test3.xlsm (17.88 Ko)

Bonjour

Un essai à tester. Te convient-il ?

Bye !

6test3-v1.xlsm (26.02 Ko)

Super merci beaucoup.

Par contre il me faut un Msgbox quand le contenu de la cellule est incorrect.

Que dois-je modifier dans ton code pour cela ?

Sub Vérif()
    For Each c In Range("A8:A" & Range("A" & Rows.Count).End(xlUp).Row)
        If WorksheetFunction.CountIf(Range("D8:D" & Range("A" & Rows.Count).End(xlUp).Row), c.Value) Then
            MsgBox "Le contenu de la cellule A" & c.Row & " est correct."
        End If

    Next c
End Sub

Merci beaucoup.

Bonjour

jeremy_91 a écrit :

Par contre il me faut un Msgbox quand le contenu de la cellule est incorrect.

Mais... n'est-ce pas le cas ?

Donne-moi un exemple concret de ce que tu veux avoir.

J'avais compris que quand tu avais AA en colonne A et AA en colonne D tu avais le message. Apparemment, ce n'est pas ce que tu veux.

Bye !

Le résultat que je voudrais obtenir est le suivant :

Si la colonne A de la feuille 1 "Tableau" = 2, il faut vérifier que la donnée contenu dans la cellule de la colonne D de la feuille 1 "tableau" correspond à l'une des donnée contenue dans la colonne A de la feuille 2 "Données"

Si ce n'est pas le cas, alors MsgBox "Le contenu de la cellule X est incorrect"

Exemple : Dans le tableau ci-joint, la Msgbox doit se déclencher pour la cellule D15 car "ZZ" n'est pas dans la plage de données dans la colonne A de la feuille 2 "Données"

Merci pour ton aide.

3test3-v1-1.xlsm (20.34 Ko)

Nouvelle version.

Bye !

9test3-v2.xlsm (26.81 Ko)

Hello,

Merci beaucoup

Juste une dernière chose, y a t'il moyen de faire une boucle au niveau du tableau D avec ton code ? Mon tableau va faire 1000 lignes ...

J'ai essayé cela, mais ça ne marche pas :

Sub Vérif()

    tabloD = Sheets(2).Range("A1:A9999")
    tabloT = Sheets(3).Range("A7:N" & Sheets(3).Range("A" & Rows.Count).End(xlUp).Row)
    For i = 1 To UBound(tabloT, 1)
    For Z = 1 To UBound(tabloD, 1)
        If tabloT(i, 1) = 2 Then
            If tabloT(i, 11) <> tabloD(Z, 1) Then
                MsgBox "Le contenu de la cellule K" & i + 6 & " est incorrect."
                Exit Sub
            End If
        End If
    Next
Next
    End Sub

Merci d'avance.

Bonjour

jeremy_91 a écrit :

y a t'il moyen de faire une boucle au niveau du tableau D avec ton code ?

Mais... il y a une boucle ! Regarde bien !

Et ce n'est pas un tableau avec 1000 lignes sur 4 colonnes qui va faire peur à la macro : elle utilise justement des variables-tableau pour travailler plus Vite.

Quant à la macro que tu dis avoir essayée, elle ressemble à la mienne mais il serait plus judicieux d'en rester à celle-ci.

Bye !

Re,

Dans ton code d'origine (ci-dessous), il y a effectivement une boucle sur TabloT avec la variable i, mais il n'y a pas de boucle au niveau du tabloD où tu utilises le "And" pour les lignes 1 à 3.

Sub Vérif()

    tabloD = Sheets("Données").Range("A1:A3")
    tabloT = Sheets("Tableau").Range("A7:D" & Sheets("Tableau").Range("A" & Rows.Count).End(xlUp).Row)
    For i = 1 To UBound(tabloT, 1)
        If tabloT(i, 1) = 2 Then
            If tabloT(i, 4) <> tabloD(1, 1) And tabloT(i, 4) <> tabloD(2, 1) _
                    And tabloT(i, 4) <> tabloD(3, 1) Then
                MsgBox "Le contenu de la cellule A" & i + 6 & " est incorrect."
            End If
        End If
    Next i
End Sub

J'ai essayé de modifier ton code et de faire une boucle sur tabloD avec une variable Z mais cela ne marche pas. (code de mon tableau précédent)

Bonjour

Alors, essai ça :

Option Explicit
Dim tabloT, tabloD, i&, iD&, flag&

Sub Vérif()
    tabloD = Sheets("Données").Range("A1:A3")
    tabloT = Sheets("Tableau").Range("A7:D" & Sheets("Tableau").Range("A" & Rows.Count).End(xlUp).Row)
    For i = 1 To UBound(tabloT, 1)
        flag = 0
        If tabloT(i, 1) = 2 Then
            For iD = 1 To 3
                If tabloT(i, 4) = tabloD(iD, 1) Then
                    flag = 1
                    Exit For
                End If
            Next iD
            If flag = 0 Then
                MsgBox "Le contenu de la cellule A" & i + 6 & " est incorrect."
            End If
        End If
    Next i
End Sub

Bye !

Bonjour.

Super, ça fonctionne très bien

Merci beaucoup pour ton aide.

Bonne journée

Rechercher des sujets similaires à "controle plage donnees"