raccourci macro fonctionne une fois sur deux

aredo

XLDnaute Occasionnel
bonjour,

J'ai un code protégé avec une vingtaine de feuilles. Dès que le fichier s'ouvre, quand je lance la macro "affiche" via un raccourci, elle ne s'exécute qu'une fois sur deux. Elle fonctionne parfaitement en la déclenchant manuellement. Peut-être que mon code n'est pas assez précis. Je vous serez gré d'y jeter un oeil.
merci à vous
 

Pièces jointes

  • Classeur1.xlsx
    9.9 KB · Affichages: 22

cp4

XLDnaute Barbatruc
VB:
Sub afficher()
Worksheets("Affichage").Activate 'elle est non visible donc ne s'active pas
Dim i As Integer
i = 1
While Range("B" & i).Value <> "" 'quelle feuille?
Sheets(Range("B" & i).Text).Visible = True
i = i + 1
Wend
Sheets("toto").Activate 'elle est déjà active
End Sub
Je n'ai pas compris ta démarche. à l'ouverture du fichier il n'y a que la feuille toto qui est visible. Dans la macro ci-dessous, la 1ère ligne tu actives la feuille Affichage alors qu'elle est non visible, et surtout pourquoi faire?

Ensuite tu fais une boucle pour parcourir quelle feuille? ce n'est pas précisé dans le code. Il va donc parcourir les cellules de la feuille active qui est toto. Ce qui va rendre visible les feuilles dont le nom est en colonne B.

Sur la feuille Affichage, tu as mis des noms de feuilles aussi en colonne B (note2 à note6 et affichage), ces dernières ne seront pas visibles avec ton code.

Maintenant, dis-nous d'où tu pars et quel résultat tu veux obtenir?

@+
 

aredo

XLDnaute Occasionnel
En fait, c'est un fichier en réseau. La feuille "toto" est toujours active, ensuite je sélectionne en "A" une référence qui m'ouvre la feuille correspondante afin d'y rentrer des données. Hormis ces sélections de feuilles, je ne veux pas que les opérateurs puissent avoir accès aux autres feuilles (inscrites dans "affichage"). je suis donc le seul à connaître le déclenchement de cette macro "affichage" . Il y a peut-être des doublons ou des caractères inutiles.
 

cp4

XLDnaute Barbatruc
Ta macro ouvrait toutes les feuilles répertoriées sur la feuille "toto", la 1ère ligne et la dernière sont inutiles.
VB:
Sub afficher()
Dim i As Integer 'si nombre feuille <256 mettre byte au lieu de integer
i = 1
While Sheets("toto").Range("A" & i).Value <> ""
Sheets(Range("A" & i).Text).Visible = True
i = i + 1
Wend
End Sub
 

aredo

XLDnaute Occasionnel
En fait, je viens de trouver où ça bloque. J'ai rajouté un code dans les feuilles 8 à 18 et depuis, la macro "affiche" déconne une fois sur deux avec le raccourci. Qu'y a t'il ds ce code qui entraîne cet état ?
merci
 

Pièces jointes

  • MacroMoul.xlsm
    33.7 KB · Affichages: 13

cp4

XLDnaute Barbatruc
Bonsoir Aredo,

Il me semble que tu ne sais pas vraiment où tu vas. Si tu avais bien exposé ton problème, il aurait été déjà résolu.
Tu as dit que tu déclenchais ta macro via un raccourci sans nous le donner. Tu l'as très mal choisi. En effet, tu fais Ctrl+a qui est un raccourci réservé pour office (sélection d'une plage par exemple).
Tu nous as dit que les autres feuilles (note1, note2......, affichage) sont réservés pour toi (l'administrateur).
Et, là tu as mis sur pratiquement toutes les feuilles une macro qui se déclenche sur un évènement de la feuille.
Depuis le début, tu n'es pas clair.
Rédige ton message à tête reposée en utilisant le blocnote, relis-toi et ensuite édite-le sur le forum.

Bonne soirée.

edit: tu utilises Ctrl+z encore un raccourci réservé.

une récap des raccourcis réservés
 
Dernière édition:

job75

XLDnaute Barbatruc
Bonsoir aredo, cp4,

Le problème est très clair, simplement la macro Afficher ne tenait pas bien la route.

Voyez le fichier joint et la macro corrigée :
Code:
Sub Afficher()
'se lance par Ctrl+a
Dim i As Integer
i = 1
While Sheets("Affichage").Range("B" & i) <> ""
    Sheets(Sheets("Affichage").Range("B" & i).Text).Visible = xlSheetVisible
    i = i + 1
Wend
End Sub
A+
 

Pièces jointes

  • Classeur(1).xlsm
    39.2 KB · Affichages: 18

Discussions similaires

Statistiques des forums

Discussions
312 180
Messages
2 085 995
Membres
103 082
dernier inscrit
adri77