ERREUR DE cOMPILATION ?????

Yldie

XLDnaute Junior
Bonjour à tous,

J'ai un souci au niveau du nombre d'arguments et/ou erreur de compilation, je crois que vous pourriez m'aider à corriger cette macro qui joue sur plusieurs feuilles de mon classeur !?!?

Merci par avance


Sub m()
Dim spwd As String
spwd = InputBox("Entrer le mot de passe")
If spwd <> "RGI" Then
MsgBox ("Mot de passe invalide")
Sheets("Feuil4", "Feuil1", "Feuil15", "Feuil16", "Feuil22", "Feuil23", "Feuil25", "Feuil29", "Feuil30", "Feuil31", "Feuil32", "Feuil33", "Feuil34", "Feuil35", "Feuil36", "Feuil39", "Feuil6").Visible = xlVeryHidden
Sheets("INTRO").Activate
Else
Sheets("Feuil4", "Feuil1", "Feuil15", "Feuil16", "Feuil22", "Feuil23", "Feuil25", "Feuil29", "Feuil30", "Feuil31", "Feuil32", "Feuil33", "Feuil34", "Feuil35", "Feuil36", "Feuil39", "Feuil6").Visible = True

End If

End Sub
 

Yldie

XLDnaute Junior
Re : ERREUR DE cOMPILATION ?????

Fait 4,32 Mo (déjà pas mal.....), sinon qu'est-ce-que vous appelez la fenêtre d'exécution (et à placer où ??? Avant quel terme.....), je sais je suis un extra terrestre de l'autre planète, ceux qui comprennent rien.......
Y a toujours cette satané erreur '9' principalement dans ThisWorkBook (y m'énerve ce WorkBook), merci pour vos conseils
 

Yldie

XLDnaute Junior
Re : ERREUR DE cOMPILATION ?????

I=0

Au fait, j'ai rebaptisé toutes mes feuilles comme suit : feuille 1 = Feuil1, etc....etc.... des fois que ça simplifie les manips, j'espère que certaines références ne bugueront pas, merci sincèrement pour votre aide, mais en tant que débutant on a vraiment besoin de personnes compétentes comme vous (ça se sent !!!)
 

Yldie

XLDnaute Junior
Re : ERREUR DE cOMPILATION ?????

Encore merci, pourriez vous me redonner les codes en entier avec type (module, INTRO, thisworkbook.....?)...merci de votre compréhension
Pour récapitulation générale avec mon module qui bug
précision : j'ai mis un mot de passe dans Propriétés de VBAproject avec verrouillage de l'affichage (est-ce que ça peut faire foirer la macro ????)



Feuille 'INTRO'



Private Sub CommandButton1_Click()
m
End Sub
Private Sub Worksheet_Activate()
For Each sh In Array("Feuil4", "Feuil1", "Feuil15", _
"Feuil22", "Feuil24", "Feuil25", "Feuil29", _
"Feuil30", "Feuil31", "Feuil32", "Feuil33", _
"Feuil34", "Feuil35", "Feuil36", "Feuil39", "Feuil6")
Sheets(sh).Visible = False

Next sh
End Sub




ThisWorkBook

'- Il faut protéger ton projet pour empêcher l'utilisateur de visualiser les
'macros et donc le mot de passe
'- Si les macros ne sont pas activées à l'ouverture du classeur, la
'protection est inefficace. Il te faut rajouter les macros suivantes dans
'"ThisWorkBook" :

Private Sub Workbook_BeforeClose(Cancel As Boolean)
For Each sh In Array("Feuil4", "Feuil1", "Feuil15", _
"Feuil22", "Feuil24", "Feuil25", "Feuil29", _
"Feuil30", "Feuil31", "Feuil32", "Feuil33", _
"Feuil34", "Feuil35", "Feuil36", "Feuil39", "Feuil6")
Sheets(sh).Visible = xlVeryHidden
Next sh
End Sub

Private Sub Workbook_Open()
For Each sh In Array("Feuil4", "Feuil1", "Feuil15", _
"Feuil22", "Feuil24", "Feuil25", "Feuil29", _
"Feuil30", "Feuil31", "Feuil32", "Feuil33", _
"Feuil34", "Feuil35", "Feuil36", "Feuil39", "Feuil6")
Sheets(sh).Visible = xlVeryHidden

End Sub

'Private Sub Workbook_SheetActivate(ByVal Sh As Object)
' Dim spwd As String
' If Sh.Name = "Feuil4" Then
' spwd = InputBox("Entrer le mot de passe")
' If spwd <> "password" Then
' MsgBox ("Mot de passe invalide")
' Sheets("INTRO").Activate
' End If
' End If
'End Sub




Module 14

Sub m()
Dim I As Integer, MesSht As String, TSht() As String
Dim spwd As String, sh
'Array("Feuil4", "Feuil1", "Feuil15", _
"Feuil22", "Feuil24", "Feuil25", "Feuil29", _
"Feuil30", "Feuil31", "Feuil32", "Feuil33", _
"Feuil34", "Feuil35", "Feuil36", "Feuil39", "Feuil6")
' Correspond à
' Tableau des feuilles à AFFICHER/CACHER séparée par des virgule
MesSht = "4,1,15,22,24,25,29,30,31,32,33,34,35,36,39,6"
TSht = Split(MesSht, ",")
'
Application.ScreenUpdating = False
spwd = InputBox("Entrer le mot de passe")
If spwd <> "Yldie" Then
MsgBox ("Mot de passe invalide")
' Cacher les feuilles
For I = 0 To UBound(TSht)
Sheets(TSht(I)).Visible = xlVeryHidden
Next I
Sheets("INTRO").Activate
Else
For I = 0 To UBound(TSht)
Sheets(TSht(I)).Visible = True :mad::mad:
Next I
End If
End Sub
 

Yldie

XLDnaute Junior
Re : ERREUR DE cOMPILATION ?????

C'est quoi la fenêtre d'exécution et où placer exactement le terme Debug.Print...., j'ai essayé à diverses reprises sans succès, je dois être un peu gauche mais je maîtrise pas encore les définitions de l'outils EXCEL, merci Bruno de me dire où placer ce code, je tente plein de trucs mais avec tjs erreur d'exécution '9'........Merci encore Bruno
 

Yldie

XLDnaute Junior
Re : ERREUR DE cOMPILATION ?????

Je suis allé dans affichage > fenêtre d'exécution et j'ai mis tel quel : Debug.Print TSht(I) et j'obtiens tjs erreur d'exécution '9' l'indice n'appartient pas à la sélection, et là franchement je rame....

Si vous y voyez clairs, aidez moi, merci d'avance

PS: est-ce que PropriétésVBAProject avec verrouillage de l'affichage joue un rôle ou non, est-ce que Private sub est la bonne formule pour ma macro 'm'......
 
C

Compte Supprimé 979

Guest
Re : ERREUR DE cOMPILATION ?????

Re,

J'aiiiiiii trouvééééé

Qu'est-ce que je peux être nul parfois :rolleyes:

Voilà le bon code pour tout

J'ai également changé le nom de ta sub "m" par "AfficherMasquer"
Il faut être explicite dans les noms de ces Sub, sinon lorsque l'on reprend le code beaucoup plus tard on se demande ce que ça fait là ;)

Feuille 'INTRO'
Code:
Private Sub CommandButton1_Click()
  Call AfficherMasquer
End Sub
Private Sub Worksheet_Activate()
  For I = 0 To UBound(TSht)
    Sheets(Val(TSht(I))).Visible = False
  Next I
End Sub

ThisWorkbook
Code:
'- Il faut protéger ton projet pour empêcher l'utilisateur de visualiser les
'macros et donc le mot de passe
'- Si les macros ne sont pas activées à l'ouverture du classeur, la
'protection est inefficace. Il te faut rajouter les macros suivantes dans
'"ThisWorkBook" :
Private Sub Workbook_BeforeClose(Cancel As Boolean)
  For I = 0 To UBound(TSht)
  Sheets(Val(TSht(I))).Visible = xlVeryHidden
  Next I
End Sub
Private Sub Workbook_Open()
  For I = 0 To UBound(TSht)
  Sheets(Val(TSht(I))).Visible = xlVeryHidden
  Next I
End Sub

Module 14
Code:
' Mettre cette ligne en tout premier
Public MesSht As String, TSht() As String
 
Sub AfficherMasquer()
  Dim I As Integer
  Dim spwd As String, sh
  'Array("Feuil4", "Feuil1", "Feuil15", _
  "Feuil22", "Feuil24", "Feuil25", "Feuil29", _
  "Feuil30", "Feuil31", "Feuil32", "Feuil33", _
  "Feuil34", "Feuil35", "Feuil36", "Feuil39", "Feuil6")
  ' Correspond à
  ' Tableau des feuilles à AFFICHER/CACHER séparée par des virgule
  MesSht = "4,1,15,22,24,25,29,30,31,32,33,34,35,36,39,6"
  TSht = Split(MesSht, ",")
  '
  Application.ScreenUpdating = False
  spwd = InputBox("Entrer le mot de passe")
  If spwd <> "Yldie" Then
    MsgBox ("Mot de passe invalide")
    ' Cacher les feuilles
    For I = 0 To UBound(TSht)
      Sheets(Val(TSht(I))).Visible = xlVeryHidden
    Next I
    Sheets("INTRO").Activate
  Else
    For I = 0 To UBound(TSht)
    Sheets(Val(TSht(I))).Visible = True
    Next I
  End If
End Sub

En fait TSht(0) te renvoi "4" du texte et non 4 un chiffre,
vu que je déclare la variable "As String" et on ne peut pas faire autrement

Donc il faut récupérer la valeur de "4", c'est fait par Val(Tsht(I)) = 4

L'instruction Sheets() doit contenir, soit le nom de la feuille = nom onglet, soit le numéro de la feuille visible dans l'éditeur VBA, donc Sheets("4").Visible = True ce n'était pas bon !
Sheets(4).Visible = True, c'est OK

Voilà, tiens nous au courant ...

A+
 
Dernière modification par un modérateur:

Discussions similaires

Statistiques des forums

Discussions
312 472
Messages
2 088 709
Membres
103 928
dernier inscrit
MIKETUAU