XL 2013 Sélection entre deux MsgBox...

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 !

StéphaneDeLà

XLDnaute Nouveau
Bonjour,
Je n'ai pas trouvé ma réponse, je tente ici.


J'ai ce code :

If Selection.Count = 1 Then
MsgBox ("Veuillez sélectionner une plage de cellules à exporter.")
t = Timer()
' boucle qui dure 5 secondes
Do While t + 5> Timer()
DoEvents
Loop
' fermeture fenêtre
BOITE.Hide

Set Zone = Selection
ActiveSheet.PageSetup.PrintArea = Zone
End If

MsgBox ("Cet enregistrement remplacera tout autre fichier déjà créé pour la même date de planning"), vbOKOnly + i = vbInformation, "ATTENTION !"

Le truc qui m'ennuie, c'est la boucle, et je Deboge sur la ligne BOITE.Hide

Le but est d'être certain que la 1ère MsgBox n'apparaisse que si on n'a pas effectué de sélection (sinon la procédure se poursuit...), qu'après avoir cliqué sur "OK" elle laisse la sélection être faite par l'utilisateur, et que la 2ème n'apparaisse qu'après avoir validé la 1ère MsgBox et effectué une sélection (ce qui serait tout aussi bien).

Il s'agit d'un tableau évolutif dans lequel on ne voudra imprimer (en PDF) qu'une partie à chaque fois.

Possible, selon vous ?

Vous remerciant par avance...
 
Dernière édition:
Solution
Jette un coup d'œil sur ce fichier .
Tu peux l'adapter selon ton besion
Merci Rheeem !!
Ca fonctionne, et le résultat est exactement comme je le voulais !! Plus qu'à adapter mes MsgBox d'avertissement, mais au moins la sélection est prise en compte avec l'UserForm.
Désolé pour ma façon de faire qui vous a fait galérer, je n'ai pas l'habitude, je ferai mieux pour mon prochain (et peut-être dernier) post 😉
Merci à tous pour vos réponses, et à Rheeem pour la solution clé en main !! 💪💪💪
C'est quand meme incroyable de pas etre capable de remplacer
ActiveSheet.PageSetup.PrintArea = Zone
par
ActiveSheet.PageSetup.PrintArea = Zone.address
😂 Ah ben voilà, là je sais ce que je dois faire !

Alors avec :
If Selection.Count = 1 Then
MsgBox ("Veuillez sélectionner une plage de cellules à exporter.")
t = Timer()
' boucle qui dure 5 secondes
Do While t + 5 > Timer()
DoEvents
Loop
' fermeture fenêtre
BOITE.Hide

Set Zone = Selection
ActiveSheet.PageSetup.PrintArea = Zone.Address
End If

Quand je valide la 1ère MsgBox tout va bien, mais ensuite j'en ai une autre qui dit :

If MsgBox("Cet enregistrement remplacera tout autre fichier déjà créé pour la même date de planning" & Chr(10) & Chr(13) _
& Chr(10) & Chr(13) & Chr(10) & Chr(13) _
& "Es-tu certain(e) de vouloir continuer ?", _
vbYesNo + vbExclamation, "ATTENTION !") = vbYes Then

ETC.

Et là, si je mets "NON", il Deboge
BOITE.Hide
Ca m'est même arrivé juste en faisant ma sélection.

De plus, si je relance une fois la zone sélectionnée, il m'imprime quand même toute la page... 🙃
On avance, on avance !...

Merci vGendron !
 
Dernière édition:
Bon, je crois que c'est ma dernière intervention ici

1) il faut que tu comprennes que "Msgbox", c'est juste pour afficher un message... ca ne demande strictement rien à l'utilisateur, juste cliquer OK sur la boite
2) si tu veux que l'utilisateur selectionne une zone, il faut afficher une INPUTBox ==> laquelle affiche un message (veuillez selectionner une plage) ET donne la main à l'utilisateur pour selectionner une plage avant de cliquer sur OK
malgré cette inputbox, l'utilisateur peut toujour cliquer sur OK SANS selectionner quoique ce soit d"ou ma propostion avec la boucle While Wend

pour imprimer la commande c'est
sheets(NomFeuille).pageSetup.printarea=zone.address
avec sheets(NomFeuille) = activesheet dans ton cas
zone = la selection faite par l'utlisateur (set zone=application.inputbox....)

maintenant.. si tu as encore des pbs: déjà.. il faut poster un fichier exemple au lieu de nous mettre des bouts de code (qui changent à chaque post)
 
Bon, je crois que c'est ma dernière intervention ici

1) il faut que tu comprennes que "Msgbox", c'est juste pour afficher un message... ca ne demande strictement rien à l'utilisateur, juste cliquer OK sur la boite
2) si tu veux que l'utilisateur selectionne une zone, il faut afficher une INPUTBox ==> laquelle affiche un message (veuillez selectionner une plage) ET donne la main à l'utilisateur pour selectionner une plage avant de cliquer sur OK
malgré cette inputbox, l'utilisateur peut toujour cliquer sur OK SANS selectionner quoique ce soit d"ou ma propostion avec la boucle While Wend

pour imprimer la commande c'est
sheets(NomFeuille).pageSetup.printarea=zone.address
avec sheets(NomFeuille) = activesheet dans ton cas
zone = la selection faite par l'utlisateur (set zone=application.inputbox....)

maintenant.. si tu as encore des pbs: déjà.. il faut poster un fichier exemple au lieu de nous mettre des bouts de code (qui changent à chaque post)
Ok, merci pour tes réponses...

Ca change à chaque post parce que je bosse dessus non-stop, j'avance...
Pour l'inputBox, quand on renseigne le champ la sélection n'en est pas une, juste une mise en surbrillance.

Je pensais pouvoir afficher des MsgBox avec conditions, la démarche étant :
- s'il n'a pas sélectionné de plage, on lui rappelle qu'il doit le faire,
- s'il l'a fait (après ou avant ce rappel), on prévient que ça va écraser son précédent fichier et on imprime si OUI, on abandonne si NON.

Désolé de ne pas avoir été clair.
 
Dernière édition:
Bonjour à tous

@StéphaneDeLà

Si tu avais fourni un fichier avec les explications CLAIRES de ce que tu veux faire en français (la traduction en VBA est pour nous) nous aurions gagné 19 messages !!!

Après c'est toi qui voit :

1) ==> Un fichier et des explications et dans 1 ou 2 messages ta demandes est satisfaite
Exemple : Si choix XXX je veux faire cela et si choix YYY je veux faire comme ZZZ etc ....

OU BIEN
2) ==> Pas de fichier et des explications confuses et changeantes et les personnes qui t'aident vont partir les unes après les autres et tu resteras avec ton problème sur les bras

Bonne lecture
 
Dernière édition:
Bonjour à tous

@StéphaneDeLà

Si tu avais fourni un fichier avec les explications CLAIRES de ce que tu veux faire en français (la traduction en VBA est pour nous) nous aurions gagné 19 messages !!!

Après c'est toi qui voit :

1) ==> Un fichier et des explications et dans 1 ou 2 messages ta demandes est satisfaite
Exemple : Si choix XXX je veux faire cela et si choix YYY je veux faire comme ZZZ etc ....

OU BIEN
2) ==> Pas de fichier et des explications confuses et changeantes et les personnes qui t'aident vont partir les unes après les autres et tu resteras avec ton problème sur les bras

Bonne lecture
J'avais bien compris.
 
Jette un coup d'œil sur ce fichier .
Tu peux l'adapter selon ton besion
Merci Rheeem !!
Ca fonctionne, et le résultat est exactement comme je le voulais !! Plus qu'à adapter mes MsgBox d'avertissement, mais au moins la sélection est prise en compte avec l'UserForm.
Désolé pour ma façon de faire qui vous a fait galérer, je n'ai pas l'habitude, je ferai mieux pour mon prochain (et peut-être dernier) post 😉
Merci à tous pour vos réponses, et à Rheeem pour la solution clé en main !! 💪💪💪
 
Dernière édition:
Bonsoir
juste en passant
pourquoi créer un input dialog avec un userform alors que ce dialog existe ?
VB:
Sub testx()
    Dim R As String
     R = Application.InputBox("Sélectionnez une région valide", "selection de cellule", , , , , , 8)
    If R = "Faux" Then
        MsgBox "Vous avez annulé"
    Else
        MsgBox "Vous avez sélectionné la plage :" & R
    End If
End Sub
 
Bonjour les Rangers,
pourquoi créer un input dialog avec un userform alors que ce dialog existe ?
J'allais le dire...
Cependant le code serait plutôt un truc comme ça non ?
VB:
Sub a()
    Dim R As Range
   
    On Error Resume Next
    Set R = Application.InputBox("Sélectionnez une région valide", "Selection de plage", Type:=8)
    If Err Then Set R = Nothing
    On Error GoTo 0
   
    If R Is Nothing Then
        MsgBox "Vous avez annulé"
    Else
        MsgBox "Vous avez sélectionné la plage :" & R.Address(0, 0)
    End If
End Sub
 
Dernière édition:
Ou alors avec cette ressource, mais là c'est du lourd !
VB:
Sub b()
    Dim Retour As Variant
    
    Retour = InputBoxPerso.Display("Sélectionnez une région valide", "Selection de plage", SelectionTakeAddress:=True)
    
    If VarType(Retour) = vbString Then
        MsgBox "Vous avez sélectionné la plage :" & Retour
    Else
        MsgBox "Vous avez annulé"
    End If
End Sub
 

Pièces jointes

Dernière édition:
- 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
13
Affichages
17 K
Michel C
M
Retour