Bouton Next Boucle For dans Userform

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
 

Nairolf

XLDnaute Accro
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.
 

Wellan24

XLDnaute Nouveau
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.
 

Nairolf

XLDnaute Accro
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.
 

Wellan24

XLDnaute Nouveau
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

  • affichageplage.xlsm
    72.7 KB · Affichages: 49

Nairolf

XLDnaute Accro
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).
 

patricktoulon

XLDnaute Barbatruc
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
 

Si...

XLDnaute Barbatruc
Bonsoir

Pourquoi boucler non pas dans le formulaire mais quand on veut l’utiliser ?
En voici un exemple de programmation.

Je n’ai pas touché à ton code qui me parait compliqué.
 

Pièces jointes

  • Usf dans boucle.xlsm
    22.4 KB · Affichages: 48

Statistiques des forums

Discussions
314 628
Messages
2 111 337
Membres
111 104
dernier inscrit
JEMADA