J'ai besoin de votre aide pour mon code VBA

Résolu
bitissa -  
Barahaoua Messages postés 89 Date d'inscription   Statut Membre Dernière intervention   -
Bonjour,

Private Sub Simulation_Click()
Dim i as integer 
'code pour le lancement des passe dans le tunel

Recommencer:  If Range("B1").Value <> "" Then 'vérifie que B1 n'est pas vide
Range("B7:T7").Value = "" 'réinitialise ton "tableau"
i = 2 'valEUr de Ma première colonne du tableau
Application.Wait Time + TimeSerial(0, 0, 1) 'attends 10 sec
Do Until Range("T7") <> "" 'conditionne la boucle jusqu'à la dernière colonne de ton tableau
If i > 2 Then Cells(7, i - 1).Value = Range("B1") 'mettre la valeur de B1 dans les cellule precedente
Cells(7, i).Value = Range("B1").Value 'mets ta valeurs dans la cellule de ton tableau
i = i + 1 'prochaine colonne

Application.Wait Time + TimeSerial(0, 0, 1) 'attends 10 sec
Loop
Range("B3") = Range("B3") + Range("T7")

GoTo Recommencer

End If
End Sub


cette boucle est infinie je veux mettre un bouton sur lequel je clique et que cette boucle infinie s'arrête est ce que c'est possible ?

18 réponses

  1. pijaku Messages postés 13513 Date d'inscription   Statut Modérateur Dernière intervention   2 773
     
    Bonjour,

    Voici ton code modifié avec deux boutons nommés : Simulation et Stop

    Option Explicit
    
    Dim Arret As Boolean
    
    Private Sub CommandButton1_Click()
    Dim i As Integer
    'code pour le lancement des passe dans le tunel
    Arret = False
    Do While Arret = False
        DoEvents
        If Range("B1").Value <> "" Then 'vérifie que B1 n'est pas vide
            Range("B7:T7").Value = "" 'réinitialise ton "tableau"
            i = 2 'valEUr de Ma première colonne du tableau
            Application.Wait Time + TimeSerial(0, 0, 1) 'attends 10 sec
            Do Until Range("T7") <> "" 'conditionne la boucle jusqu'à la dernière colonne de ton tableau
                If i > 2 Then Cells(7, i - 1).Value = Range("B1") 'mettre la valeur de B1 dans les cellule precedente
                Cells(7, i).Value = Range("B1").Value 'mets ta valeurs dans la cellule de ton tableau
                i = i + 1 'prochaine colonne
                Application.Wait Time + TimeSerial(0, 0, 1) 'attends 10 sec
                DoEvents
            Loop
            Range("B3") = Range("B3") + Range("T7")
        End If
    Loop
    End Sub
    
    Private Sub Stop_Click()
        Arret = True
    End Sub
    


    Modifications :
    • ajout d'une variable de portée module booléenne : Arret As Boolean
    • Changement de valeur de cette variable lors d'un clic sur le bouton Stop
    • Ajout de deux DoEvents pour permettre à l'utilisateur de cliquer


    Ce code permet l'arrêt, une fois le bouton Stop cliqué, à la fin de la boucle, lorsque T7 est complété.
    0
  2. Barahaoua Messages postés 89 Date d'inscription   Statut Membre Dernière intervention  
     
    Bonjour PiJaku
    j'ai essayer ton code mais la boucle ne s'rréte pas je sais pas quoi faire
    merci

    Private [/contents/446-fichier-sub Sub] Simulation_Click()
    
    Dim i As Integer
    'code pour le lancement des passe dans le tunel
    Arret = False
    Do While Arret = False
        DoEvents
        If Range("B1").Value <> "" Then 'vérifie que B1 n'est pas vide
            Range("B7:T7").Value = "" 'réinitialise ton "tableau"
            i = 2 'valEUr de Ma première colonne du tableau
            Application.Wait Time + TimeSerial(0, 0, 1) 'attends 10 sec
            Do Until Range("T7") <> "" 'conditionne la boucle jusqu'à la dernière colonne de ton tableau
                If i > 2 Then Cells(7, i - 1).Value = Range("B1") 'mettre la valeur de B1 dans les cellule precedente
                Cells(7, i).Value = Range("B1").Value 'mets ta valeurs dans la cellule de ton tableau
                i = i + 1 'prochaine colonne
                Application.Wait Time + TimeSerial(0, 0, 1) 'attends 10 sec
                DoEvents
            Loop
            Range("B3") = Range("B3") + Range("T7")
        End If
    Loop
    End Sub
    
    Private Sub Stop_Click()
        Arret = True
    End Sub
    0
    1. pijaku Messages postés 13513 Date d'inscription   Statut Modérateur Dernière intervention   2 773
       
      Et pourtant, elle s'arrête, comme indiqué dans mon précédent message, une fois que :
      > on a cliqué sur le bouton Stop
      ET QUE
      > T7 est rempli

      Si tout souhaite arrêté tout de suite, sans attendre que T7 soit complété, alors essaie ceci :
      Dim Arret As Boolean
      
      Private Sub Simulation_Click()
      
      Dim i As Integer
      'code pour le lancement des passe dans le tunel
      Arret = False
      Do While Arret = False
          DoEvents
          If Range("B1").Value <> "" Then 'vérifie que B1 n'est pas vide
              Range("B7:T7").Value = "" 'réinitialise ton "tableau"
              i = 2 'valEUr de Ma première colonne du tableau
              Application.Wait Time + TimeSerial(0, 0, 1) 'attends 10 sec
              Do Until Range("T7") <> "" Or Arret = True 'conditionne la boucle jusqu'à la dernière colonne de ton tableau
                  If i > 2 Then Cells(7, i - 1).Value = Range("B1") 'mettre la valeur de B1 dans les cellule precedente
                  Cells(7, i).Value = Range("B1").Value 'mets ta valeurs dans la cellule de ton tableau
                  i = i + 1 'prochaine colonne
                  Application.Wait Time + TimeSerial(0, 0, 1) 'attends 10 sec
                  DoEvents
              Loop
              Range("B3") = Range("B3") + Range("T7")
          End If
      Loop
      End Sub
      
      Private Sub Stop_Click()
          Arret = True
      End Sub


      PS : dans le code que tu as collé dans ton autre message, tu ne reprends pas du tout mon code. Tu as essayé de l'adapter au lieu de copier/coller...
      0
  3. Barahaoua Messages postés 89 Date d'inscription   Statut Membre Dernière intervention  
     
    je sais pas qu'est ce qui ne va pas est ce que tu peux m’envoyer ton mail pour t'envoyer le ficher excel, si c'est possible si non c'est pas grave j'essayerai de trouver une solution voila le miens Adresse mail supprimée Modération CCM
    0
  4. Barahaoua Messages postés 89 Date d'inscription   Statut Membre Dernière intervention  
     
    J'ai essayer aussi la dernière version mais sa marche pas
    0
  5. Vous n’avez pas trouvé la réponse que vous recherchez ?

    Posez votre question
  6. pijaku Messages postés 13513 Date d'inscription   Statut Modérateur Dernière intervention   2 773
     
    Vérifie les nom (propriété name) de tes boutons. Ils doivent correspondre avec les noms de tes Sub
    Exemple :
    Private Sub Bouton1.Click() correspond uniquement au bouton nommé Bouton 1.

    Les codes donnés précédemment doivent être placés dans le module de la feuille concernée.

    Je reviens demain avec un classeur exemple.

    --
    0
  7. pijaku Messages postés 13513 Date d'inscription   Statut Modérateur Dernière intervention   2 773
     
    Bonjour,

    Comme promis hier, voici un fichier exemple.
    Ouvre le, saisie n'importe quoi en B1, clic sur le CommandButton1, observe un peu et clic sur le CommandButton2...

    En fait, le CommandButton1 est nommé BoutonDEPART (propriété name) et le CommandButton2 est nommé BoutonSTOP.

    Si ton fichier ne fonctionne toujours pas :
    Pour joindre un fichier sur les forums de ccm il faut :
    > se rendre sur le site : https://www.cjoint.com/
    > cliquer sur "Parcourir"
    > rechercher le fichier
    > cliquer sur "Ouvrir"
    > cliquer sur "Créer le lien Cjoint"
    > copier le lien
    > revenir ici le coller dans une réponse

    0
  8. Barahaoua Messages postés 89 Date d'inscription   Statut Membre Dernière intervention  
     
    merciiii beaucoup c'est Résolu j'ai copier coller ton code et ça marche merciii
    0
  9. Barahaoua Messages postés 89 Date d'inscription   Statut Membre Dernière intervention  
     
    Bonjour PiJaku voila en faite ce que je veux faire regarde stp si t'arrive a m'aidez

    on faite moi je veux que lorsque j’appuie sur le bouton simulation que mon programme cherche la valeur de B1 et la met dans la cellule B7 ensuite la valeur de la cellule B8 recois la valeur de B7 et la valeur de B9 recoi la valeur de B8 et ainsi de suite jusque T7 recois la valeur de S7 et ensuite on recommence B7 resois la valeur de B1 ....... jusque T7 (Cette boucle est infinie et pour le passage d'une cellule a l'autre il faut attendre 1 seconde .



    ensuite a chaque remplissage de la cellule T7 il faut prendre sa valeur et la mettre dans la colonne X dans la cellule qui correspond a la premiére chaine de caractére , en suite l'orsque T7 se remplie une 2eme fois il faut prendre sa valeur et la mettre dans la colonne X dans la celulle qui correspond a la 2eme chaine de caractére et ainsi de suit jusqua trouver une cellule vide dans la colonne c et c'est la ou on fini le programme




    et voila le code que j'ai maintenant mais qui répond pas exactement a ce que je veux
    Dim Arret As Boolean
    Private Sub CommandButton1_Click()
    'Lancer la simulation
    
    Dim i As Integer
    'code pour le lancement des passe dans le tunel
    Arret = False
    If Range("B1").Value <> "" Then 'vérifie que B1 n'est pas vide
        Do While Arret = False
            DoEvents
        
            Range("B7:T7").Value = "" 'réinitialise ton "tableau"
            i = 2 'valEUr de Ma première colonne du tableau
            Application.Wait Time + TimeSerial(0, 0, 1) 'attends 10 sec
            Do Until Range("T7") <> "" Or Arret = True 'conditionne la boucle jusqu'à la dernière colonne de ton tableau
                If i > 2 Then Cells(7, i - 1).Value = Range("B1") 'mettre la valeur de B1 dans les cellule precedente
                Cells(7, i).Value = Range("B1").Value 'mets ta valeurs dans la cellule de ton tableau
                i = i + 1 'prochaine colonne
                Application.Wait Time + TimeSerial(0, 0, 1) 'attends 10 sec
                DoEvents
            Loop
            Range("B3") = Range("B3") + Range("T7")
            
            For i = 1 To 30
    j = 13
    Do Until Sheets(2).Cells(j, 3).Value = "" Or Sheets(2).Cells(j, 2).Value = i + 1
    If Sheets(2).Cells(j, 2).Value = i Then
    C = Sheets(2).Cells(j, 3).Value
    Set r = Sheets(2).Range("X:X").Find(C)
    Sheets(2).Cells(r.Row + 1, r.Column).Value = Sheets(2).Range("T7").Value
    Application.Wait Time + TimeSerial(0, 0, 1)
    End If: j = j + 1: Loop: Next i
        Loop
    Else
        MsgBox "B1 est vide !"
    End If
    End Sub
    
    Private Sub CommandButton2_Click()
    'Boucle pour arréter la boucle infinie
    Arret = True
    End Sub
    0
  10. pijaku Messages postés 13513 Date d'inscription   Statut Modérateur Dernière intervention   2 773
     
    Tu aurais pu nous mettre ton fichier...
    Je l'ai refait donc...

    Voici :
    1- les codes :
    Option Explicit
    
    Dim Arret As Boolean
    Dim Nb_Boucle As Integer
    
    Private Sub BoutonDEPART_Click()
    Dim i As Integer, Nbre_Total_Boucl As Integer, Rng As Range
    'code pour le lancement des passe dans le tunel
        Arret = False: Nb_Boucle = 0
        If Range("B1").Value <> "" Then 'vérifie que B1 n'est pas vide
            Nbre_Total_Boucl = Columns(3).Find("*", , , , , xlPrevious).Row - 12
            Do While Arret = False
                DoEvents
                Range("B7:T7").Value = "" 'réinitialise ton "tableau"
                i = 2 'valEUr de Ma première colonne du tableau
                Application.Wait Time + TimeSerial(0, 0, 1) 'attends 10 sec
                Do Until Range("T7") <> "" Or Arret = True 'conditionne la boucle jusqu'à la dernière colonne de ton tableau
                    If i > 2 Then Cells(7, i - 1).Value = Range("B1") 'mettre la valeur de B1 dans les cellule precedente
                    Cells(7, i).Value = Range("B1").Value 'mets ta valeurs dans la cellule de ton tableau
                    i = i + 1 'prochaine colonne
                    Application.Wait Time + TimeSerial(0, 0, 1) 'attends 10 sec
                    DoEvents
                Loop
                Range("B3") = Range("B3") + Range("T7")
                Set Rng = Columns(24).Cells.Find(Range("C13").Offset(Nb_Boucle, 0).Value)
                If Rng Is Nothing Then
                    MsgBox Range("C13").Offset(Nb_Boucle, 0).Value & " non trouvé en colonne X"
                Else
                    Rng.Offset(1, 0).Value = Rng.Offset(1, 0).Value + Range("T7").Value
                End If
                Nb_Boucle = Nb_Boucle + 1
                If Nb_Boucle = Nbre_Total_Boucl Then Exit Do
            Loop
        Else
            MsgBox "B1 est vide !"
        End If
    End Sub
    
    Private Sub BoutonSTOP_Click()
        Arret = True
    End Sub
    
    Private Sub Renitialiser_Click()
        [B7:T7].ClearContents
        [B3].ClearContents
        [X3].ClearContents
        [X5].ClearContents
        [X7].ClearContents
        [X9].ClearContents
        [X11].ClearContents
        [X13].ClearContents
    End Sub
    


    2- le fichier : https://www.cjoint.com/c/FEuldYpU8PE
    0
  11. Barahaoua Messages postés 89 Date d'inscription   Statut Membre Dernière intervention  
     
    Merci Beaucoup je vais l'eesayer maintenent et je te dirai si ca marche

    je voulais mettre la piéce jointe mais je sais pas ou la mettre j'arrive pas a la télécharger

    comme je viens d'intégré commentcamarche je sais pas comment faire

    désolé
    0
    1. pijaku Messages postés 13513 Date d'inscription   Statut Modérateur Dernière intervention   2 773
       
      Pour joindre un fichier sur les forums de ccm il faut :
      > se rendre sur le site : https://www.cjoint.com/
      > cliquer sur "Parcourir"
      > rechercher le fichier
      > cliquer sur "Ouvrir"
      > cliquer sur "Créer le lien Cjoint"
      > copier le lien
      > revenir ici le coller dans une réponse
      0
  12. Barahaoua Messages postés 89 Date d'inscription   Statut Membre Dernière intervention  
     
    Merci Merci et encore Merci Pijaku tu ma résolu mon probléme t'est vraiment génial je n'oublirai jamais ton aide merciii

    c'est bon toute est résolu
    0
  13. Barahaoua Messages postés 89 Date d'inscription   Statut Membre Dernière intervention  
     
    J'ai juste une Question Pijaku si je veux que mon tableau bleu ne se vide pas et que chaque 1 seconde une passe sort je rajoute quoi dans mon code ?
    ?
    0
  14. Barahaoua Messages postés 89 Date d'inscription   Statut Membre Dernière intervention  
     
    c'est bon piJaku j'ai trouver la solution j'ai juste mis

    cette ligne
    'Range("B7:T7").Value = "" 'réinitialise ton "tableau"

    en commentaire et ca marche parfaitement

    merci beaucoupp pou l'aide
    0
  15. Barahaoua Messages postés 89 Date d'inscription   Statut Membre Dernière intervention  
     
    Bonjour PIjaku j'ai besoin de ton aide pour ma 2éme partis du projet , mais le problème je veux t'envoyer mon fichier excel mais je sais pas comment faire sur commentcamarche.net

    voila mon mail mail supprimé [modération]

    ou bien si c'est possible de me montrer comment faire pour te l’envoyer pour évité de récrire tous le code vba

    merci pour ton aide et ta compréhension
    0
  16. pijaku Messages postés 13513 Date d'inscription   Statut Modérateur Dernière intervention   2 773
     
    Bonjour,

    Pour joindre un fichier sur les forums de ccm il faut :
    > se rendre sur le site : https://www.cjoint.com/
    > cliquer sur "Parcourir"
    > rechercher le fichier
    > cliquer sur "Ouvrir"
    > cliquer sur "Créer le lien Cjoint"
    > copier le lien
    > revenir ici le coller dans une réponse

    0
    1. Barahaoua Messages postés 89 Date d'inscription   Statut Membre Dernière intervention  
       
      merciii beaucoup
      0
  17. Barahaoua Messages postés 89 Date d'inscription   Statut Membre Dernière intervention  
     
    https://www.cjoint.com/c/FEyhIsAGP8h

    Bonjour Pijaku , j'ai encore besoin de Ton aide Stp pour une nouvelle parti de mon projet , je suis revenu vers toi psq t'est le seul a me trouver le code pour la premiére parti et je trouve que la 2éme parti ce base sur le méme principe de boucle .

    1ére chose a faire il faut pointer sur 1ére valeur du cadencement placer dans la première cellule de la colonne C du tableau(2éme feuille du classeur )

    en suite partir la chercher aléatoirement dans un autre tableau ( 1ére feuille du classeur) dans la colonne H .

    en suite prendre la valeur du tonnage de chaque famille dans la colonne B qui correspond a la valeur sur laquelle on a pointer et on soustrait de ce tonnage la valeur placer dans la cellule B1( 2éme feuille) (valeur de la cellule B1 = 53 )

    on met le résultat de la soustraction dans la colonne K( placer dans la 1ére feuille du classeur ) .le résultat doit être dans la cellule qui correspond exactement a la valeur sur la quel on a pointer au début.

    ensuite la boucle tourne et en va pointer sur la 2eme cellule du tableau de cadencement de la colonne C du tableau( 2éme feuille du classeur )

    on vérifie pour chaque cadencement (colonne C placer dans la 2éme feuille du classeur )
    si le tonnage calculer > 53 on fait encore tourner la boucle
    si le tonnage calculer < 53 on passe au cadencement suivant
    fin si

    Regarde stp le fichier Excel et si ta une question n'hésite pas a me la poser

    merciii
    0
  18. Barahaoua Messages postés 89 Date d'inscription   Statut Membre Dernière intervention  
     
    Répondez moi svp je suis bloquer toute la journée je cherche la solution merci
    0
  19. Barahaoua Messages postés 89 Date d'inscription   Statut Membre Dernière intervention  
     
    Bonjour tous le monde svp aidez moi pour resoudre se probléme :( :? :(

    ce que je veux faire c'est pouvoir tourner les boucles de mon code VBA quand la celulle B7 recoit la valeur de B1 . parceque maintenant mes boucle tourne lorsque la cellule T7 reçoit sa la valeur B1 .

    donc si vous pouvez m'aidez regardez svp le fichier excel et vous aller voir que les colonnes X ,I , R et la celulle B3 changent lorsque la valeur T7 reçoit sa la valeur B1. et moi je veux pas ca je veux que les colonne X ,I , R et la celulle B3 se remplissent lorsque B7 recoit la valeur de B1 .

    je vous met le fichier excel en piece jointe pour comprendre se que je vous faire j'ai vraiment besoin de votre aides les amis

    https://www.cjoint.com/c/FEFobwOWexh
    0