Bouton Next Boucle For dans Userform

  • Initiateur de la discussion Initiateur de la discussion Wellan24
  • Date de début Date de début

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 !

Wellan24

XLDnaute Nouveau
Bonjour,

Voici mon problème :
j'ai un userform qui fonctionne sur une boucle for, j'aimerais ajouter un bouton qui tant que l'on appuie pas dessus on ne passe pas a la boucle suivant ( variable augmente de 1 ).

Voici le code :

VB:
Private Sub UserForm_Activate()
Dim sh As Worksheet
Dim Chemin As String
Dim Plage As String

'****************** À définir********************
'Chemin = ThisWorkbook.Path & "\"
Chemin = "C:\Users\person\Pictures\"
Fichier = "ImagePlageCellule"
Plage = "A2:A10"
Set sh = Worksheets("Feuil1") 'Nom Feuille à adapter
'*************************************************
Dim Img As Shape
Dim Imgmesu As Shape
Dim strPic As String
Dim strPic2 As String

With Me.Image1
    .Picture = LoadPicture(("C:\Users\person\Pictures\ImagePlageCellule.gif"))
    .PictureSizeMode = fmPictureSizeModeStretch
    .PictureTiling = False
End With

Sheets("Feuil1").Activate
col = Range([A2], [A2].End(xlToRight)).Columns.Count

Sheets("Feuil6").Activate
    For d = 2 To col Step 1
        If Not Sheets("Feuil1").Cells(11, d) = "Vu" Then
            ref = Sheets("Feuil1").Cells(2, d).Value
            ladate = Sheets("Feuil1").Cells(4, d).Value
        Set r = Sheets("Feuil6").Columns(2).Find(ref, LookIn:=xlValues, lookat:=xlWhole)
            If Not r Is Nothing Then
            Sheets("Feuil6").Activate
        'Set Plage = Range(Cells(r.Row + 2, 2), Cells(r.Row + 7, 2))
            With Sheets("Feuil6")
                .Range(Cells(r.Row + 1, 2), Cells(r.Row + 9, 2)).CopyPicture xlScreen, xlBitmap
                .Paste Destination:=.Range("A12")
               
               
         Set Img = Sheets("Feuil6").Shapes(Selection.Name)
         With .ChartObjects.Add(0, 0, Img.Width, Img.Height).Chart
        .Parent.Select
        .Paste
        .Export ref & "_" & ladate & ".gif", "GIF"
         End With
    .ChartObjects(1).Delete
    Img.Delete
    strPic = "C:\Users\person\Documents\" & ref & "_" & ladate & ".gif"
  End With
  Sheets("Feuil1").Activate
    With Sheets("Feuil1")
                .Range(Cells(2, d), Cells(10, d)).CopyPicture xlScreen, xlBitmap
                .Paste Destination:=.Range("A12")
               
       Set Imgmesu = Sheets("Feuil1").Shapes(Selection.Name)

    With .ChartObjects.Add(0, 0, Imgmesu.Width, Imgmesu.Height).Chart
        .Parent.Select
        .Paste
        .Export "Mesu" & "_" & ref & "_" & ladate & ".gif", "GIF"
         End With
    .ChartObjects(1).Delete
    Imgmesu.Delete
    strPic2 = "C:\Users\person\Documents\" & "Mesu" & "_" & ref & "_" & ladate & ".gif"
   
End With

End If

End If

With Me.Image2
    .Picture = LoadPicture(strPic)
    '.PictureSizeMode = fmPictureSizeModeZoom
    .PictureSizeMode = fmPictureSizeModeStretch
    .PictureTiling = False
 End With

    With Me.Image3
    .Picture = LoadPicture(strPic2)
    '.PictureSizeMode = fmPictureSizeModeZoom
    .PictureSizeMode = fmPictureSizeModeStretch
    .PictureTiling = False
   
End With

'Je pense que le code necessaire devrait venir ici, mais je n'arrive pas à l'écrire.


Next

End Sub


Merci d'avance pour votre aide !

Cordialement
 
Salut,

Tout dépend du résultat que tu souhaites:
  • Si tu souhaites juste bloquer temporairement la macro sans avoir besoin d'accéder à XL, il suffit, par exemple de rajouter une commande msgbox("En attente")
  • Si tu souhaites bloquer la macro en ayant accès à XL, c'est plus compliqué, il y a deux possibilités:
    • Ne pas faire la boucle, mais enregistrer un compteur (dans une cellule d'une feuille ou via un nom défini) qui te permettra de repartir à ce compteur lorsque tu relances la macro.
    • Je crois qu'il est possible de mettre en pause une macro tout en ayant accès à XL, il faudrait que je retrouve comment, je crois que ça empêche de lancer d'autres codes vba pendant ce temps.
 
Salut,

Merci de ton intérêt pour mon problème.
J'aimerais juste avoir accès à l'userform. L'userform se lance affiche les images en fonction de la première variable, ici la boucle se stoppe. Après avoir écrit sur une zone de texte sur l'userform (pas encore sur le code), puis cliquer sur le bouton suivant, la boucle passe à la 2ème variable. Ainsi de suite.

Ton idée de compteur peut être la solution, il faudra peut être me guider un peu par contre.

Encore merci.
 
Re,

Tu pourrais rajouter ceci au début :
Code:
For d = Worksheets("Feuil1").Range("A1") To col Step 1
Et cela à la fin:
Code:
a = MsgBox("continuer?", vbYesNo)
If a = 7 Then
  Worksheets("Feuil1").Range("A1") = d
exit sub
End If

Sache que c'est bien de nous avoir transmis le code, mais un fichier exemple serait encore mieux car ça nous permet de faire des tests sans avoir à tout reconstruire.
 
merci ! Oui tu as raison, excuse moi, je joins le fichier cette fois ci. J'ai du enlever les autres macros, et toutes les autres données. J'ai mis en commentaire le code qui étaient liés a ces données, mais cela ne change rien au fonctionnement de la macro.

j'ai appliquer ton code, c'est un bon début, mais on a pas accès à l'userform. Par exemple, on ne peut pas écrire dans la case "commentaire".
De plus, je pense qu'il est possible de lié ce compteur au bouton sur l'userform plutôt qu'a la msgbox.

il faut changer les liens des images dans la macro, la première tu dois la choisir, les autres se créent toutes seules.

Cordialement.

EDIT : j'ai mis n'importe quoi en code à la fin, j'ai pas fais gaffe, excuse
 

Pièces jointes

Là je suis un peu perdu. Je n'arrive pas à comprendre ce que tu souhaites réaliser avec cette manip.
J'ai le sentiment que tu te diriges vers quelque chose de compliqué pour faire quelque chose de simple.

Pour m'éclairer, peux-tu détailler (assez simplement) le flux d'actions (je ne parle pas de code) et de résultats que tu souhaites obtenir (du genre : quand je clique là je veux que cela fasse ceci; à chaque étape jusqu'au résultat final).
 
bonjour
oui c'est aussi mon opinion pourquoi faire simple quand on peut faire compliqué ou l'inverse a toi de voir

je n'ai pas regarder ton fichier mais ta demande concerne une temporisation dans une boucle for par la commande d'un commandbutton

je sais mais perso plutôt que temporiser la boucle je ferait l'action elle même qui est faite dans la boucle
vu que tu modifie une cellule dans une colonne avec cette action il t'est facile de retrouver tes index avec .find
 
- 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
3
Affichages
569
Réponses
2
Affichages
300
Réponses
2
Affichages
371
Réponses
2
Affichages
410
Retour