Boucle For Next reste blolquée

cs_mira3 Messages postés 21 Date d'inscription mardi 3 avril 2012 Statut Membre Dernière intervention 10 mai 2012 - 2 mai 2012 à 11:29
cs_mira3 Messages postés 21 Date d'inscription mardi 3 avril 2012 Statut Membre Dernière intervention 10 mai 2012 - 4 mai 2012 à 14:39
Bonjour,

Je viens à nouveau vers vous car j'ai un soucis avec mon code.
En effet, en faisant le pas à pas détaillé je vois que la boucle ne s'arrête jamais et que mes actions suivantes ne s'executent donc pas. Je ne comprend pas car je dis bien de faire l'action jusqu'à la dernière case vide.
Remarquez-vous une erreur dans mon code?
With Sheets("suivi stock")
NbrLig = .Cells(65536, Col).End(xlUp).Row
For Lig = 1 To NbrLig

If refequipement .Cells(Lig, Col).Value And mouvement.entrée.Value True Then
Sheets("suivi stock").Cells(Lig, 256).End(xlToLeft).Offset(0, 1).Value = mouvement.datemouvement.Value
Sheets("suivi stock").Cells(Lig, 256).End(xlToLeft).Offset(0, 1).Value = mouvement.nbentrée.Value
Sheets("suivi stock").Cells(Lig, 256).End(xlToLeft).Offset(0, 1).Value = mouvement.destinataire.Value
Sheets("stock").Cells(Lig, colsomme).Value = Sheets("stock").Cells(Lig, colsomme).Value + mouvement.nbentrée.Value

End If

If refequipement .Cells(Lig, Col).Value And mouvement.sortie.Value True Then
Sheets("suivi stock").Cells(Lig, 256).End(xlToLeft).Offset(0, 1).Value = mouvement.datemouvement.Value
Sheets("suivi stock").Cells(Lig, 256).End(xlToLeft).Offset(0, 1).Value = -mouvement.nbsortie.Value
Sheets("suivi stock").Cells(Lig, 256).End(xlToLeft).Offset(0, 1).Value = mouvement.destinataire.Value
Sheets("stock").Cells(Lig, colsomme).Value = Sheets("stock").Cells(Lig, colsomme).Value - mouvement.nbentrée.Value


End If



Next




End With


madate = mouvement.datemouvement.Text
If IsDate(madate) = True Then
madate = CDate(madate)
Else
MsgBox ("Entrer une date")
If madate = "" Then
MsgBox ("Entrer une date")
ElseIf mouvement.sortie.Value True And mouvement.destinataire.Value "" Then
MsgBox ("Entrer un destinataire")




mouvement.Hide
Worksheets("stock").Visible = xlSheetVisible
Worksheets("stock").Activate
Sheets("stock").AutoFilterMode = False



Merci d'avance,

13 réponses

ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 211
2 mai 2012 à 11:47
Bonjour,

Impossible de te répondre avec le seul bout de code que tu montres et (surtout) sans savoir quel évènement le déclenche !
On ne sait pas non plus ce qu'est refequipement, où et comment cette variable est déclarée et initialisée. Idem pour Col.
Comment voudrais-tu qu'on analyse quoi que ce soit, dans ces conditions ?
Il est par ailleurs regrettable de constater que ton code n'est pas indenté, ce qui n'en facilite pas la lecture.


________________________
Réponse exacte ? => "REPONSE ACCEPTEE" pour faciliter les recherches.
Pas d'aide en ligne installée ? => ne comptez pas sur moi pour simplement vous dire ce qu'elle contient. Je n'interviendrai qu'en cas de nécessité de développ
0
cs_mira3 Messages postés 21 Date d'inscription mardi 3 avril 2012 Statut Membre Dernière intervention 10 mai 2012
2 mai 2012 à 11:54
Merci ucfoutu,
Je vais remettre le code en entier alors.
Je vais passer pour une bille mais que veux-tu dire par indenté?
Private Sub valider_Click()
Dim Lig     As Long
Dim Col     As String
Dim Coldate As String
Dim NbrLig  As Long
Dim NumLig  As Long
Dim madate As String
Col = "a"
colsomme = "E"

NumLig = 0



Sheets("stock").AutoFilterMode = False


rechercheequipement = mouvement.equipement.Value

Sheets("stock").Select
Range("B9").Select
Selection.AutoFilter
Selection.AutoFilter field:=3, Criteria1:=rechercheequipement
Range("b8:Z10000").Copy
Sheets("rechercheequipement").Select
Range("a2:Z10000").Select
ActiveSheet.Paste

If mouvement.equipement.Value = "" Then
MsgBox (" Veuillez selectionner un équipement")
 
 End If
 

'copie les informations mouvement
refequipement = mouvement.equipement.Value

With Sheets("suivi stock")
NbrLig = .Cells(65536, Col).End(xlUp).Row
For Lig = 1 To NbrLig

If refequipement .Cells(Lig, Col).Value And mouvement.entrée.Value True Then
Sheets("suivi stock").Cells(Lig, 256).End(xlToLeft).Offset(0, 1).Value = mouvement.datemouvement.Value
Sheets("suivi stock").Cells(Lig, 256).End(xlToLeft).Offset(0, 1).Value = mouvement.nbentrée.Value
Sheets("suivi stock").Cells(Lig, 256).End(xlToLeft).Offset(0, 1).Value = mouvement.destinataire.Value
Sheets("stock").Cells(Lig, colsomme).Value = Sheets("stock").Cells(Lig, colsomme).Value + mouvement.nbentrée.Value

End If

If refequipement .Cells(Lig, Col).Value And mouvement.sortie.Value True Then
Sheets("suivi stock").Cells(Lig, 256).End(xlToLeft).Offset(0, 1).Value = mouvement.datemouvement.Value
Sheets("suivi stock").Cells(Lig, 256).End(xlToLeft).Offset(0, 1).Value = -mouvement.nbsortie.Value
Sheets("suivi stock").Cells(Lig, 256).End(xlToLeft).Offset(0, 1).Value = mouvement.destinataire.Value
Sheets("stock").Cells(Lig, colsomme).Value = Sheets("stock").Cells(Lig, colsomme).Value - mouvement.nbentrée.Value


End If



Next




End With


madate = mouvement.datemouvement.Text
If IsDate(madate) = True Then
madate = CDate(madate)
madate = Format("dd/mm/yyyy")

Else
MsgBox ("Entrer une date")
If madate = "" Then
MsgBox ("Entrer une date")
ElseIf mouvement.sortie.Value True And mouvement.destinataire.Value "" Then
MsgBox ("Entrer un destinataire")




mouvement.Hide
Worksheets("stock").Visible = xlSheetVisible
Worksheets("stock").Activate
Sheets("stock").AutoFilterMode = False



End If

End If


End Sub
0
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 211
2 mai 2012 à 12:56
1) Tu ne sais pas ce qu'est l'indentation d'un code ? === >>
Tapez le texte de l'url ici.
2) ta boucle for, telle que montrée, ne saurait être infinie du seul fait du code que tu y as mis.
Il y a donc probablement autre chose ailleurs dans ton code.
Je vois qu'elle est lancée au click d'un bouton .
Pour qu'elle devienne infinie, je ne vois qu'une possibilité : que dans ton code (ailleurs) tu relances ce click automatiquement


________________________
Réponse exacte ? => "REPONSE ACCEPTEE" pour faciliter les recherches.
Pas d'aide en ligne installée ? => ne comptez pas sur moi pour simplement vous dire ce qu'elle contient. Je n'interviendrai qu'en cas de nécessité de développ
0
cs_mira3 Messages postés 21 Date d'inscription mardi 3 avril 2012 Statut Membre Dernière intervention 10 mai 2012
2 mai 2012 à 13:38
Merci pour ta réponse mais j'ai vérifié et je ne vois rien qui le relance...
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
cs_mira3 Messages postés 21 Date d'inscription mardi 3 avril 2012 Statut Membre Dernière intervention 10 mai 2012
2 mai 2012 à 14:02
En fait après avoir revérifié la boucle ne tourne pas en rond elle s'arrête mais le code après ne s'execute pas ce que je ne comprend pas non plus d'ailleurs! Il y a pourtant un else ...
madate = CDate(madate)
madate = Format("dd/mm/yyyy")
0
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 211
2 mai 2012 à 15:04
En fait après avoir revérifié la boucle ne tourne pas en rond elle s'arrête

Bien évidemment (je te l'ai dit).
Et ton problème n'a donc plus rien à voir avec ta boucle !
Et tu te plaindrais donc maintenabnt de ce morceau-là de ton code (oublions donc le reste) :
madate = mouvement.datemouvement.Text
If IsDate(madate) = True Then
madate = CDate(madate)
madate = Format("dd/mm/yyyy")
else
MsgBox ("Entrer une date")
If madate = "" Then
MsgBox ("Entrer une date")
ElseIf mouvement.sortie.Value True And mouvement.destinataire.Value "" then
MsgBox ("Entrer un destinataire")
end if
end if

commence s'il te plait par bien vouloir indenter cette partie de ton code. Tu sais maintenant ce qu'est l'indentation (je te l'ai montré plus haut) et ce geste est précisément de nature à te faciliter la compréhension et les inductions de ce que tu écris. Il est donc on ne peut plus salutaire.
Et je ne reviendrai vers toi que lorsque ton code sera indenté.
________________________
Réponse exacte ? => "REPONSE ACCEPTEE" pour faciliter les recherches.
Pas d'aide en ligne installée ? => ne comptez pas sur moi pour simplement vous dire ce qu'elle contient. Je n'interviendrai qu'en cas de nécessité de développ
0
cs_mira3 Messages postés 21 Date d'inscription mardi 3 avril 2012 Statut Membre Dernière intervention 10 mai 2012
2 mai 2012 à 15:38
madate = mouvement.datemouvement.Text
    If IsDate(madate) = True Then
    madate = CDate(madate)
    madate = Format("dd/mm/yyyy")

        Else
        MsgBox ("Entrer une date")
            If madate = "" Then
            MsgBox ("Entrer une date")
                ElseIf mouvement.sortie.Value True And mouvement.destinataire.Value "" Then
                MsgBox ("Entrer un destinataire")
                    Else

                    mouvement.Hide
                    Worksheets("stock").Visible = xlSheetVisible
                    Worksheets("stock").Activate
                    Sheets("stock").AutoFilterMode = False

        
                End If

            End If
    End If


Comme ça??
0
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 211
2 mai 2012 à 16:38
Non, pas comme cela !
l'indendation permet de visualiser les blocs (et de repérer certraines erreurs du premier coup d'oeil.
La preuve ===>> ton code indenté ===>>
 madate = "01/01/2012"
  If IsDate(madate) = True Then
    madate = CDate(madate)
    madate = Format("dd/mm/yyyy")
  Else
     MsgBox ("Entrer une date")
     If madate = "" Then
        MsgBox ("Entrer une date")
     ElseIf mouvement.sortie.Value True And mouvement.destinataire.Value "" Then
         MsgBox ("Entrer un destinataire")
     Else
        mouvement.Hide
        Worksheets("stock").Visible = xlSheetVisible
        Worksheets("stock").Activate
        Sheets("stock").AutoFilterMode = False
     End If
  End If
  End If

on voit tout de suite un end if "orphelin" !
Avant même d'aller plus loin : on corrige cette énormité-là !

________________________
Réponse exacte ? => "REPONSE ACCEPTEE" pour faciliter les recherches.
Pas d'aide en ligne installée ? => ne comptez pas sur moi pour simplement vous dire ce qu'elle contient. Je n'interviendrai qu'en cas de nécessité de développ
0
cs_mira3 Messages postés 21 Date d'inscription mardi 3 avril 2012 Statut Membre Dernière intervention 10 mai 2012
2 mai 2012 à 16:41
Alors!
J'ai modifié un peu mon code et du coup ça marche mieux mais j'ai un nouveau problème qui apparait. C'était le else qui faisait passer directement en bas. Seulement j'avais mis else pour que l'on reste sur le formulaire si jamais la date ou le destinataire n'avait pas été saisi.
Je m'emmele les pinceaux en fait!
je vais essayer de poser tout ça au clair...
0
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 211
2 mai 2012 à 16:59
Commence par organiser ta pensée.
Dès lors que tu auras défini (au moins pour toi, en pensée) clairement ce que tu veux, le reste ne sera qu'un jeu d'enfant.

Je veux au passage appeler ton attention sur la contradiction évidente de ces 3 expressions :
madate = "01/01/2012" ' donc une string
  If IsDate(madate) = True Then
    madate = CDate(madate) ' donc une date !
    madate = Format("dd/mm/yyyy" ' donc à nouveau une string !


C'est quoi, çà ? (et VBA l'aurait immédiatement dénoncé si tu avait déclaré et typé madate, hein ... ou si tu t'étais mis en option Explicit
________________________
Réponse exacte ? => "REPONSE ACCEPTEE" pour faciliter les recherches.
Pas d'aide en ligne installée ? => ne comptez pas sur moi pour simplement vous dire ce qu'elle contient. Je n'interviendrai qu'en cas de nécessité de développ
0
cs_mira3 Messages postés 21 Date d'inscription mardi 3 avril 2012 Statut Membre Dernière intervention 10 mai 2012
4 mai 2012 à 11:56
Rebonjour!
Oui! j'ai enfin réussi à faire ce que je voulais
Par contre pour la date j'avais trouvé ce code sur un forum mais il ne marche pas. Ma date s'affiche toujours en format anglais dans la feuille excel. Aurais-tu une solution?
0
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 211
4 mai 2012 à 13:11
Excuse-moi, mais :
- ta NOUVELLE question n'a plus rien à voir avec le sujet ouvert (boucle sans fin)
- on ne voit (n'a rien vu) dans le bout de code montré, la moindre interférence avec une cellule !
Qu'espères-tu alors comme réponse ?


________________________
Réponse exacte ? => "REPONSE ACCEPTEE" pour faciliter les recherches.
Pas d'aide en ligne installée ? => ne comptez pas sur moi pour simplement vous dire ce qu'elle contient. Je n'interviendrai qu'en cas de nécessité de développ
0
cs_mira3 Messages postés 21 Date d'inscription mardi 3 avril 2012 Statut Membre Dernière intervention 10 mai 2012
4 mai 2012 à 14:39
Oui je sais que ça n'a pas de rapport mais tu m'as lancé sur le sujet .
C'est plus tard dans mon code que j'ai mis :
Sheets("suivi stock").Cells(Lig, 256).End(xlToLeft).Offset(0, 1).Value = mouvement.datemouvement.Value
ActiveCell.NumberFormat = "dd/mm/yyyy"


Mais la non plus je n'ai pas le bon format...
0
Rejoignez-nous