Sub avec des suffixes variable
Bonsoir,
j'utilise actuellement des Sub "affichage" qui gèrent l'affichage ou non des onglets.
Par exemple, affiche_SON, affiche_ENC, affiche_REV etc....
je récupère dans l'une de mes macro via une box le suffixe ENC, SON ect.... que l'utilisateur à saisie.
tete = InputBox()je voulais faire une fonction affiche_ & tete
mais évidement c'est impossible,
si vous avez des idées pour contourner le probleme
Merci
Bonjour,
Avec un passage de parametre :
Sub test()
affiche "SON"
End Sub
Sub affiche(param As String)
If UCase(param) = "SON" Then
'...
ElseIf UCase(param) = "ENC" Then
'...
End If
End Suberic
j’étais partie sur idée comme celle là mais je pense que je pourrais trouver plus simple, mais je cherche encore
Voici mon code
sub inserlist()
'Permet l'insertion d'une liste de donnée sur tous les onglets d'un meme équipement
Dim Y, Y5, Y6, FIN, FIN2, FIN3, i%, VraiAuMoinsUneFois ' % = As integer
MsgBox "Cette opération peut prendre plusieurs secondes." & Chr(10) & Chr(10) & "Attendez le prochain message."
'affiche_tous
tete = InputBox("Saisisser le préfix du matériel", "Insertion d'une liste de donnée", "")
toto = InputBox("Saisisser les coordonnées de la cellule cible", "Insertion d'une liste de donnée", "")
titi = InputBox("Saisisser le nom de la Source", "Insertion d'une liste de donnée", "")
For i = 1 To Worksheets.Count
With Worksheets(i)
Y5 = Left(.Name, 3) = tete
Y6 = Right(.Name, 3) = tete
Y = Y5 Or Y6
If Y Then
.Unprotect Password:="mdp"
VraiAuMoinsUneFois = 1
Worksheets(i).Select
On Error GoTo FIN2
With Range(toto).Validation
On Error GoTo FIN3
.Delete
.Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, Operator:= _
xlBetween, Formula1:="=" & titi
.IgnoreBlank = True
.InCellDropdown = True
.ShowInput = True
.ShowError = True
End With
End If
Y = Y5
If Y Then
.Protect Password:="mdp"
End If
End With
Next
If VraiAuMoinsUneFois <> 1 Then GoTo FIN
MsgBox "Insertion de la liste de donnée réalisée avec succès !" & Chr(13) & "Onglets vérrouillés"
Exit subJ'aimerai que les onglets ayant le préfixe et le suffixe saisie soit affichés pour que le reste de mon code puisse allez jusqu'au bout....pour l'instant ma solution c'est "affiche_tous" qui me permet de rendre visible tous les onglets du classeur ( environs 500) ce qui demande beaucoup de ressource et de temps.
Si vous avez des idées plus simple je suis à votre entière disposition.
préfixe et le suffixe ne représente qq chose de précis que pour toi.
Soit plus précis et détaille ce que tu veux faire.
Tu veux travailler sur tous les onglets qui commencent ou finissent par "SON" ?
Mettre un fichier de travail réduit à l'essentiel peut aider aussi.
bonsoir,
Préfixe et suffixe sont respectivement les 3 premiers et les 3 derniers caractères du nom de chaque feuilles...
Moi je pense que tu a aussi vite fait de déprotéger toutes tes feuilles.
A condition d'inhiber les macros automatiques Activate et Déactivate (en les renommant XActivate et XDéactivate)
et de rajouter
Application.ScreenUpdating = Falseau début des macros...
A+
Oui eriic,
C'est presque ca,
Dans l'idée j'aimerai que selon la saisie de "tete",les onglets ayant le prefixe et le sufixe correspondant; soit visible sinon le reste de ma macro ne fonctionne pas.
SON n'est qu'un exemple.
ci joint mon ma version de travail ou je test mes macros.
Et pour galopin qui a consacré déjà quelques jours sur mon projet,
j'avoue que je maîtrise pas trop les propriétés du workbook, je travail toujours dessus, j'essaie d'apprivoiser le DefBool, qui a des possibilités franchement excitantes.
Merci a vous deux
Pas de problème, tous les onglets sont visibles.
D'ailleurs pas une seule ligne de code qui laisse penser que c'est ce que tu veux faire.
Vous répondez plus vite, que j’édite mon message !
Voilà la solution que j'ai trouver finalement
Dim i%, iRow%, iCol%, iR%, iC%, x%, tete$, S1$, S2$
Dim Y, yVraiAuMoinsUneFois
Dim a, b, d, CONTINUE, ONE, TWO
Application.DisplayAlerts = False
Application.ScreenUpdating = False
tete = InputBox("Saisir le préfix du matériel" & Chr(13) & Chr(13) & _
"(CEN,ENC,PIP,MIC,REV,SON)" & Chr(13) & Chr(13) & _
"Attendez le prochain message", "Edition des étiquettes classeur")
affiche_tous
Set d = CreateObject("Scripting.Dictionary")
For i = 1 To Worksheets.Count
With Worksheets(i)
If tete = "CEN" Then GoTo ONE
If tete = "PIP" Then GoTo ONE
If tete = "MIC" Then GoTo ONE
If tete = "SON" Then GoTo TWO
Y = Left(.Name, 3) = tete
If Y Then
yVraiAuMoinsUneFois = 1
.Activate
S1 = .Range("FdV_Serie").Value
S2 = .Range("FdV_Denom2").Value
d.Item(S1) = S2
End If
GoTo CONTINUE
ONE: Y = Left(.Name, 3) = tete
If Y Then
yVraiAuMoinsUneFois = 1
.Activate
S1 = .Range("FdV_Equip").Value
S2 = .Range("FdV_Serie").Value
d.Item(S1) = S2
End If
GoTo CONTINUE
TWO: Y = Left(.Name, 3) = tete
If Y Then
yVraiAuMoinsUneFois = 1
.Activate
S1 = .Range("FdV_Equip").Value
S2 = .Range("FdV_Denom2").Value
d.Item(S1) = S2
End If
CONTINUE:
End With
Next
If Not yVraiAuMoinsUneFois Then GoTo FIN
' suppression de la feuille à imprimer s'il elle n'a pas déjà été supprimée
On Error Resume Next
Sheets("_Etiquettes_Cla_asup").Delete
'ne pas remettre la gestion d'erreur
Sheets("_Etiquettes_classeurs").Visible = True
Sheets("_Etiquettes_classeurs").Copy After:=Sheets(Sheets.Count)
ActiveSheet.Name = "_Etiquettes_Cla_asup"
Sheets("_Etiquettes_classeurs").Visible = False