J'ai un fichier dont je veux masquer tous les onglets sauf 2. Mon OR ne fonctionne pas, et ça ne fonctionne pas avec un AND...
VB:
Sub masquer()
Dim VFeuille As Worksheet
Vsemaine = DatePart("ww", Date)
VNomS = "S" & Vsemaine & "-2020"
For Each VFeuille In ThisWorkbook.Worksheets
If VFeuille.Name <> VNomS Or VFeuille.Name <> "Statistiques" Then
VFeuille.Visible = xlSheetHidden
End If
Next
End Sub
@ChTi160, non pas de feuille protégée @patricktoulon, oui, en effet, bizarre, mais mon fichier origine est un fichier excel que je récupère dans un mail, avec un Excel Français. D'où viennent donc ces "Sheet" ?
PS : Je récupère un fichier protégé, que je déprotède dans la première ligne de ma macro avec :
BEN d'une version anglaise/ US ou une (webbApp produisant des fichiers excel en téléchargement) et qui a été développée par un web designer outre manche ou ailleurs comme par exemple moi le credit agricole me donne les feuilles "sheet1" etc.. des fois et des fois il me le donne en français
le mieux c'est que tu copie les données sur une feuille que tu ajoute toi même lors de ton importation plutôt que d'importer la feuille
d'ailleurs depuis l'erreur de la fonction nombre en lettre je n'arrive plus a fermer
bref
dans ces conditions il y a beaucoup trop de travail pour faire du bénévolat
Si j'étais moi, je me convaincrai d'écrire la chose ainsi (puis je rappellerai qu'en décembre 2010, il y a belle lurette que calendrier, planning etc sont quelque part dans le cloud, loin d'Excel )
VB:
Sub Afficher_Semaine_en_Cours_et_Masquer_les_Autres()
Dim VFeuille As Worksheet, Vsemaine, VNomS$
Vsemaine = DatePart("ww", Date)
VNomS = "S" & Vsemaine & "-" & Year(Date)
For Each VFeuille In ThisWorkbook.Worksheets
With VFeuille
If .Name <> VNomS And .Name <> "Statistiques" Then
.Visible = xlSheetHidden
End If
End With
Next
End Sub
Arghh...Il s'agit d'une requête Webix sur une Base de Données qui génère un fichier excel que je récupère et mets en forme. Donc c'est peut-être ça le problème...Mais refaire tout le début de ma macro me fait pleurer...Je vais donc y travailler, mais en attendant, je ne cacherai pas mes onglets !
Si j'étais moi, je me convaincrai d'écrire la chose ainsi (puis je rappellerai qu'en décembre 2010, il y a belle lurette que calendrier, planning etc sont quelque part dans le cloud, loin d'Excel )
VB:
Sub Afficher_Semaine_en_Cours_et_Masquer_les_Autres()
Dim VFeuille As Worksheet, Vsemaine, VNomS$
Vsemaine = DatePart("ww", Date)
VNomS = "S" & Vsemaine & "-" & Year(Date)
For Each VFeuille In ThisWorkbook.Worksheets
With VFeuille
If .Name <> VNomS And .Name <> "Statistiques" Then
.Visible = xlSheetHidden
End If
End With
Next
End Sub
A part les déclarations, ce n'est pas rien...
Et j'ai supprimé la ligne avec Trim
Ce qui fait déjà deux différences.
Et chez moi, avec mon fichier de test à moi, sur mon ordinateur à moi, quand je lance ma macro, pas de message d'erreur affiché sur mon écran posé sur mon bureau dans le salon de ma maison, où bruissent les bruits de mon quartier.
tu ne peux pas masquer toutes les feuilles.
Est-ce que ça ne serait pas la dernière visible que tu cherches à masquer ?
Ca date mais je préfère corriger :
si Vfeuille .Name est différent de VNOMS ou VFeuille.name est différent de 'Statistiques
vba interprete avec or la seconde condition comme l'annulation de la première parce que avec "OU" c'est ou l'un ou l'autre mais pas les deux
If VFeuille.Name <> VNomS Or VFeuille.Name <> "Statistiques" Then
traduction
si Vfeuille .Name est différent de VNOMS ou VFeuille.name est différent de 'Statistiques vba interprete avec or la seconde condition comme l'annulation de la première parce que avec "OU" c'est ou l'un ou l'autre mais pas les deux
maintenant avec and
VB:
If VFeuille.Name <> VNomS And VFeuille.Name <> "Statistiques" Then
traduction
vba l'interpretera comme ceci
si Vfeuille .Name est différent de VNOMS et VFeuille.name est aussi différent de 'Statistiques
maintenant voyons les chose en verlan (pour cela on utilisera "=" et non "<>"
VB:
If VFeuille.Name = VNomS Or VFeuille.Name = "Statistiques" Then Vfeuille.visible=true else vFeuille.visible=xlSheetHidden
traduction
si Vfeuille .Name est égal à VNOMS ou VFeuille.name est égal à 'Statistiques alors vfeuille est visible sinon elle est non visible
xor c'est l'un des deux
or c'est l'un ou l'autre
and c'est l'un et l'autre
pour XOR
pour OR
en fait comme je montre dans les modèles tout dépend comment tu les utilise (en interrogation affirmative ou interrogatif )
if A=1 or A=2 then 'si l'un ou l'autre match c'est true (interrogation affirmative)
if A<>1 or A<>2 then 'si l'un ou l'autre match (mais pas les deux)c'est toujours false (interrogatif )
si les deux sont <> alors OR se comportera comme And et donnera true
j'irais même jusqu'a dire que cette formulation OR avec"<>" n'a pas de sens
et c'est pareil avec XOR
tout dépend de la réponse que l'on attend
exemple
VB:
Sub test()
A = 1
b = 2
'test1
MsgBox A <> 2 Or b <> 1
'test2
If A <> 2 Or b <> 2 Then MsgBox "là il se comporte comme And " 'l'utilisation de OR dans ce test n'a pas de sens selon moi(c'est ce que j'ai voulu expliquer a philippe)
'test3
If A <> 2 Or b <> 2 Then MsgBox "la il se comporte avec la logique l'un ou l'autre car A est bien différent de 2(true) mais b n'est pas différent de 2(false) """
'test4
If A = 1 Or b <> 2 Then MsgBox "la il se comporte avec la logique l'un ou l'autre car A est bien egal a 1 mais b n'est pas différent de 2 "
End Sub