Bonjour à tous.
J'ai codé une grosse macro qui "subit" des ajouts de bouts de code au fur et à mesure que je rencontre des problèmes.
Aujourd'hui, je me suis dit qu'il serait préférable, avant de lancer les instructions de traitement d'un fichier, de contrôler si l'utilisateur n'a pas déjà un classeur d'ouvert.
Je vais donc tester si le classeur ouvert et actif est valide pour que ma macro puisse s'exécuter.
Évidemment, si l'opérateur a ouvert excel et qu'il y a un classeur vierge d'ouvert avec les 3 feuilles vierges que l'on connait bien ("Feuil1", "Feuil2" et "Feuil3"), ma macro va forcément planter (car elle dépend du contenu du fichier).
Je me suis donc dit que j'allais faire une boucle sur le nombre de feuilles présentes dans le classeur ouvert actif (tant pis s'il y a plusieurs classeurs d'ouverts) et contrôler le nom de chaque feuille afin de voir s'il y en a une dont le nom correspondrait à un nom requis (exemple: "Suivi actif").
Je ne parviens pas à traduire cela en algorithme et en boucles.
J'ai toujours eu l'habitude d'utiliser For Next et il n'y a que peu, que je me suis mis (je me suis obligé) à utiliser Do loop et peut-être les autres.
Pour de vrai, je n'utilise (en alternative à for next) que Do While loop.
Je ne sais pas traduire par une boucle tant que le nom de la feuille (n) n'est pas = à "Suivi actif", je continue de scanner les autres feuilles mais si RIEN n'est trouvé alors je sors de ma SUB.
La contrainte dans tout cela, c'est que je ne veux pas mettre un if et un else en début de procédure et un END IF tout en bas de ma précédure: j'ai peur de galérer en cas de dépannage à retrouver le IF correspondant au END IF.
L'idéal serait de récupérer le nom de toutes les feuilles et SEULEMENT à la fin de tester si au moins l'une d'entre elles a le nom requis pour continuer l'exécution de la macro sinon, EXIT SUB.
Mais je n'y arrive pas.
Si je mets une condition avec un If nom de la Feuille (n) <> "Suivi actif" then Exit Sub, je sors direct de la procédure sans avoir le temps de tester les autres feuilles.
J'aimerais rajouter un petit"bloc" de code qui teste ça mais sans englober toute ma "géante" macro (si, si je suis modeste) dans ce nouveau IF.
Si je trouve encore un autre IF à rajouter pour ajouter un nouveau contrôle, je vais me retrouver avec des milliards de If imbriqués, ce que je ne souhaite pas.
Je passe pas mal de temps sur le tuto e Silkyroad sur la gestion des boucles, mais je ne trouve pas la traduction de ce que je veux faire.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10 'Teste s'il y a plusieurs classeurs d'ouverts au lancement de la macro avec le risque dexécuter la macro sur le mauvais classeur nbClasseurOuverts = Application.Workbooks.Count 'Teste si le classeur actif est valide en faisant un test sur le nom d'une des feuilles du classeur ("Suivi actif") For n = 1 To Application.ActiveWorkbook.Worksheets.Count NomSheetClasseurActif = Application.ActiveWorkbook.Worksheets.Item(i).Name If NomSheetClasseurActif <> "Suivi actif" Then 'Ne convient forcément pas Exit For End If Next
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9 'Teste s'il y a plusieurs classeurs d'ouverts au lancement de la macro avec le risque dexécuter la macro sur le mauvais classeur nbClasseurOuverts = Application.Workbooks.Count'Teste si le classeur actif est valide en faisant un test sur le nom d'une des feuilles du classeur ("Suivi actif") For n = 1 To Application.ActiveWorkbook.Worksheets.Count NomSheetClasseurActif = Application.ActiveWorkbook.Worksheets.Item(i).Name Do While NomSheetClasseurActif <> "Suivi actif" Then 'Ne convient forcément pas Exit For Loop NextSi vous avez quelques lumières à jeter sur me zones d'ombre...
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9 'Teste s'il y a plusieurs classeurs d'ouverts au lancement de la macro avec le risque dexécuter la macro sur le mauvais classeur nbClasseurOuverts = Application.Workbooks.Count'Teste si le classeur actif est valide en faisant un test sur le nom d'une des feuilles du classeur ("Suivi actif") Pour toutes les feuilles contenues dans le classeur actif If aucun des noms de toute les feuilles du classeur ne correspond à "Suivi actif" alors Msgbox "Le classeur actif n'est pas valide. Ouvrez ou activez un fichier valide." 'si le nb de classeurs ouverts est > 1 Exit Sub End If Ma macro qui poursuit le traitement
Merci d'avance.
Partager