Bogues de VBA

Fermé
ButteDuLac Messages postés 495 Date d'inscription jeudi 5 mars 2009 Statut Membre Dernière intervention 24 octobre 2020 - 5 janv. 2017 à 17:27
ButteDuLac Messages postés 495 Date d'inscription jeudi 5 mars 2009 Statut Membre Dernière intervention 24 octobre 2020 - 17 janv. 2017 à 16:12
Bonjour,

J'essaie un code tout simple du genre « Range("C9").Value = "Tout" », et ça ne veut pas fonctionner. Qu'est-ce que je fais de pas correct?

Voici le code au complet...

Private Sub Worksheet_Activate() ' En activant la feuille.

ActiveWindow.DisplayWorkbookTabs = False
Application.DisplayFormulaBar = False
Application.DisplayStatusBar = False
ActiveWindow.DisplayHeadings = False
Application.CommandBars(1).Enabled = False
Application.DisplayFullScreen = True

DeprotFeuil_ColE_aff
CommandButton5_Click
CommandButton3_Click
Range("C9").Value = "Tout"
Range("B7").Select
ColE_Masq_ProtFeuil

End Sub


Mon but est que, si un utilisateur clique sur un des boutons disponibles dans la feuille, qui sert à filtrer un tableau, le texte dans la cellule C9 changera pour (selon le bouton, la vue actuelle filtrée) et qu'à chaque fois qu'on revient dans la page, par défaut, ce soit écrit « Vue actuelle : Tout » (vue actuelle étant en B9).

J'ai aussi essayé de le mettre dans la Sub CommandButton5_Click, ainsi :

Private Sub CommandButton5_Click()
'
' Sub Filtres_All()
'
' Filtres_All Macro
' Retirer les filtres afin de voir tous les thèmes.
'
DeprotFeuil_ColE_aff
ActiveSheet.ListObjects("Tableau7").Range.AutoFilter Field:=3
ActiveSheet.ListObjects("Tableau8").Range.AutoFilter Field:=2
ActiveSheet.ListObjects("Tableau10").Range.AutoFilter Field:=2

Range("C9").Value = Tout

ColE_Masq_ProtFeuil

End Sub


Pas plus concluant!

Note : actuellement, la cellule C9 est vide. Si je réussis à insérer le mot "Tout", est-ce que, pour la suite, je devrai inscrire un code pour effacer la valeur contenue pour la remplacer par une autre? Ou bien ça va se faire automatiquement?

----------------------------

Ensuite, j'ai une macro à la sortie du classeur, qui ressemble à ça :

Private Sub Workbook_BeforeClose(Cancel As Boolean)

' avant la fermeture
ActiveWindow.DisplayWorkbookTabs = True
Application.DisplayFormulaBar = True
Application.DisplayStatusBar = True
ActiveWindow.DisplayHeadings = True
Application.CommandBars(1).Enabled = True
Application.DisplayFullScreen = False

End Sub


En général, elle fonctionne bien, mais par intermittence, je ne sais pas pourquoi, il arrive que quand j'ouvre Excel pour un autre classeur, la barre de formules n'est plus là, ou encore d'autres composantes, ou même qu'il soit en plein écran. Ce matin, on m'a informée que c'est arrivée à d'autres personnes (il s'agit d'un registre de documents utilisé par plusieurs employés).

Si vous pouvez m'éclairer, ce serait bien apprécié!!! Merci et bonne année!

2 réponses

Utilisateur anonyme
5 janv. 2017 à 17:46
Bonjour ButteDuLac,

Je n'ai pas le temps de voir tout ton message, mais pour moi,
la seule raison pour laquelle ton Range("C9").Value = "Tout"
ne veut pas marcher est que ta cellule C9 est Verrouillée et
ta feuille Excel protégée => modification interdite !

Pourtant, j'ai bien vu ton instruction DeprotFeuil_ColE_aff
mais est-ce que cette sub déprotège la feuille de ta cellule
C9 et pas une autre feuille ? Bien sûr, c'est évident que si
cette sub est vide ou mal écrite, la feuille de ta cellule C9
restera encore protégée (si elle l'était).

Attention : dans le 2ème code, tu as oublié les guillemets :
Range("C9").Value = Tout

Tu peux abréger ton instruction en : [C9] = "Tout"

Cordialement.  :)
0
ButteDuLac Messages postés 495 Date d'inscription jeudi 5 mars 2009 Statut Membre Dernière intervention 24 octobre 2020 40
5 janv. 2017 à 18:52
Bonjour,
Merci, j'ai pensé que vous diriez ça, mais oui, effectivement, la macro DeprotFeuil_ColE_aff déprotège bien la feuille où cette cellule est active.

J'ai modifié mon code, en attendant. J'ai ajouté quatre lignes, pour chaque ligne j'ai inscrit en colonne B « Vue actuelle : » et en colonne C, le texte associé au bouton. Puis, mon bouton masque les lignes non pertinentes et affiche seulement la ligne associée au bouton.

Mais ça aurait été plus simple de pouvoir écrire simplement dans la cellule C9 ce que je voulais!

Dans mon code, les guillemets étaient là quand je l'ai essayée. C'est juste un oubli quand j'ai copié-collé, car j'ai fait des essais sans les guillemets, au cas où (vu que j'avais vu un exemple sans guillemets sur un autre forum, malgré que je trouvais ça louche!

Par contre, je viens d'essayer avec [C9] = "Tout" et ça fonctionne! Mais essai numéro 2 avec Range("C9").Value = "Tout" et niet! Alors on va prendre le [C9] = "Tout"

Merci!!!!!


Reste maintenant la deuxième partie, si quelqu'un trouve...
0
Utilisateur anonyme > ButteDuLac Messages postés 495 Date d'inscription jeudi 5 mars 2009 Statut Membre Dernière intervention 24 octobre 2020
5 janv. 2017 à 19:12
 
Ta sub Workbook_BeforeClose(...) m'a l'air correcte ; aussi, je me dis que
tu ne l'as peut-être pas placée au bon endroit ? Elle ne doit pas être dans
un module tel que Module1, ni dans le code d'une feuille, mais elle doit
être dans ThisWorkbook. Mais si c'est déjà le cas, ce message est inutile,
surtout que tu as indiqué que ça fonctionne bien par intermittence.

À tout hasard : si tu as une autre partie de code où tu as mis :
Application.DisplayAlerts = False, le fait de ne pas le mettre
à True ensuite (après un traitement) => erreurs inattendues.
 
0
ButteDuLac Messages postés 495 Date d'inscription jeudi 5 mars 2009 Statut Membre Dernière intervention 24 octobre 2020 40
Modifié par ButteDuLac le 5/01/2017 à 20:00
Première partie résolue (merci à albkan).

Maintenant, reste ceci :

Ensuite, j'ai une macro à la sortie du classeur, qui ressemble à ça :

Private Sub Workbook_BeforeClose(Cancel As Boolean)

' avant la fermeture
ActiveWindow.DisplayWorkbookTabs = True
Application.DisplayFormulaBar = True
Application.DisplayStatusBar = True
ActiveWindow.DisplayHeadings = True
Application.CommandBars(1).Enabled = True
Application.DisplayFullScreen = False

End Sub



En général, elle fonctionne bien, mais par intermittence, je ne sais pas pourquoi, il arrive que quand j'ouvre Excel pour un autre classeur, la barre de formules n'est plus là, ou encore d'autres composantes, ou même qu'il soit en plein écran. Ce matin, on m'a informée que c'est arrivée à d'autres personnes (il s'agit d'un registre de documents utilisé par plusieurs employés).

Et à l'occasion, la barre de formule s'affiche, même si on est en plein écran...

Si vous pouvez m'éclairer, ce serait bien apprécié!!! Merci et bonne année!
0
 
Je crois que tu n'as pas vu mon message #3, si ? Peux-tu confirmer
que ta macro Workbook_BeforeClose(...) est dans ThisWorkBook ?

Et confirmer que tu n'as pas de Application.DisplayAlerts = False
sans remise à True associée ?
0
ButteDuLac Messages postés 495 Date d'inscription jeudi 5 mars 2009 Statut Membre Dernière intervention 24 octobre 2020 40 > Utilisateur anonyme
9 janv. 2017 à 15:45
Bonjour albkan!

Merci et bonne année!

Malheureusement, oui, mon code est bien dans ThisWorkbook, et je n'ai pas de
Application.DisplayAlerts


Par contre, est-ce que je devrais??? Si oui, ça va où???

Merci!
0
Utilisateur anonyme > ButteDuLac Messages postés 495 Date d'inscription jeudi 5 mars 2009 Statut Membre Dernière intervention 24 octobre 2020
10 janv. 2017 à 20:08
Non, on utilise Application.DisplayAlerts seulement s'il y a une une bonne raison !
Je te conseille vivement de regarder l'aide VBA correspondante et de tout lire !
0
ButteDuLac Messages postés 495 Date d'inscription jeudi 5 mars 2009 Statut Membre Dernière intervention 24 octobre 2020 40 > Utilisateur anonyme
17 janv. 2017 à 16:12
Mais il n'y avait pas le code Display.Alert. Je l'avais ajouté pour faire un test, après votre réponse. Je l'ai retirée, car effectivement, aucunement utile dans mon dossier.

Le problème n'est toujours pas résolu! J'espère que quelqu'un trouvera.

J'ai pensé que ça pouvait être l'ordre dans lequel je présente mes commandes. J'ai testé plusieurs combinaisons, plusieurs ordres différents. Toujours un résultat aléatoire...
0
ButteDuLac Messages postés 495 Date d'inscription jeudi 5 mars 2009 Statut Membre Dernière intervention 24 octobre 2020 40
9 janv. 2017 à 15:51
En fait, voici tout le code dans ThisWorkbook (j'ai ajouté un DisplayAlerts, mais ça ne semble rien changer) :

Private Sub Workbook_Open()
Sheets("Menu").Activate
ActiveSheet.Protect ("***")
ActiveWindow.DisplayWorkbookTabs = False
Application.DisplayFormulaBar = False
Application.DisplayStatusBar = False
ActiveWindow.DisplayHeadings = False
Application.CommandBars(1).Enabled = False
Application.DisplayFullScreen = True
Application.DisplayAlerts = True

End Sub



Private Sub Workbook_BeforeClose(Cancel As Boolean)

' avant la fermeture
ActiveWindow.DisplayWorkbookTabs = True
Application.DisplayFormulaBar = True
Application.DisplayStatusBar = True
ActiveWindow.DisplayHeadings = True
Application.CommandBars(1).Enabled = True
Application.DisplayFullScreen = False

End Sub


Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, _
Cancel As Boolean)
a = MsgBox("Voulez-vous réellement sauvegarder" & Chr(10) & "(Si oui, n'oubliez pas de remettre en lecture seule)", vbYesNo)
If a = vbNo Then Cancel = True

End Sub


Ce que je remarque, c'est qu'à l'ouverture, ça va en plein écran, mais la barre de formules reste affichée, puis, si je navigue et revient au Menu, la barre de formules disparait, mais ça, ce n'est pas si grave. Le plus agaçant, c'est vraiment qu'à la fermeture, lorsqu'on ouvre par la suite un autre classeur, Excel a conservé les paramètres et que la barre de formules n'est plus là, ou encore les entêtes de lignes et colonnes, ou encore la fenêtre est toute petite (réduite).

Je n'y comprends rien!
0