Ceci est une page optimisée pour les mobiles. Cliquez sur ce texte pour afficher la vraie page.

Imbriqué for ........ next ?????

Boostez vos compétences Excel avec notre communauté !

Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force. Apprenez, échangez, progressez – et tout ça gratuitement ! 👉 Inscrivez-vous maintenant !

KyFranRD

XLDnaute Occasionnel
Bonjour à tous

je cherche à utiliser plusieurs For ..... Next.

Mais malheureusement étant novice je n'y parviens pas. Contrairement au début je parviens maintenant à mieux comprendre certains code mais là ????

Je joins un fichier test2 qui vaut mieux que de longs discours.

Merci à l'avance
 

Pièces jointes

Re : Imbriqué for ........ next ?????

Bonjour KyFranRD,

Deux propositions, avec:

Deux boucles imbriquées:

Code:
Sub test()

Dim Cel, myRange As Range
Dim i As Integer

Set myRange = Range("G3:J4")

    For i = 2 To 6
    
        For Each Cel In myRange
            
            If Range("B" & i).Value <> "" Then

                If Range("B" & i).Value = Cel.Value Then MsgBox "Produit en stock"
            
            End If
            
        Next Cel
        
    Next i

End Sub

Avec une recherche :

Code:
Sub test2()

Dim c As Range
Dim i As Integer

For i = 2 To 6

If Range("B" & i).Value = "" Then GoTo Borne
    With Range("G3:J4")
    
        Set c = .Cells.Find(Range("B" & i).Value, , xlValues, xlWhole)
        
            If Not c Is Nothing Then
                
                MsgBox "Produit en stock"
                
            End If
            
    End With
    
Borne:
Next i
End Sub

A intégrer dans l'évènement que tu souhaites.
Bonne journée !
 
Re : Imbriqué for ........ next ?????

Bonjour,

c'est ici que ça coince: For z = G To J

essaie ce code
Code:
Dim cellule As Range
For y = 2 To 6
For Each cellule In Range("G3:J4")
If Range("B" & y).Value = cellule Then MsgBox ("Produit en stock", ............................")
Next cellule
Next y
à+
Philippe


Edit: Bonjour David .......... même approche
 
Re : Imbriqué for ........ next ?????

Bonjour
Je l'aurais écrit comme ça … peut être:
VB:
Private Sub Worksheet_Change(ByVal Target As Range)
Dim Cel As Range
Application.EnableEvents = False
For Each Cel In Me.[B2:B6]
   If Cel.Value <= 109 Or Cel.Value >= 119 Then Cel.Offset(, 2).ClearContents
   If Cel.Value <> "" Then If Not Me.[G3:J4].Find(What:=Cel.Value, LookIn:=xlValues, _
      LookAt:=xlWhole, MatchCase:=False, SearchFormat:=False) Is Nothing _
      Then MsgBox "Produit " & Cel.Value & " en stock", vbOKOnly, "Info stock"
   Next Cel
Application.EnableEvents = True
End Sub
À +
 
Dernière édition:
Re : Imbriqué for ........ next ?????

Bonjour le fil,

Si je puis me permettre, pourquoi des boucles !?
VB:
Private Sub Worksheet_Change(ByVal Target As Range)  Dim Lig As Long, Critere As Long, MaPlage As Range, MaVal As Long
  ' Si modification hors de la zone B2:B6, on sort
  If Intersect(Target, Range("B2:B6")) Is Nothing Then Exit Sub
  ' Si B <= 109 ou >= 119 alors effacer cellule colonne D
  If Target.Value <= 109 Or Target.Value >= 119 Then Range("D" & Target.Row).ClearContents
  ' Vérifier si en stock
  ' Définir la plage de recherche
  Set MaPlage = Sheets("Sheet1").Range("G3:J4")
  ' Définir le critère de recherche
  Critere = Target
  ' pour chaque ligne
  MaVal = Application.CountIf(MaPlage, Critere)
  If MaVal > 0 Then
    MsgBox "Produit en stock", vbOKOnly, "Info stock"
  End If
End Sub

A chaque saisie la vérification est faite 😉

A+
 
Re : Imbriqué for ........ next ?????

Re BrunoM45

cela marche parfaitement.

Par contre peux tu faire en sorte que l'effacement et l'apparition du msgbox se fassent:

quand une valeur est validée en colonne B car pour le moment cela ne prend effet que si je retourne sur la cellule en colonne B.
Ce que je veux dire c'est que par exemple:

Je rentre une donnée en D, qui reste visible car en colonne B, la condition est respectée <=109 et >=119
par contre si je change la donnée en D, 450 par ex, l'effacement ne se fait pas automatiquement. Je dois changer de cellule, puis revenir sur la même et hop la donnée s'efface. J'espère avoir été clair.

J'ai le même soucis pour l'apparition de la msgbox
 
Re : Imbriqué for ........ next ?????

salut

Si... tu veux relancer la même action quand tu changes en D, essaie
Code:
Private Sub Worksheet_Change(ByVal C As Range)
  If C.Count > 1 Then Exit Sub
  If Intersect(C, Range("B2:D6")) Is Nothing Then Exit Sub
  If C.Column = 2 Then
    If C.Value <= 109 Or C.Value >= 119 Then C.Offset(, 2) = ""
    If Application.CountIf(Range("G3:J4"), C) > 0 Then MsgBox "Produit en stock", vbInformation, "Info stock"
  Else
    C.Offset(, -2) = C.Offset(, -2) 'pour relancer l'évènement
  End If
End Sub

Remarque : c'est une macro évènementielle supposée écrite dans le Module de Feuille adéquat.
Toute référence à des "Range" sans autre précision correspondra à des cellules de cette feuille donc il n'est pas utile de charger le code avec des Me. ou Sheets(...).
 
- Navigue sans publicité
- Accède à Cléa, notre assistante IA experte Excel... et pas que...
- Profite de fonctionnalités exclusives
Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel.
Je deviens Supporter XLD

Discussions similaires

Réponses
2
Affichages
234
Réponses
6
Affichages
199
Réponses
7
Affichages
537
Réponses
10
Affichages
644
Les cookies sont requis pour utiliser ce site. Vous devez les accepter pour continuer à utiliser le site. En savoir plus…