Boucle avec conditionnel multicritères

Bonjour à tous,

Étant novice en VBA, j'essaye de mettre en œuvre une macro qui vérifie les 3 critères suivants dans 2 plages différentes :

- Dans la sélection D7 à dernière ligne du tableau si la valeur de la cellule >= à 600000000 et si la valeur est <=699999999 et si dans la sélection J7 à dernière ligne du tableau la valeur de la cellule est diffèrent de 0 alors une MsgBox apparaît.

J'ai essayé le code suivant :

Dim MaPlage As Range
Dim cel As Range
Dim cel2 As Range

 Set MaPlage = Sheets(8).Range("D7" & ":D" & DernLign)
    For Each cel In MaPlage  'pour toutes les cellules de la plage
         For Each cel2 In Sheets(8).Range("J7" & ":J" & DernLign)
    If cel.Value >= 600000000 And cel.Value <= 699999999 And cel2.Value = "" Then
    MsgBox "La cellule : " & cel2.Address & " doit contenir un élément. Merci de corriger et de relancer les contrôles"
    Exit Sub
    End If
    Next
    Next

Actuellement, il ne prend que ma dernière condition si la colonne "J" est vide.

Merci pour votre aide.

Bonne journée.

Bonjour et bienvenue sur le forum

Tu devrais joindre un fichier en donnant un exemple du résultat attendu.

Bye !

Salut Jeremy, gmb,

En attendant le fichier...

'
For x = 7 To Range("D" & Rows.Count).End(xlUp).Row
    If Cells(x, 4) >= 600000000 And Cells(x, 4) <= 699999999 And Cells(x, 10) <> 0 Then
        MsgBox "La cellule :  " & Replace(Cells(x, 10).Address, "$", " ") & "  doit contenir un élément!" _
                                    & Chr(10) & Chr(10) & "Merci de corriger et de relancer les contrôles", vbCritical
    End If
Next
'

A+

Bonsoir,

Il me semble que c'est peut-être ceci que tu veux faire :

    For Each cel In MaPlage
        If cel.Value >= 600000000 And cel.Value <= 699999999 And cel.Offset(, 6) = "" Then
            '...

Cordialement.

Bonjour (..)

Il y a 2 façons de présenter un code

La bonne et la mauvaise :

Sub CompterVersionEsthetique()
' Tant qu'à faire du style autant y aller gaiement !!!
Dim MaPlage As Range
Dim cel As Range
Dim cel2 As Range

    Set MaPlage = Sheets(8).Range("D7" & ":D" & DernLign)
        For Each cel In MaPlage  'pour toutes les cellules de la plage
            For Each cel2 In Sheets(8).Range("J7" & ":J" & DernLign)
                If cel.Value >= 600000000 And cel.Value <= 699999999 And cel2.Value = "" Then
                    MsgBox "La cellule : " & cel2.Address & " doit contenir un élément. Merci de corriger et de relancer les contrôles"
                        Exit Sub
                            End If
                                Next
                                    Next
                                        End Sub

Sub CompterVersionLisible()
' Sinon beaucoup plus sobre mais pas forcément moins esthétique finalement !!!
Dim MaPlage As Range
Dim cel As Range
Dim cel2 As Range

    Set MaPlage = Sheets(8).Range("D7" & ":D" & DernLign)
    For Each cel In MaPlage  'pour toutes les cellules de la plage
        For Each cel2 In Sheets(8).Range("J7" & ":J" & DernLign)
            If cel.Value >= 600000000 And cel.Value <= 699999999 And cel2.Value = "" Then
                MsgBox "La cellule : " & cel2.Address & " doit contenir un élément. Merci de corriger et de relancer les contrôles"
                Exit Sub
            End If
        Next
    Next
End Sub

Bonjour à tous

@ NCC : la première ressemble à la descente aux enfers !

Bye !

(re)

@gmb

La bonne réponse n'est pas celle-là gmb...

ou bien tu n'as pas bien lu la question

NCC 1701 a écrit :

La bonne et la mauvaise :

tu devais répondre CompterVersionLisible() cependant je veux bien t'accorder le point quand même car il est vrai que l'autre est un enfer à lire

Merci à tous pour vos réponses.

J'ai appliqué le code suivant et ça marche :

For Each cel In MaPlage
        If cel.Value >= 600000000 And cel.Value <= 699999999 And cel.Offset(, 6) = "" Then

Merci pour vos conseils en présentation, je vais appliquer cela

Bonne journée à tous.

Bonjour (..)

jeremy_91 a écrit :

Merci à tous pour vos réponses.

jeremy_91 a écrit :

Merci pour vos conseils en présentation, je vais appliquer cela

Rechercher des sujets similaires à "boucle conditionnel multicriteres"