Permettre de parcourir les feuilles pdt affichage InputBox

Bonjour à tous.

Je suis en train d'écrire une grosse macro et je suis un peu bloqué.

Je suis débutant + et j'arrive à faire pas mal de choses, mais au stade où j'en suis, je ne me suis pas penché sur les userforms, qui sembleraient être une bonne solution, dans la mesure où on s'y connaît.

Le peu que j'en ai vu, pour l'heure, me paraît assez compliqué et j'avoue avoir réussi à m'en passer jusqu'à présent.

La macro que je suis en train d'écrire, à un moment de son exécution, demande à l'utilisateur d'identifier et d'entrer le numéro de la feuille qui va être utilisée pour que la macro y fasse tout le traitement.

J'ai affiché une MsgBox pour avertir l'utilisateur qu'il va devoir, dans un instant, parcourir les différentes feuilles du classeur pour "retrouver" celle qui est la bonne.

Puis j'affiche une InputBox dans laquelle je demande à l'utilisateur d'entrer le n° de la feuille qu'il a choisie (j'ai évidemment affiché la correspondance entre les noms "externes" des feuilles et le numéro d'item).

Le problème est que l'InputBox bloque, met en pause excel.

L'utilisateur ne peut pas parcourir les feuilles pour vérifier leur contenu car excel est "bloqué".

J'ai eu beau chercher sur le net en français , en anglais mais je ne trouve pas.

J'ai essayé avec Application.InputBox type 8 qui permet effectivement de sélectionner des cellules pendant l'affichage de l'Input Box, mais ça ne peut pas fonctionner dans mon cas.

J'aimerais bien un fonctionnement à l'instar de la boîte de dialogue de recherche qui permet de manipuler les feuilles, les cellules pendant l'affichage de celle-ci.

Je ne souhaite pas couper l’exécution de la macro puis ajouter un bouton sur lequel l'utilisateur doit appuyer pour reprendre le cours de la macro: je trouve ça lourd et pas super "élégant".

Comme je l'ai dit plus haut, je ne souhaite pas me lancer dans les userForms: trop chronophage et le peu que j'ai créé ne fonctionne mais pas comme je le souhaite.

Bref, si quelqu'un a une solution pour suspendre l’exécution de la macro, laisser à l’utilisateur la possibilité de parcourir les feuilles sans modifier quelque cellule que ce soit (donc aucun événement) pendant l'affichage de l'InputBox qui, lorsque l’utilisateur a saisi le numéro de la feuille et validé, reprend le cours de la macro, ce serait d'la balle...

Merci d'avance pour vos lumières.

Ne voyez pas en moi quelqu'un qui refuse de comprendre les Userforms. Je passe un temps extraordinaire sur internet pour chaque ligne de mes macros avec l'utilisation de méthodes "conventionnelles" relativement simple pour le Gotha du VBA excel, alors pour des userforms... Ce n'est pas jouable pour l'instant (Si le nb de sheets évolue, il faut dimensionner dynamiquement un userform en fonction du nombre de sheets... J'ai voulu m'y pencher en récupérant un code: l'horreur ! Un ping-pong infernal de renvois, de classe créée, chose que je n'ai jamais faite...).

Bonne fin d'après-midi à tous.

Cordialement.

Bonjour Pipout, bonjour le forum,

Une proposition. Pourquoi pas placer ton code dans la macro événementielle Workbook_SheetChange du composant Thisworkbook comme ça par exemple.

Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Range)
Dim O As worksheet 'déclare la variable O

If UCase(ActiveSheet.Range("A1").Value) = "X" Then 'si la cellule A1 (à adapter) de l'onglet actif vaux "X" ou "x"
   Set O = ActiveSheet
'--> ici ton code Macro1 sans le message du début <--
End If 'fin de la condition
End Sub

dans un module standard (Module1 par exemple) ton code initial tu le réduis à :

Sub Macro1()
MsgBox "Veuillez tapez [X] dans la cellule A1 de l'onglet à traiter."
End Sub

L'utilisateur lis le message, sélectionne l'onglet à traiter (que tu pourras identifier après avec juste la lettre O dans le code), tape "x" ou "X" dans la cellule A1 de l'onglet et le reste du code s'exécute. Bien évidemment, tu peux adapter la cellule A1 à tes besoins en modifiant dans le message et dans le code de l'événementielle... j'espère que c'est suffisamment clair...

En premier lieu, merci Thauthème de t'être penché sur mon cas.

Quelle célérité !

J'ai regardé ta solution et je ne suis pas persuadé que cela me convienne.

L'utilisateur n'a pas besoin/ne doit pas modifier quelque cellule que ce soit.

Il doit juste contrôler visuellement le contenu des sheets pour déterminer laquelle sera à traiter par la macro. Il n'y a donc pas d’événements.

Je m'excuse de "balayer" la solution que tu me proposes mais peut-être que je cherche à obtenir le beurre, l'argent du beurre et la crémière !

En tout cas, merci encore.

Bonne soirée.

Bonjour Pipout, bonjour le forum,

Oui tu as raison ma solution n'était pas terrible. D'autant plus que je m'aperçois que l'on peut utiliser le même principe sur le double-clic. Dans le composant ThisWorkbook :

Private Sub Workbook_SheetBeforeDoubleClick(ByVal Sh As Object, ByVal Target As Range, Cancel As Boolean)
Dim O As Worksheet 'déclare la variable O (onglet)

Cancel = True 'évite le mode [Édiftion] lié au double-clic
Set O = ActiveSheet 'définit l'onglet O
'--> ici ton code Macro sans le message du début <--
End Sub

Dans un module standard (Module1 par exemple) :

Sub Macro1()
MsgBox "Veuillez double-cliquer dans n'importe quelle cellule de l'onglet à traiter."
End Sub

L'utilisateur parcours les onglet, quand il atteint l'onglet recherché il double-clique dans n'importe quelle cellule et ton code s'exécute...

Bonjour Thauthème.

Eh mais c'est génial !

C'est une très bonne solution alternative aux userforms !

Je m'empresse de l'intégrer dans mon code et d'en contrôler l'ergonomie.

Merci pour tout !

Il est encore un peu Thau, mais on thème...

Cordialement.

Bonjour ThauThème.

Ta solution était bonne jusqu'à ce que je comprenne qu'il faille insérer le code dans "ThisWorkbook" (je ne savais même pas qu'il y avait des événements possibles pour ThisWorkbook avant que tu en mentionnes l'existence).

Je n'écris du code que dans un personal.xslb.

Quant à ton idée elle est très bonne, mais le fichier excel sur lequel la macro fait un traitement n'est jamais le même.

Ce fichier est un export réalisé mensuellement (ou plus d'ailleurs) à partir d'une base de données.

Je ne peux donc pas utiliser cette solution...

Vu le nombre de réponses à ma question, j'imagine qu'il n'y a pas vraiment d'autres solutions.

Je vais de voir créer un UsrForm...

Encore merci.

Bonne fin d'après-midi.

Rechercher des sujets similaires à "permettre parcourir feuilles pdt affichage inputbox"