Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

Macro complexe pour affichage d'onglets

3 réponses
Avatar
sunburn
Bonjour,
j'utilise une barre d'outils personnalisée.
dans cette BO, il y a un bouton pour lequel l'action permet l'affichage
d'onglets précis. (macro en fin de post).
Je voudrais rajouter, à cette macro :
- un message avec un choix : "voulez-vous le modèle simplifié, le modèle
complet ou bien pas de tableau ?" au niveau du choix, case à cocher ou liste,
pas de préférence, mais en tout cas un bouton OK, uniquement, pas possible de
ne pas choisir. ->> (Donc là, je ne sais pas si je peux faire une Msgbox ou
s'il faut un Userform)
- en fonction du choix :
1/ je dois alimenter des cellules d'une valeur texte
* si simplifié, alors l'onglet "80-31" portera la valeur "NA" en A4 et
l'onglet "80_31s" portera la valeur "Utilisé",
* si complet alors l'onglet "80-31" portera la valeur "Utilisé" en A4 et
l'onglet "80_31s" portera la valeur "NA",
* si pas de tableau, alors les 2 onglets "80_31" et "80_31s" auront la
valeur "NA" en A4.
2/ l'onglet qui sera visible changera. en effet, ci-après, on voit que
l'onglet "80_31" est dans la sélection des visibles. Peut-on mettre une
variable "i" par exemple, qui sera alimentée par le choix fait juste avant ??
si complet, alors "i" = "80_31", si simplifié alors "i" = "80_31s", si rien
du tout, alors "i" = ""

je vous remercie de votre aide, et voici ma macro actuelle afin de mieux
comprendre ce que je souhaiterais faire.

MERCI.
Yann
---
Sub CYCLE80()
Dim F As Worksheet
Application.ScreenUpdating = False
ActiveWorkbook.Unprotect 'déprotection du classeur
For Each F In ActiveWorkbook.Worksheets
Select Case F.Name
Case "DA", "GA10", "GA11", "GA12", "GA13", "GA14", _
"80", "80_20", "80_31", "80_32", "80_33", "80_41", "80_42", "80_43",
"80_44"
F.Visible = True
F.Protect , AllowFormattingRows:=True
Case Else
F.Visible = False
' F.Unprotect
End Select
Next
Sheets("80").Select
With Sheets("DA")
If .[g40] = "IR" Then Sheets("80_11").Visible = True: Exit Sub Else
If .[g40] = "BA IR" Then Sheets("80_11").Visible = True: Exit Sub Else
If .[g40] = "IS" Then Sheets("80_21").Visible = True: Exit Sub Else
End With
ActiveWorkbook.Protect Structure:=True
End Sub
----

3 réponses

Avatar
MichDenis
Bonjour Sunburn,

Tu peux utiliser un code comme ceci :

'-----------------------------------------------
Sub Choix()
Dim X As Variant
Do
X = Application.InputBox("Faites un choix parmi ces 3 alternatives." _
& vbCrLf & "1 - Le modèle simplifié" & vbCrLf & _
"2 - Le modèle complet." & vbCrLf & _
"3 - Pas de tableau." & vbCrLf & _
"Inscrivez le numéro correspondant à votre choix.", Type:=1)
If X = False Then MsgBox "Opération annulée.": Exit Sub
If X < 1 Or X > 3 Then
If MsgBox("Votre choix contient une erreur." & vbCrLf & _
"Désirez-vous reprendre la saisie?", vbCritical + vbYesNo, _
"Attention") = vbYes Then
MsgBox "Opération annulée."
Exit Do
End If
End If
Select Case X
Case 1 ' Le modèle simplifié
'le code à exécuter si cette option est choisie
Case 2 'Le modèle complet
'le code à exécuter si cette option est choisie
Case 3 'Pas de tableau
'le code à exécuter si cette option est choisie
End Select
Loop Until X = 1 Or X = 2 Or X = 3
End Sub
'-----------------------------------------------




"sunburn" a écrit dans le message de groupe de
discussion :
Bonjour,
j'utilise une barre d'outils personnalisée.
dans cette BO, il y a un bouton pour lequel l'action permet l'affichage
d'onglets précis. (macro en fin de post).
Je voudrais rajouter, à cette macro :
- un message avec un choix : "voulez-vous le modèle simplifié, le modèle
complet ou bien pas de tableau ?" au niveau du choix, case à cocher ou liste,
pas de préférence, mais en tout cas un bouton OK, uniquement, pas possible de
ne pas choisir. ->> (Donc là, je ne sais pas si je peux faire une Msgbox ou
s'il faut un Userform)
- en fonction du choix :
1/ je dois alimenter des cellules d'une valeur texte
* si simplifié, alors l'onglet "80-31" portera la valeur "NA" en A4 et
l'onglet "80_31s" portera la valeur "Utilisé",
* si complet alors l'onglet "80-31" portera la valeur "Utilisé" en A4 et
l'onglet "80_31s" portera la valeur "NA",
* si pas de tableau, alors les 2 onglets "80_31" et "80_31s" auront la
valeur "NA" en A4.
2/ l'onglet qui sera visible changera. en effet, ci-après, on voit que
l'onglet "80_31" est dans la sélection des visibles. Peut-on mettre une
variable "i" par exemple, qui sera alimentée par le choix fait juste avant ??
si complet, alors "i" = "80_31", si simplifié alors "i" = "80_31s", si rien
du tout, alors "i" = ""

je vous remercie de votre aide, et voici ma macro actuelle afin de mieux
comprendre ce que je souhaiterais faire.

MERCI.
Yann
---
Sub CYCLE80()
Dim F As Worksheet
Application.ScreenUpdating = False
ActiveWorkbook.Unprotect 'déprotection du classeur
For Each F In ActiveWorkbook.Worksheets
Select Case F.Name
Case "DA", "GA10", "GA11", "GA12", "GA13", "GA14", _
"80", "80_20", "80_31", "80_32", "80_33", "80_41", "80_42", "80_43",
"80_44"
F.Visible = True
F.Protect , AllowFormattingRows:=True
Case Else
F.Visible = False
' F.Unprotect
End Select
Next
Sheets("80").Select
With Sheets("DA")
If .[g40] = "IR" Then Sheets("80_11").Visible = True: Exit Sub Else
If .[g40] = "BA IR" Then Sheets("80_11").Visible = True: Exit Sub Else
If .[g40] = "IS" Then Sheets("80_21").Visible = True: Exit Sub Else
End With
ActiveWorkbook.Protect Structure:=True
End Sub
----
Avatar
MichDenis
Il y a une petite coquille dans le code proposé :

| If MsgBox("Votre choix contient une erreur." & vbCrLf & _
| "Désirez-vous reprendre la saisie?", vbCritical + vbYesNo, _
| "Attention") = vbYes Then

au lieu de vbyes , ce devrait être : vbNo



"MichDenis" a écrit dans le message de groupe de discussion :

Bonjour Sunburn,

Tu peux utiliser un code comme ceci :

'-----------------------------------------------
Sub Choix()
Dim X As Variant
Do
X = Application.InputBox("Faites un choix parmi ces 3 alternatives." _
& vbCrLf & "1 - Le modèle simplifié" & vbCrLf & _
"2 - Le modèle complet." & vbCrLf & _
"3 - Pas de tableau." & vbCrLf & _
"Inscrivez le numéro correspondant à votre choix.", Type:=1)
If X = False Then MsgBox "Opération annulée.": Exit Sub
If X < 1 Or X > 3 Then
If MsgBox("Votre choix contient une erreur." & vbCrLf & _
"Désirez-vous reprendre la saisie?", vbCritical + vbYesNo, _
"Attention") = vbYes Then
MsgBox "Opération annulée."
Exit Do
End If
End If
Select Case X
Case 1 ' Le modèle simplifié
'le code à exécuter si cette option est choisie
Case 2 'Le modèle complet
'le code à exécuter si cette option est choisie
Case 3 'Pas de tableau
'le code à exécuter si cette option est choisie
End Select
Loop Until X = 1 Or X = 2 Or X = 3
End Sub
'-----------------------------------------------




"sunburn" a écrit dans le message de groupe de
discussion :
Bonjour,
j'utilise une barre d'outils personnalisée.
dans cette BO, il y a un bouton pour lequel l'action permet l'affichage
d'onglets précis. (macro en fin de post).
Je voudrais rajouter, à cette macro :
- un message avec un choix : "voulez-vous le modèle simplifié, le modèle
complet ou bien pas de tableau ?" au niveau du choix, case à cocher ou liste,
pas de préférence, mais en tout cas un bouton OK, uniquement, pas possible de
ne pas choisir. ->> (Donc là, je ne sais pas si je peux faire une Msgbox ou
s'il faut un Userform)
- en fonction du choix :
1/ je dois alimenter des cellules d'une valeur texte
* si simplifié, alors l'onglet "80-31" portera la valeur "NA" en A4 et
l'onglet "80_31s" portera la valeur "Utilisé",
* si complet alors l'onglet "80-31" portera la valeur "Utilisé" en A4 et
l'onglet "80_31s" portera la valeur "NA",
* si pas de tableau, alors les 2 onglets "80_31" et "80_31s" auront la
valeur "NA" en A4.
2/ l'onglet qui sera visible changera. en effet, ci-après, on voit que
l'onglet "80_31" est dans la sélection des visibles. Peut-on mettre une
variable "i" par exemple, qui sera alimentée par le choix fait juste avant ??
si complet, alors "i" = "80_31", si simplifié alors "i" = "80_31s", si rien
du tout, alors "i" = ""

je vous remercie de votre aide, et voici ma macro actuelle afin de mieux
comprendre ce que je souhaiterais faire.

MERCI.
Yann
---
Sub CYCLE80()
Dim F As Worksheet
Application.ScreenUpdating = False
ActiveWorkbook.Unprotect 'déprotection du classeur
For Each F In ActiveWorkbook.Worksheets
Select Case F.Name
Case "DA", "GA10", "GA11", "GA12", "GA13", "GA14", _
"80", "80_20", "80_31", "80_32", "80_33", "80_41", "80_42", "80_43",
"80_44"
F.Visible = True
F.Protect , AllowFormattingRows:=True
Case Else
F.Visible = False
' F.Unprotect
End Select
Next
Sheets("80").Select
With Sheets("DA")
If .[g40] = "IR" Then Sheets("80_11").Visible = True: Exit Sub Else
If .[g40] = "BA IR" Then Sheets("80_11").Visible = True: Exit Sub Else
If .[g40] = "IS" Then Sheets("80_21").Visible = True: Exit Sub Else
End With
ActiveWorkbook.Protect Structure:=True
End Sub
----
Avatar
sunburn
Re,
Merci Michel, tout fonctionne nikel, j'adapte à mon code, ça me va impec.
Merci encore.
YANN


"MichDenis" wrote:

Il y a une petite coquille dans le code proposé :

| If MsgBox("Votre choix contient une erreur." & vbCrLf & _
| "Désirez-vous reprendre la saisie?", vbCritical + vbYesNo, _
| "Attention") = vbYes Then

au lieu de vbyes , ce devrait être : vbNo



"MichDenis" a écrit dans le message de groupe de discussion :

Bonjour Sunburn,

Tu peux utiliser un code comme ceci :

'-----------------------------------------------
Sub Choix()
Dim X As Variant
Do
X = Application.InputBox("Faites un choix parmi ces 3 alternatives." _
& vbCrLf & "1 - Le modèle simplifié" & vbCrLf & _
"2 - Le modèle complet." & vbCrLf & _
"3 - Pas de tableau." & vbCrLf & _
"Inscrivez le numéro correspondant à votre choix.", Type:=1)
If X = False Then MsgBox "Opération annulée.": Exit Sub
If X < 1 Or X > 3 Then
If MsgBox("Votre choix contient une erreur." & vbCrLf & _
"Désirez-vous reprendre la saisie?", vbCritical + vbYesNo, _
"Attention") = vbYes Then
MsgBox "Opération annulée."
Exit Do
End If
End If
Select Case X
Case 1 ' Le modèle simplifié
'le code à exécuter si cette option est choisie
Case 2 'Le modèle complet
'le code à exécuter si cette option est choisie
Case 3 'Pas de tableau
'le code à exécuter si cette option est choisie
End Select
Loop Until X = 1 Or X = 2 Or X = 3
End Sub
'-----------------------------------------------




"sunburn" a écrit dans le message de groupe de
discussion :
Bonjour,
j'utilise une barre d'outils personnalisée.
dans cette BO, il y a un bouton pour lequel l'action permet l'affichage
d'onglets précis. (macro en fin de post).
Je voudrais rajouter, à cette macro :
- un message avec un choix : "voulez-vous le modèle simplifié, le modèle
complet ou bien pas de tableau ?" au niveau du choix, case à cocher ou liste,
pas de préférence, mais en tout cas un bouton OK, uniquement, pas possible de
ne pas choisir. ->> (Donc là, je ne sais pas si je peux faire une Msgbox ou
s'il faut un Userform)
- en fonction du choix :
1/ je dois alimenter des cellules d'une valeur texte
* si simplifié, alors l'onglet "80-31" portera la valeur "NA" en A4 et
l'onglet "80_31s" portera la valeur "Utilisé",
* si complet alors l'onglet "80-31" portera la valeur "Utilisé" en A4 et
l'onglet "80_31s" portera la valeur "NA",
* si pas de tableau, alors les 2 onglets "80_31" et "80_31s" auront la
valeur "NA" en A4.
2/ l'onglet qui sera visible changera. en effet, ci-après, on voit que
l'onglet "80_31" est dans la sélection des visibles. Peut-on mettre une
variable "i" par exemple, qui sera alimentée par le choix fait juste avant ??
si complet, alors "i" = "80_31", si simplifié alors "i" = "80_31s", si rien
du tout, alors "i" = ""

je vous remercie de votre aide, et voici ma macro actuelle afin de mieux
comprendre ce que je souhaiterais faire.

MERCI.
Yann
---
Sub CYCLE80()
Dim F As Worksheet
Application.ScreenUpdating = False
ActiveWorkbook.Unprotect 'déprotection du classeur
For Each F In ActiveWorkbook.Worksheets
Select Case F.Name
Case "DA", "GA10", "GA11", "GA12", "GA13", "GA14", _
"80", "80_20", "80_31", "80_32", "80_33", "80_41", "80_42", "80_43",
"80_44"
F.Visible = True
F.Protect , AllowFormattingRows:=True
Case Else
F.Visible = False
' F.Unprotect
End Select
Next
Sheets("80").Select
With Sheets("DA")
If .[g40] = "IR" Then Sheets("80_11").Visible = True: Exit Sub Else
If .[g40] = "BA IR" Then Sheets("80_11").Visible = True: Exit Sub Else
If .[g40] = "IS" Then Sheets("80_21").Visible = True: Exit Sub Else
End With
ActiveWorkbook.Protect Structure:=True
End Sub
----