Problème avec For et Next

dmoluc

XLDnaute Occasionnel
Bonjour à tous,

Décidément je ne peux rien faire sans buter sur un problème qui ne devrait pas être. L'aide de VBA stipule bien que l'on peu imbriquer des Next, For


For I = 1 To 10
For J = 1 To 10
For K = 1 To 10
...
Next K
Next J
Next I

Et bien chez moi cela ne fonctionne pas, j'ai l'erreur Next sans For, voici le code

Code:
Dim z As Long
Dim Q As Double
Dim A
If A <> "" Then
 For i = 11 To 34
 For z = 115 To 137
  
        Select Case i
        Case 11 To 16
        Select Case z
        Case 115 To 120
            A = Me("ListBox" & i).Text
            If Application.CountIf(Range("A39:A45"), "=" & A) = 0 Then
                Range("A45").End(xlUp).Offset(1, 0) = A
                Ligne = Range("A45").End(xlUp).Row
                Q = Me("TestBox & z").Value
                Cells(Ligne, Colonne).Value = z
                Else
                Ligne = Range("A39:A45").Find(A, LookIn:=xlValues, lookat:=xlWhole).Row
                Q = Me("TestBox & z").Value
                Cells(Ligne, Colonne).Value = Q
            End If
        Case 17 To 26
        Case 121 To 129
            A = Me("ListBox" & i).Text
            If Application.CountIf(Range("A87:A128"), "=" & A) = 0 Then
                Range("A128").End(xlUp).Offset(1, 0) = A
                Ligne = Range("A128").End(xlUp).Row
                Q = Me("TestBox & z").Value
                Cells(Ligne, Colonne).Value = Q
                Else
                Ligne = Range("A87:A128").Find(A, LookIn:=xlValues, lookat:=xlWhole).Row
                Q = Me("TestBox & z").Value
                Cells(Ligne, Colonne).Value = Q
            End If
        Case 27 To 34
        Case 130 To 137
            A = Me("ListBox" & i).Text
            If Application.CountIf(Range("A49:A83"), "=" & A) = 0 Then
                Range("A83").End(xlUp).Offset(1, 0) = A
               Ligne = Range("A83").End(xlUp).Row
               Q = Me("TestBox & z").Value
               Cells(Ligne, Colonne).Value = Q
              Else
                Ligne = Range("A49:A83").Find(A, LookIn:=xlValues, lookat:=xlWhole).Row
                Q = Me("TestBox & z").Value
                Cells(Ligne, Colonne).Value = Q
            End If
        End Select
      
    Next z
   Next i
  End If


Que se passe-t-il ?

Merci pour votre aide

Cordialement
Didier
 

pijaku

XLDnaute Occasionnel
Re : Problème avec For et Next

Bonjour,
En fait, tu imbriques des Select Case et tu as oublié un End Select.
L'erreur Next sans For peut être due à un bloc If non fermé (sans End If) ou à un Select Case non fermé (sans End Select).

Comme je ne l'ai jamais vu, je vais tester une imbrication de Select Case et je reviens.
 

pijaku

XLDnaute Occasionnel
Re : Problème avec For et Next

Bonjour tototiti2008,
L'imbrication de Select Case ne pose pas de souci???

@dmoluc : la syntaxe : Me("Listbox" & i) me semble "douteuse". Peux tu me confirmer qu'elle fonctionne?
Sinon, perso, j'utilise : Me.Controls("ListBox" & i)
 

dmoluc

XLDnaute Occasionnel
Re : Problème avec For et Next

Merci les gas c'était bien du à mon étourderie habituelle. Maintenant le code tourne mais il n'écrit rien sur la feuille :( avec 1 select case ça marchait, avec 2 ça coince, mais peu être que j'ai encore d'autre étourderie dans mon code. Je vais vérifier...

Encore merci
 

tototiti2008

XLDnaute Barbatruc
Re : Problème avec For et Next

Re,

L'imbrication de Select Case ne pose pas de souci???

tout dépend où on ferme le Select case de l'intérieur... comme je ne sais pas ce que doit faire le code, je n'en sais rien, mais en effet,en y regardant de plus près on dirait qu'il veuille tester i et z en même temps ce qui n'est pas possible comme ça
Dans chaque Case du 1er Select, tu peux mettre un autre Select Case, mais pas les fermer tous les deux avant le Next

par exemple, ce code est fonctionnel chez moi

Code:
Sub test()
Dim i As Long, j As Long
    For i = 1 To 5
        For j = 1 To 4
            Select Case i
            Case 1 To 2
                Select Case j
                Case 1 To 2
                    MsgBox i + j
                Case Else
                    MsgBox i - j
                End Select
            Case Else
                MsgBox "toto"
            End Select
        Next j
    Next i
End Sub
 

dmoluc

XLDnaute Occasionnel
Re : Problème avec For et Next

J'ai saucissauné le code mais le résultat reste la même :(
c'est pas gagné
Code:
Dim z As Long
Dim Q
Dim A
If A <> "" Then
 For i = 11 To 16
 For z = 115 To 120
  
        Select Case i
        Case 11 To 16
        Select Case z
        Case 115 To 120
            A = Me("ListBox" & i).Text
            If Application.CountIf(Range("A39:A45"), "=" & A) = 0 Then
                Range("A45").End(xlUp).Offset(1, 0) = A
                Ligne = Range("A45").End(xlUp).Row
                Q = Me("TestBox & z").Value
                Cells(Ligne, Colonne).Value = z
                Else
                Ligne = Range("A39:A45").Find(A, LookIn:=xlValues, lookat:=xlWhole).Row
                Q = Me("TestBox & z").Value
                Cells(Ligne, Colonne).Value = Q
            End If
                 
        End Select
      End Select
    Next z
   Next i
   
   For i = 17 To 26
     For z = 121 To 129
     Select Case i
        Case 17 To 26
        Select Case z
        Case 121 To 129
            A = Me("ListBox" & i).Text
            If Application.CountIf(Range("A87:A128"), "=" & A) = 0 Then
                Range("A128").End(xlUp).Offset(1, 0) = A
                Ligne = Range("A128").End(xlUp).Row
                Q = Me("TestBox & z").Value
                Cells(Ligne, Colonne).Value = Q
                Else
                Ligne = Range("A87:A128").Find(A, LookIn:=xlValues, lookat:=xlWhole).Row
                Q = Me("TestBox & z").Value
                Cells(Ligne, Colonne).Value = Q
            End If
             End Select
      End Select
    Next z
   Next i
   For i = 27 To 34
     For z = 130 To 137
     Select Case i
        Case 27 To 34
        Select Case z
        Case 130 To 137
            A = Me("ListBox" & i).Text
            If Application.CountIf(Range("A49:A83"), "=" & A) = 0 Then
                Range("A83").End(xlUp).Offset(1, 0) = A
               Ligne = Range("A83").End(xlUp).Row
               Q = Me("TestBox & z").Value
               Cells(Ligne, Colonne).Value = Q
              Else
                Ligne = Range("A49:A83").Find(A, LookIn:=xlValues, lookat:=xlWhole).Row
                Q = Me("TestBox & z").Value
                Cells(Ligne, Colonne).Value = Q
            End If
        End Select
      End Select
    Next z
   Next i
  End If
    
    
End With
Exit Sub


voici le fichier si quelqu'un y comprend quelque chose, dans tous ce fourbi
http://cjoint.com/?3Hqqnkc9YaP

Le code est UserForm5, Bouton Renseigner le planing

Merci pour votre aide
 

tototiti2008

XLDnaute Barbatruc
Re : Problème avec For et Next

Re,

On ne sait pas ce que doit faire ton code ni pourquoi tu as une double boucle, on va donc avoir beaucoup de mal à te dire s'il faut que tu le coupes en 3, en 9, si c'est préférable de mettre des IF ou si le mieux est de tester i+z
A l'aveugle, je ne sais pas
 

pijaku

XLDnaute Occasionnel
Re : Problème avec For et Next

Avec le fichier sans données confidentielles, nous aurions de grandes chances de faire mieux.

J'ai toujours un doute sur Me("TestBox" & z).Value. De plus tu avais intitlement écris : Me("TestBox & z").Value qui a coup sur ne fonctionnera pas!!!

En attendant, avec ton seul code, essaie :
Code:
Dim z As Long
Dim Q As Double
Dim A
If A <> "" Then
 For i = 11 To 34
 For z = 115 To 137
        Select Case i
        Case 11 To 16
           Select Case z
           Case 115 To 120
            A = Me("ListBox" & i).Text
            If Application.CountIf(Range("A39:A45"), "=" & A) = 0 Then
                Range("A45").End(xlUp).Offset(1, 0) = A
                Ligne = Range("A45").End(xlUp).Row
                Q = Me("TestBox" & z).Value
                Cells(Ligne, Colonne).Value = z
                Else
                Ligne = Range("A39:A45").Find(A, LookIn:=xlValues, lookat:=xlWhole).Row
                Q = Me("TestBox" & z).Value
                Cells(Ligne, Colonne).Value = Q
            End If

           Case 121 To 129
            A = Me("ListBox" & i).Text
            If Application.CountIf(Range("A87:A128"), "=" & A) = 0 Then
                Range("A128").End(xlUp).Offset(1, 0) = A
                Ligne = Range("A128").End(xlUp).Row
                Q = Me("TestBox" & z).Value
                Cells(Ligne, Colonne).Value = Q
                Else
                Ligne = Range("A87:A128").Find(A, LookIn:=xlValues, lookat:=xlWhole).Row
                Q = Me("TestBox" & z).Value
                Cells(Ligne, Colonne).Value = Q
            End If

           Case 130 To 137
            A = Me("ListBox" & i).Text
            If Application.CountIf(Range("A49:A83"), "=" & A) = 0 Then
                Range("A83").End(xlUp).Offset(1, 0) = A
               Ligne = Range("A83").End(xlUp).Row
               Q = Me("TestBox" & z).Value
               Cells(Ligne, Colonne).Value = Q
              Else
                Ligne = Range("A49:A83").Find(A, LookIn:=xlValues, lookat:=xlWhole).Row
                Q = Me("TestBox" & z).Value
                Cells(Ligne, Colonne).Value = Q
            End If
          End Select
        Case 17 To 26

           Select Case z
           Case 115 To 120
            A = Me("ListBox" & i).Text
            If Application.CountIf(Range("A39:A45"), "=" & A) = 0 Then
                Range("A45").End(xlUp).Offset(1, 0) = A
                Ligne = Range("A45").End(xlUp).Row
                Q = Me("TestBox" & z).Value
                Cells(Ligne, Colonne).Value = z
                Else
                Ligne = Range("A39:A45").Find(A, LookIn:=xlValues, lookat:=xlWhole).Row
                Q = Me("TestBox" & z).Value
                Cells(Ligne, Colonne).Value = Q
            End If

           Case 121 To 129
            A = Me("ListBox" & i).Text
            If Application.CountIf(Range("A87:A128"), "=" & A) = 0 Then
                Range("A128").End(xlUp).Offset(1, 0) = A
                Ligne = Range("A128").End(xlUp).Row
                Q = Me("TestBox" & z).Value
                Cells(Ligne, Colonne).Value = Q
                Else
                Ligne = Range("A87:A128").Find(A, LookIn:=xlValues, lookat:=xlWhole).Row
                Q = Me("TestBox" & z).Value
                Cells(Ligne, Colonne).Value = Q
            End If

           Case 130 To 137
            A = Me("ListBox" & i).Text
            If Application.CountIf(Range("A49:A83"), "=" & A) = 0 Then
                Range("A83").End(xlUp).Offset(1, 0) = A
               Ligne = Range("A83").End(xlUp).Row
               Q = Me("TestBox" & z).Value
               Cells(Ligne, Colonne).Value = Q
              Else
                Ligne = Range("A49:A83").Find(A, LookIn:=xlValues, lookat:=xlWhole).Row
                Q = Me("TestBox" & z).Value
                Cells(Ligne, Colonne).Value = Q
            End If
          End Select

                Case 27 To 34
                   Select Case z
           Case 115 To 120
            A = Me("ListBox" & i).Text
            If Application.CountIf(Range("A39:A45"), "=" & A) = 0 Then
                Range("A45").End(xlUp).Offset(1, 0) = A
                Ligne = Range("A45").End(xlUp).Row
                Q = Me("TestBox" & z).Value
                Cells(Ligne, Colonne).Value = z
                Else
                Ligne = Range("A39:A45").Find(A, LookIn:=xlValues, lookat:=xlWhole).Row
                Q = Me("TestBox" & z).Value
                Cells(Ligne, Colonne).Value = Q
            End If

           Case 121 To 129
            A = Me("ListBox" & i).Text
            If Application.CountIf(Range("A87:A128"), "=" & A) = 0 Then
                Range("A128").End(xlUp).Offset(1, 0) = A
                Ligne = Range("A128").End(xlUp).Row
                Q = Me("TestBox" & z).Value
                Cells(Ligne, Colonne).Value = Q
                Else
                Ligne = Range("A87:A128").Find(A, LookIn:=xlValues, lookat:=xlWhole).Row
                Q = Me("TestBox" & z).Value
                Cells(Ligne, Colonne).Value = Q
            End If

           Case 130 To 137
            A = Me("ListBox" & i).Text
            If Application.CountIf(Range("A49:A83"), "=" & A) = 0 Then
                Range("A83").End(xlUp).Offset(1, 0) = A
               Ligne = Range("A83").End(xlUp).Row
               Q = Me("TestBox" & z).Value
               Cells(Ligne, Colonne).Value = Q
              Else
                Ligne = Range("A49:A83").Find(A, LookIn:=xlValues, lookat:=xlWhole).Row
                Q = Me("TestBox" & z).Value
                Cells(Ligne, Colonne).Value = Q
            End If
          End Select

        End Select
      
    Next z
   Next i
  End If
 

dmoluc

XLDnaute Occasionnel
Re : Problème avec For et Next

Sur l'UserForm5, onglet "Déboursé pour la tâche", j'ai des listBox et des textBox qui correspondent aux listbox, comme dans un tableaux exel, le nom, le prix, la quantité
J'ai besoin d'écrire sur la feuille "programme des travaux"
dans 3 catégorie différentes( personnel, matériel, fournitures), les désignations qui sont dans les listbox et la quantité dans la zone graphique et jour par jour (pour le moment dans le code, j'essais simplement de mettre cette quantité le jour du commencement de la tâche car je ne sais pas encore trop comment faire pour l'inscrire sur la durée en sautant weekend et jours fériés. Je vais sans doute bricoler un truc comme le code qui est au début du bouton et qui me permet de colorer le planing

C'est un peu compliquer d'autant plus qu'avec mes maigres connaissance c'est une vraie usine à gaz :(

Merci encore pour votre aide et vos précieux conseils
 

pijaku

XLDnaute Occasionnel
Re : Problème avec For et Next

Ne disposant pas de la même version excel que toi, je ne peux rien faire avec ton fichier. Il me manque trois références pour le faire tourner...
Désolé, mais à moins de continuer à l'aveugle, je préfères passer la main sur ce sujet.
 

dmoluc

XLDnaute Occasionnel
Re : Problème avec For et Next

Merci Franck pour le code, hélas aucune amélioration :(
Pourtant lorsque je n'avais que les select case pour les listbox, le code inscrivait bien le texte des lisbox sur la feuille et au bon endroit et là plus rien ; il doit bien y avoir une incompatibilité quelconque, mais ou ?

A +
 

Discussions similaires

Réponses
11
Affichages
286
Réponses
4
Affichages
209

Statistiques des forums

Discussions
312 203
Messages
2 086 181
Membres
103 152
dernier inscrit
Karibu