Impossible modifier cellules dans Excel lorsqu'un userform non modal est ouvert [Résolu]

zerpudjul 5 Messages postés mardi 6 mars 2012Date d'inscription 6 mars 2012 Dernière intervention - 6 mars 2012 à 17:21 - Dernière réponse : zerpudjul 5 Messages postés mardi 6 mars 2012Date d'inscription 6 mars 2012 Dernière intervention
- 6 mars 2012 à 21:42
Bonjour,

Je souhaiterai que l'utilisateur puisse modifier des cellules avant de continuer ma macro.
Par conséquent j'ai créé un userform non modal "userform2.show 0" et j'ai mis le code suivant dans ma macro principale afin que le code continue tant que le userform2 n'est pas fermé par l'utilisateur

While UserForm2.Visible = True
DoEvents
Wend

Le code fonctionne correctement. Cependant, quand mon userform2 s'affiche je peux faire des copier/coller (sans les touches raccourcis), je peux supprimer des lettres dans des cellules mais je ne peux pas écrire dans n'importe quelle cellule. Je ne comprends pas pourquoi.
Que peut-on faire pendant qu'un user form non modal est affichée?

Merci d'avance
Afficher la suite 

Votre réponse

9 réponses

Meilleure réponse
ucfoutu 18039 Messages postés lundi 7 décembre 2009Date d'inscriptionContributeurStatut 11 avril 2018 Dernière intervention - 6 mars 2012 à 18:46
3
Merci
1)
lance une macro avec un raccourci de touches.
===>> OK
La macro va ensuite afficher un premier UserForm
===>> modal ou non ?
Une fois qu'il a sélectionné l'ensemble de ces informations, il clique sur un bouton
. =====>> Et que devient alors le 1et userform ?
Par conséquent pour ne pas que ma macro s'arrête j'ai ouvert un second userform avec une propriété non modale pour que l'utilisateur puisse intéragir avec sa feuille Excel.
===>> commence et/ou continue l'usine à gaz

Méthode (en aveugle, puisque je ne sais rien d'autre) :
1) OK ===>> userform1 non modal ===>> il y fait ses choix ===>> sur le même userform un bouton "GO"
2) ta macro du 1 ne devrait rien faire d'autre
3) tu affectes au bouton "GO" du userform1 les instructions (une deuxième macro) à exécuter

Et pas de userform2 complètement inutile

____________________
Réponse exacte ? => "REPONSE ACCEPTEE" pour faciliter les recherches d'autres forumeurs.
Pas d'aide en ligne installée ? ==> ne comptez pas sur moi pour simplement vous dire ce qu'elle contient

Merci ucfoutu 3

Avec quelques mots c'est encore mieux Ajouter un commentaire

Codes Sources a aidé 93 internautes ce mois-ci

Commenter la réponse de ucfoutu
ucfoutu 18039 Messages postés lundi 7 décembre 2009Date d'inscriptionContributeurStatut 11 avril 2018 Dernière intervention - 6 mars 2012 à 17:25
0
Merci
Bonjour,

Si tu veux de l'aide, il va falloir être précis !
1) où as-tu mis le bout de code montré ?
2) "dans une macro", dis-tu, mais lancée par quoi ?
3) je ne comprends pas l'intérêt du bout de code montré. Quelle en est la finalité ?


____________________
Réponse exacte ? => "REPONSE ACCEPTEE" pour faciliter les recherches d'autres forumeurs.
Pas d'aide en ligne installée ? ==> ne comptez pas sur moi pour simplement vous dire ce qu'elle contient
Commenter la réponse de ucfoutu
zerpudjul 5 Messages postés mardi 6 mars 2012Date d'inscription 6 mars 2012 Dernière intervention - 6 mars 2012 à 17:41
0
Merci
Bonjour,

La macro sert à envoyer des mails automatiques.
Cependant, l'utilisateur doit vérifier les informations et doit pouvoir les modifier avant l'envoi (suite de la macro). Afin d'éviter que ma macro s'arrête complètement, je souhaite que l'utilisateur clique sur le userform2 quand il a effectué ses modifications. Ainsi la macro peut reprendre avec les nouvelles informations.

Dans le code d'un premier userform (étape précédente) j'ai ce code
UserForm2.Show 0
While UserForm2.Visible = True
DoEvents
Wend
Il me permet de faire en sorte que ma macro ne s'arrête pas tant que mon userform2 est toujours visible

Dans le code de mon second userform j'ai ceci pour reprendre le cours normale de ma macro (en cliquant sur le bouton) une fois que mes changements dans ma feuille Excel ont été effectués

Private Sub CommandButton1_Click()
Me.Hide
End Sub

Tout cela fonctionne plutôt pas mal. Mon seul problème est que je n'arrive pas à effectuer des modifications sur ma feuille Excel en dehors des copier/coller.

Merci d'avance
Commenter la réponse de zerpudjul
ucfoutu 18039 Messages postés lundi 7 décembre 2009Date d'inscriptionContributeurStatut 11 avril 2018 Dernière intervention - 6 mars 2012 à 18:19
0
Merci
Et quid de la modalité du 1er userform ? Tu n'en parles pas !


____________________
Réponse exacte ? => "REPONSE ACCEPTEE" pour faciliter les recherches d'autres forumeurs.
Pas d'aide en ligne installée ? ==> ne comptez pas sur moi pour simplement vous dire ce qu'elle contient
Commenter la réponse de ucfoutu
zerpudjul 5 Messages postés mardi 6 mars 2012Date d'inscription 6 mars 2012 Dernière intervention - 6 mars 2012 à 18:30
0
Merci
Merci pour ces premières indications.

Pour être plus clair, l'utilisateur sélectionne une ligne d'une feuille Excel avec les coordonnées de clients. Il lance une macro avec un raccourci de touches.
La macro va ensuite afficher un premier UserForm pour demander si l'utilisateur veut envoyer son mail par Gmail/outlook ou par fax et va lui demander de vérifier et formater si besoin quelques champs (email, nom) et de sélectionner quel formulaire il souhaite envoyer (un formulaire par feuille).

Une fois qu'il a sélectionné l'ensemble de ces informations, il clique sur un bouton. La macro se poursuit donc en activant la worksheet correspondant au formulaire sélectionnée. Ici l'utilisateur peut remodifier des informations suivant le client avant d'envoyer (impossible d'automatiser cette étape car trop de mofications manuelles à apporter). Par conséquent pour ne pas que ma macro s'arrête j'ai ouvert un second userform avec une propriété non modale pour que l'utilisateur puisse intéragir avec sa feuille Excel. Ici arrive mon problème : il ne peut pas tout modifier et je ne sais pas pourquoi.
Une fois qu'il a modifié, il clique sur un bouton sur le userform2. Celui-ci va alors se fermer et la macro contenu dans le premier userform1 peut continuer.

Merci d'avance pour votre aide.
Commenter la réponse de zerpudjul
zerpudjul 5 Messages postés mardi 6 mars 2012Date d'inscription 6 mars 2012 Dernière intervention - 6 mars 2012 à 20:18
0
Merci
1/ Le premier userform est modal car on attend les choix de l'utilisateur avant de continuer:


Private Sub CommandButton1_Click()
Dim sendto As String
Dim ws_name As String
ws_name = UserForm1.ListBox1.Value 'la feuille sélectionnée
sendto = Trim(UserForm1.TextBox2.Value) 'email de réception
UserForm1.Hide 'on cache le premier userform
ActiveWorkbook.Worksheets(ws_name).Activate 'on active le template sélectionné par l'utilisateur
If sendto = "" Then
MsgBox ("the email address is empty. We cannot send the email")
End
End If
Unload UserForm1 'on le vide
UserForm2.Show 0 'on affiche le nouveau userform modal pour permettre à l'utilisateur de faire des modifications sur le template
While UserForm2.Visible = True 'tant que l'utilisateur n'a pas fini (pas cliquer sur un bouton de l'userform2 pour le cacher), la macro reste dans le while
DoEvents
Wend
'une fois le userform2 cachée, la macro sort du while et continue
Call FillandEmail(ws_name, "Yahoo", sendto) 'Fonction qui permet d'envoyer la feuille ws_name à l'utilisateur sendto avec la messagerie Yahoo
End Sub

3/ Je suis obligé d'avoir un 2eme userForm. Car le premier permet de sélectionner le template. Le deuxième permet de modifier des données dans le template

Je sais que modifier un template n'est pas terrible à la base mais c'est la demande que l'on m'a faite.
Je comprends que cela devient une usine à gaz mais ma seule question est pourquoi je n'arrive pas à changer toutes les cellules manuellement lorsque l'userform2 est ouvert.

Merci
Commenter la réponse de zerpudjul
ucfoutu 18039 Messages postés lundi 7 décembre 2009Date d'inscriptionContributeurStatut 11 avril 2018 Dernière intervention - 6 mars 2012 à 20:37
0
Merci
1) Je te répète que c'est là une méthode usine à gaz et t'ai parlé d'une autre méthode moins tortueuse
2)
UserForm2.Show 0 'on affiche le nouveau userform modal

contredit ce que tu as dit plus haut !

3)
ma seule question est pourquoi je n'arrive pas à changer toutes les cellules manuellement lorsque l'userform2 est ouvert.

N'en sais rien ! tu es seul à savoir ce qui est protégé, ce qui est verrouillé, etc ... à CE moment-là

Je te laisse là.
____________________
Réponse exacte ? => "REPONSE ACCEPTEE" pour faciliter les recherches d'autres forumeurs.
Pas d'aide en ligne installée ? ==> ne comptez pas sur moi pour simplement vous dire ce qu'elle contient
Commenter la réponse de ucfoutu
zerpudjul 5 Messages postés mardi 6 mars 2012Date d'inscription 6 mars 2012 Dernière intervention - 6 mars 2012 à 21:42
0
Merci
Merci

J'ai suivi tes conseils.
Même si j'ai gardé le 2eme user form l'appel vers ce userform ne se fait plus à partir du userform1 mais à partir de ma macro principale (dans mon module).
Cela semble désormais marcher.
Il y avait peut etre un problème d'incompatibilité.

Merci
Commenter la réponse de zerpudjul
ucfoutu 18039 Messages postés lundi 7 décembre 2009Date d'inscriptionContributeurStatut 11 avril 2018 Dernière intervention - 6 mars 2012 à 18:09
-1
Merci
ta boucle de DoEvents est lourde, maladroite et ne sert à rien. A remplacer par l'utilisation d'une valeur booléenne (à true quand l'utilisateur a décidé que c'était OK, à false en fermant le userform). Ou encore plus simple : lancer ta macro depuis le bouton OK.

Dans l'ignorance totale de ce que fait ta macro (et même comment elle est appelée, puisque tu as laissé cette question sans réponse), je ne peux te guider plus !

____________________
Réponse exacte ? => "REPONSE ACCEPTEE" pour faciliter les recherches d'autres forumeurs.
Pas d'aide en ligne installée ? ==> ne comptez pas sur moi pour simplement vous dire ce qu'elle contient
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.