J'ai besoin de votre aide pour mon code VBA

Résolu/Fermé
bitissa - Modifié par pijaku le 19/05/2016 à 15:22
Barahaoua Messages postés 88 Date d'inscription jeudi 19 mai 2016 Statut Membre Dernière intervention 17 août 2016 - 31 mai 2016 à 16:01
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

pijaku Messages postés 12263 Date d'inscription jeudi 15 mai 2008 Statut Modérateur Dernière intervention 4 janvier 2024 2 751
19 mai 2016 à 15:50
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
Barahaoua Messages postés 88 Date d'inscription jeudi 19 mai 2016 Statut Membre Dernière intervention 17 août 2016
19 mai 2016 à 16:38
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
pijaku Messages postés 12263 Date d'inscription jeudi 15 mai 2008 Statut Modérateur Dernière intervention 4 janvier 2024 2 751
19 mai 2016 à 16:41
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
Barahaoua Messages postés 88 Date d'inscription jeudi 19 mai 2016 Statut Membre Dernière intervention 17 août 2016
Modifié par baladur13 le 20/05/2016 à 10:29
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
Barahaoua Messages postés 88 Date d'inscription jeudi 19 mai 2016 Statut Membre Dernière intervention 17 août 2016
19 mai 2016 à 17:01
J'ai essayer aussi la dernière version mais sa marche pas
0

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

Posez votre question
pijaku Messages postés 12263 Date d'inscription jeudi 15 mai 2008 Statut Modérateur Dernière intervention 4 janvier 2024 2 751
19 mai 2016 à 18:01
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
pijaku Messages postés 12263 Date d'inscription jeudi 15 mai 2008 Statut Modérateur Dernière intervention 4 janvier 2024 2 751
20 mai 2016 à 09:13
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
Barahaoua Messages postés 88 Date d'inscription jeudi 19 mai 2016 Statut Membre Dernière intervention 17 août 2016
20 mai 2016 à 09:44
merciiii beaucoup c'est Résolu j'ai copier coller ton code et ça marche merciii
0
Barahaoua Messages postés 88 Date d'inscription jeudi 19 mai 2016 Statut Membre Dernière intervention 17 août 2016
20 mai 2016 à 10:25
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
pijaku Messages postés 12263 Date d'inscription jeudi 15 mai 2008 Statut Modérateur Dernière intervention 4 janvier 2024 2 751
20 mai 2016 à 13:04
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
Barahaoua Messages postés 88 Date d'inscription jeudi 19 mai 2016 Statut Membre Dernière intervention 17 août 2016
20 mai 2016 à 13:13
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
pijaku Messages postés 12263 Date d'inscription jeudi 15 mai 2008 Statut Modérateur Dernière intervention 4 janvier 2024 2 751
20 mai 2016 à 13:40
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
Barahaoua Messages postés 88 Date d'inscription jeudi 19 mai 2016 Statut Membre Dernière intervention 17 août 2016
20 mai 2016 à 13:43
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
Barahaoua Messages postés 88 Date d'inscription jeudi 19 mai 2016 Statut Membre Dernière intervention 17 août 2016
20 mai 2016 à 14:00
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
Barahaoua Messages postés 88 Date d'inscription jeudi 19 mai 2016 Statut Membre Dernière intervention 17 août 2016
20 mai 2016 à 14:06
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
Barahaoua Messages postés 88 Date d'inscription jeudi 19 mai 2016 Statut Membre Dernière intervention 17 août 2016
Modifié par pijaku le 24/05/2016 à 08:32
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
pijaku Messages postés 12263 Date d'inscription jeudi 15 mai 2008 Statut Modérateur Dernière intervention 4 janvier 2024 2 751
24 mai 2016 à 08:33
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
Barahaoua Messages postés 88 Date d'inscription jeudi 19 mai 2016 Statut Membre Dernière intervention 17 août 2016
24 mai 2016 à 09:55
merciii beaucoup
0
Barahaoua Messages postés 88 Date d'inscription jeudi 19 mai 2016 Statut Membre Dernière intervention 17 août 2016
24 mai 2016 à 09:42
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
Barahaoua Messages postés 88 Date d'inscription jeudi 19 mai 2016 Statut Membre Dernière intervention 17 août 2016
24 mai 2016 à 16:33
Répondez moi svp je suis bloquer toute la journée je cherche la solution merci
0
Barahaoua Messages postés 88 Date d'inscription jeudi 19 mai 2016 Statut Membre Dernière intervention 17 août 2016
31 mai 2016 à 16:01
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