VBA Excel userform bouton [Résolu]

- - Dernière réponse :  jondette - 21 avril 2013 à 21:25
Bonjour,
J'ai crée un USERFORM sur excel 2007
Les fonction marche, sauf le bouton annulé qui arrêt bien l'éxécution de l'userform, mais qui ne permet pas d'arrêter la macro situé dans un module par laquelle j'ai lancé celle-ci (userform.show).
La macro du module continu de s'exécuté jusqu'a la fin ...
Je ne trouve pas comment aller à la fin de cette macro (par goto ou next ???) quand je clic sur le bouton annulé de l'userform
J'ai le même probleme pour l'exécution de la croix en haut à droite de l'useurform

Merci beaucoup de votre aide
Afficher la suite 

Votre réponse

12 réponses

Meilleure réponse
3
Merci
D'accord, je vais déjà donc exposer ton code entre les balises de code prévues a cet effet, a ta place, car autrement c'est illisible
Sub courrierBTF() 
' 
Dim ObjWord As Word.Application 
Dim LeDocWord As Word.Document 
Dim NFacture As String 
Dim User As String 
Dim Chemin As String 
Dim Usine As String 

'ouvre userform Facturation 
Facturation.Show 

User = Application.UserName 
Chemin = "C:\Users" & User & "\Desktop" 
Usine = ThisWorkbook.Worksheets("DI-MES").Range("AT67").Value 

'Ouvre un modele de document World 
On Error Resume Next 
Set ObjWord = CreateObject("Word.Application") 
ObjWord.Visible = True 
Set LeDocWord = ObjWord.Documents.Open("C:\users" & User & "\Documents\ModeleSFF\BT_facture.dotx") 

'lier des adresses de cellule aux signets 
Adresse_compta = [AW8] 
Adresse_DTS = [AT74] 
Atelier = [F57] 

'Ecrit les cellules excel dans les signets World 
With LeDocWord 
.Bookmarks("Adresse_compta").Range.Text = Adresse_compta 
.Bookmarks("Adresse_DTS").Range.Text = Adresse_DTS 
.Bookmarks("Atelier").Range.Text = Atelier 

End With 

LeDocWord.SaveAs Filename:="C:\Users" & User & "\Desktop\BT Facture n° " & NFacture & " " & Atelier & ".doc" 
MsgBox ("Votre fichier a été enregistré sur le bureau sous le nom : BT Facture n° " & NFacture & " " & Atelier & ".doc") 

ObjWord.Quit 

Set ObjWord = Nothing 

End Sub 

_____________________________________ 

J'ai créé une userform "Facturation" avec 3 textbox 
code : 

Private Sub CommandButton9_Click() 
'Bouton annulé doit arrêter l'exécution de la macro source ? 
Unload Me 
Exit Sub 
End Sub 
_________________________________________ 
Private Sub UserForm_Initialize() 
'A l'ouverture de l'userform ecrit des valeurs dans les textbox 

TextBox1.Value = Sheets("GestionDTS").Range("C4").Value 
TextBox2.Value = Sheets("GestionDTS").Range("C6").Value 
TextBox3.Value = Format(TextBox1.Value, "dd/mm/yyyy") 
TextBox3.Value = Sheets("GestionDTS").Range("F4").Value 

End Sub 
___________________________________________ 

Private Sub CommandButton8_Click() 
'Bouton OK valide l'userform 
Dim Nfact As String 
Dim fact As String 
Dim dates As String 

Nfact = TextBox1.Value 
fact = TextBox2.Value 
dates = TextBox3.Value 
Sheets("GestionDTS").Range("C4").Value = Nfact 
Sheets("GestionDTS").Range("C6").Value = fact 
Sheets("GestionDTS").Range("F4").Value = dates 

Unload Me 
End Sub 


Et on va voir surement plus net

Cordialement


CF2i - Guadeloupe
Ingénierie Informatique

Dire « Merci » 3

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

Codes Sources 95 internautes nous ont dit merci ce mois-ci

Commenter la réponse de Utilisateur anonyme
0
Merci
Bonjour,
Difficile à analyse sans voir le code...


Cordialement


CF2i - Guadeloupe
Ingénierie Informatique
Commenter la réponse de Utilisateur anonyme
Messages postés
18039
Date d'inscription
lundi 7 décembre 2009
Statut
Contributeur
Dernière intervention
11 avril 2018
0
Merci
Bonjour,
Te rends-tu compte de ce que ton titre pourrait concerner n'importe quoi ?
Il aurait dû être : "comment interrompre une macro en cours"
(le soin apporté à la rédaction du titre est la garantie de recenser une difficulté et son éventuelle solution !)
Je rejoins par ailleurs ce qu'en a dit acive : impossible de répondre utilement sans connaître le code de ta "macro situé dans un module"

________________________
Réponse exacte ? => "REPONSE ACCEPTEE" facilitera les recherches.
Pas d'aide en ligne installée ? => ne comptez pas sur moi pour simplement répéter son contenu. Je n'interviendrai que si nécessité de la compléter.
Commenter la réponse de ucfoutu
Messages postés
18039
Date d'inscription
lundi 7 décembre 2009
Statut
Contributeur
Dernière intervention
11 avril 2018
0
Merci
Bon...
Je n'aime pas trop les imprécisions dans les questions. Elles font que l'on ne peut répondre de la meilleure manière !
A défaut, regarde ce que ferait ceci
code de ton bouton sur userform1
Private Sub CommandButton1_Click()
 toto
End Sub


code dans un module
Public Sub toto()
  Do While UserForm1.Visible = True
    UserForm1.Caption = Val(UserForm1.Caption) + 1
    DoEvents
  Loop
  MsgBox "fini"
End Sub

C'est juste pour te donner des idées, hein ...
Et après, à toi de te servir de cette idée très "générale", car je refuserai personnellement d'avoir à revenir sur ce sujet, à partir de ton code enfin montré, par ta seule faute.


________________________
Réponse exacte ? => "REPONSE ACCEPTEE" facilitera les recherches.
Pas d'aide en ligne installée ? => ne comptez pas sur moi pour simplement répéter son contenu. Je n'interviendrai que si nécessité de la compléter.
Commenter la réponse de ucfoutu
0
Merci
Bonjour UcFoutu,

Alors la... tu as été plus rapide que moi !!!
Et on est presque dans la même logique:

Dans la Macro:
Public Arret As Boolean

Sub macro()
   Range("A1").Value = "MACRO EN COURS"
   Do
     DoEvents
     'bla bla bla
   Loop Until Arret = True
   Range("A1").Value = "MACRO ARRETEE"
End Sub


Puis dans le UserForm:
Private Sub UserForm_Terminate()
Arret = True
End Sub


Mais bon, le demandeur nous laisse ici tous seuls, plantés avec notre boule de cristal...

Comme dit Jack: Pour les miracles il faut prévoir un délai.


Cordialement


CF2i - Guadeloupe
Ingénierie Informatique
Commenter la réponse de Utilisateur anonyme
0
Merci
Bonjour et avec mes excuses pour ces imprésissions ....

Dans le module 1, j'ai une macro

Sub courrierBTF()
'
Dim ObjWord As Word.Application
Dim LeDocWord As Word.Document
Dim NFacture As String
Dim User As String
Dim Chemin As String
Dim Usine As String

'ouvre userform Facturation
Facturation.Show

User = Application.UserName
Chemin = "C:\Users" & User & "\Desktop"
Usine = ThisWorkbook.Worksheets("DI-MES").Range("AT67").Value

'Ouvre un modele de document World
On Error Resume Next
Set ObjWord = CreateObject("Word.Application")
ObjWord.Visible = True
Set LeDocWord = ObjWord.Documents.Open("C:\users" & User & "\Documents\ModeleSFF\BT_facture.dotx")

'lier des adresses de cellule aux signets
Adresse_compta = [AW8]
Adresse_DTS = [AT74]
Atelier = [F57]

'Ecrit les cellules excel dans les signets World
With LeDocWord
.Bookmarks("Adresse_compta").Range.Text = Adresse_compta
.Bookmarks("Adresse_DTS").Range.Text = Adresse_DTS
.Bookmarks("Atelier").Range.Text = Atelier

End With

LeDocWord.SaveAs Filename:="C:\Users" & User & "\Desktop\BT Facture n° " & NFacture & " " & Atelier & ".doc"
MsgBox ("Votre fichier a été enregistré sur le bureau sous le nom : BT Facture n° " & NFacture & " " & Atelier & ".doc")

ObjWord.Quit

Set ObjWord = Nothing

End Sub

_____________________________________

J'ai créé une userform "Facturation" avec 3 textbox
code :

Private Sub CommandButton9_Click()
'Bouton annulé doit arrêter l'exécution de la macro source ?
Unload Me
Exit Sub
End Sub
_________________________________________
Private Sub UserForm_Initialize()
'A l'ouverture de l'userform ecrit des valeurs dans les textbox

TextBox1.Value = Sheets("GestionDTS").Range("C4").Value
TextBox2.Value = Sheets("GestionDTS").Range("C6").Value
TextBox3.Value = Format(TextBox1.Value, "dd/mm/yyyy")
TextBox3.Value = Sheets("GestionDTS").Range("F4").Value

End Sub
___________________________________________

Private Sub CommandButton8_Click()
'Bouton OK valide l'userform
Dim Nfact As String
Dim fact As String
Dim dates As String

Nfact = TextBox1.Value
fact = TextBox2.Value
dates = TextBox3.Value
Sheets("GestionDTS").Range("C4").Value = Nfact
Sheets("GestionDTS").Range("C6").Value = fact
Sheets("GestionDTS").Range("F4").Value = dates

Unload Me
End Sub
____________________________________

Pour résumé quand je clic sur Bouton annulé de mon userform je ferme mon userform mais je reprend la macro initial "courrierBTF" ou je l'ai laissé ...
J'aimerais dans ce cas quand clic sur annulé de l'userform aller a la fin de l'exécution de la macro initial

Est ce plus clair ? c'est compliqué d'expliquer quelque chose que je m'aitrise mal...
Dans tous les cas merci de votre aide je suis sec !

Sylvain
Commenter la réponse de jondette
0
Merci
Bon, c'est bien ce que je disais dans une autre discussion, ma boule de cristal "déconne", je vais finir par perdre la boule.

sauf le bouton annulé qui arrêt bien l'éxécution de l'userform, mais qui ne permet pas d'arrêter la macro

Je comprends par ceci, que tu souhaites arrêter la macro quand la userform s'arrête.

Maintenant je comprends par ceci:
J'aimerais dans ce cas quand clic sur annulé de l'userform aller a la fin de l'exécution de la macro

Que la macro doit être executée jusqu'à la fin.

Encore une chose que j'ai du mal à comprendre:
Private Sub CommandButton9_Click() 
'Bouton annulé doit arrêter l'exécution de la macro source ? 
Unload Me 
Exit Sub 'A quoi il sert LUI ????
End Sub 

Cordialement


CF2i - Guadeloupe
Ingénierie Informatique
Commenter la réponse de Utilisateur anonyme
0
Merci
En gros quand je clic sur annulé de ma Userform je souhaite arrêter la macro pricipal

Pour le Exit Sub il ne sert effectivement a rien c'était un essai que j'ai oublié d'enlever ...
Commenter la réponse de jondette
0
Merci
Si tu ajoutes quelques lignes dans ta sub courrierBTF comme ça:
Sub courrierBTF()
'
Dim ObjWord As Word.Application
Dim LeDocWord As Word.Document
Dim NFacture As String
Dim User As String
Dim Chemin As String
Dim Usine As String

'ouvre userform Facturation
Facturation.Show

User = Application.UserName
Chemin = "C:\Users" & User & "\Desktop"

Usine = ThisWorkbook.Worksheets("DI-MES").Range("AT67").Value

If Facturation.Visible = False Then Exit Sub
'Ouvre un modele de document World
On Error Resume Next
Set ObjWord = CreateObject("Word.Application")
ObjWord.Visible = True
Set LeDocWord = ObjWord.Documents.Open("C:\users" & User & "\Documents\ModeleSFF\BT_facture.dotx")


'lier des adresses de cellule aux signets
Adresse_compta = [AW8]
Adresse_DTS = [AT74]
Atelier = [F57]

If Facturation.Visible = False Then Exit Sub
'Ecrit les cellules excel dans les signets World
With LeDocWord
.Bookmarks("Adresse_compta").Range.Text = Adresse_compta
.Bookmarks("Adresse_DTS").Range.Text = Adresse_DTS
.Bookmarks("Atelier").Range.Text = Atelier

End With

If Facturation.Visible = False Then Exit Sub
LeDocWord.SaveAs Filename:="C:\Users" & User & "\Desktop\BT Facture n° " & NFacture & " " & Atelier & ".doc"

MsgBox ("Votre fichier a été enregistré sur le bureau sous le nom : BT Facture n° " & NFacture & " " & Atelier & ".doc")

ObjWord.Quit

Set ObjWord = Nothing

End Sub


Ça donne quoi?
Parce que de la manière dont il est disposé ton code je ne vois pas comment faire
Mis à part de restructurer toute ton application.

Cordialement


CF2i - Guadeloupe
Ingénierie Informatique
Commenter la réponse de Utilisateur anonyme
0
Merci
En insérant :
If Facturation.Visible = False Then Exit Sub

Cela arrête bien exécution de la macro avec le bouton annulé et la croix en au à droite de l'userform.

Par contre pour le bouton OK cela l'arrête aussi ...
C'est commande Unload Me qui ferme l'userform
Et qui permet de continuer ou pas l'execution de la fin de la macro initial ...

Peut être une autre commande SI qui prendrait en compte le bouton et non l'état de l'userform ?

Sinon la réorganisation de mon code consisterais en quoi ?
Commenter la réponse de jondette
0
Merci
Ben bêtement j'ai déplacé la fin de mon code de la macro initial dans l'userform et ca marche ....

merci pour ton aide !
J'ai une autre question mais je pense que je vais faire un nouveau poste pour ne pas me faire engueuler ...
Commenter la réponse de jondette
Messages postés
18039
Date d'inscription
lundi 7 décembre 2009
Statut
Contributeur
Dernière intervention
11 avril 2018
-2
Merci
Dommage pour toi, jondette (relis-moi donc)
Arrange-toi, la prochaine fois, pour ne pas en arriver là. Une discussion n'est pas un chat. On y vient et on expose tout d'emblée.
J'espère que ce message sera lu par le plus grand nombre possible de visiteurs... (on va peut-être y arriver un jour ...)


________________________
Réponse exacte ? => "REPONSE ACCEPTEE" facilitera les recherches.
Pas d'aide en ligne installée ? => ne comptez pas sur moi pour simplement répéter son contenu. Je n'interviendrai que si nécessité de la compléter.
Commenter la réponse de ucfoutu

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.