VBA Excel userform bouton

Résolu
jondette - 21 avril 2013 à 15:53
 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

12 réponses

Utilisateur anonyme
21 avril 2013 à 18:41
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
3
Utilisateur anonyme
21 avril 2013 à 16:26
Bonjour,
Difficile à analyse sans voir le code...


Cordialement


CF2i - Guadeloupe
Ingénierie Informatique
0
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 211
21 avril 2013 à 16:49
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.
0
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 211
21 avril 2013 à 17:11
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.
0

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

Posez votre question
Utilisateur anonyme
21 avril 2013 à 17:32
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
0
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
0
Utilisateur anonyme
21 avril 2013 à 18:20
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
0
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 ...
0
Utilisateur anonyme
21 avril 2013 à 18:55
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
0
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 ?
0
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 ...
0
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 211
21 avril 2013 à 18:09
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.
-2
Rejoignez-nous