XL 2016 Problème de Or et and

Phillip

XLDnaute Occasionnel
Bonjour,

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

Quelle est l'erreur de syntaxe ?

merci

Cordialement
 

Pièces jointes

  • masquerS.xlsm
    21 KB · Affichages: 46

Phillip

XLDnaute Occasionnel
@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 :

VB:
Application.ActiveProtectedViewWindow.Edit
 

patricktoulon

XLDnaute Barbatruc
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
 
Dernière édition:

Staple1600

XLDnaute Barbatruc
Re

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
 

Phillip

XLDnaute Occasionnel
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 quelqu'un a une autre idée, je suis preneur !

Merci de votre aide en tous cas !

Cordialement

Phillip
 

Phillip

XLDnaute Occasionnel
Re

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
Pardon, mais je ne vois pas la différence avec mon code ?
 

Staple1600

XLDnaute Barbatruc
Re

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.
;)
 

eriiic

XLDnaute Barbatruc
Bonjour à tous,

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
Patrick, tu mélanges OR et XOR.
l'un ou l'autre mais pas les deux c'est XOR
eric
 
Dernière édition:

patricktoulon

XLDnaute Barbatruc
re
bonjour @eriiiic

non justement teste mes modèles en condition "<>" ou "="


petite explication sur or and
ta ligne
VB:
 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

Capture.JPG


pour OR
Capture.JPG


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
 
Dernière édition:

TooFatBoy

XLDnaute Barbatruc
Patrick, tu mélanges OR et XOR.
l'un ou l'autre mais pas les deux c'est XOR
non justement teste mes modèles
Il n'y a pas besoin de tester quoi que ce soit, c'est la base des outils de la logique. ;)

En logique, il en va de même que dans la langue française, le "ou" est inclusif.
C'est pourquoi il existe aussi le "XOR" qui, lui, est exclusif.


Résumé :
- "A OR B" veut dire "A ou B" ;
- "A XOR B" veut dire "soit A, soit B".



[edit]
Je vois que tu as modifié ton message pendant que je rédigeais ma réponse. ;)
xor c'est l'un des deux
or c'est l'un ou l'autre
and c'est l'un et l'autre
Là en revanche tu as bon. :D
[/edit]
 
Dernière édition:

Discussions similaires

Statistiques des forums

Discussions
312 195
Messages
2 086 083
Membres
103 114
dernier inscrit
sylvainb6969