Vous utilisez un navigateur obsolète. Il se peut que ce site ou d'autres sites Web ne s'affichent pas correctement. Vous devez le mettre à jour ou utiliser un navigateur alternatif.
Boostez vos compétences Excel avec notre communauté !
Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force.
Apprenez, échangez, progressez – et tout ça gratuitement !
👉 Inscrivez-vous maintenant !
bonsoir,je suis entrain de faire un classeur avec un modèle, mais je n'arrive pas refaire la feuille "menu" le bouttonmacro pour lancer userform c'est bon mais pour le menu déroulant problème .Quelqu'un pourrait m'expliquer?
JE début en vba
Elles viennent de la liste des mois dans la feuille Listes : à cause des accents, il y a des feuilles qui ne peuvent pas être trouvées simplement et il a fallu écrire un code laborieux.
Revoyez donc cette liste pour qu'elle corresponde aux noms exacts des feuilles. Pas de problème pour un espace devant le mois.
La macro est alors très simple :
Code:
Private Sub ComboBox1_Change()
On Error Resume Next
Sheets(Trim(ComboBox1)).Activate
If Err Then MsgBox "La feuille " & Trim(ComboBox1) & " n'existe pas...", 48
End Sub
EDITION : il faut aussi rendre la liste des mois dynamique.
1) Définissez (menu Insertion-Nom) le nom ListeMois par la formule :
=DECALER(Listes!$A$5;;;NBVAL(Listes!$A:$A)-2)
[Si vous effacez Listes!A3 (qui ne sert à rien), mettez -1 au lieu de -2]
2) En Mode Création, en face de la propriété ListFillRange de la ComboBox, écrivez : ListeMois
salut, merci job75 de m'expliquer . Mais je suis perdu, j'ai définie (menu Insertion-Nom) le nom ListeMois et aprés je ramme...Si tu peux m'aider je te mes ce que j'ai fais.
a+
Bon pour que la liste des mois soit toujours à jour, j'ai complété ComboBox1_Change :
Code:
Private Sub ComboBox1_Change()
On Error Resume Next
Sheets(Trim(ComboBox1)).Activate
If Err Then MsgBox "La feuille " & Trim(ComboBox1) & " n'existe pas...", 48
[COLOR="Red"]If Range(ComboBox1.ListFillRange).Count = Sheets.Count - 2 Then Exit Sub 'mettre en commentaire pour la 1ère fois[/COLOR]
Dim i As Integer
For i = 2 To Sheets.Count - 1
Sheets("Listes").Range("A3").Offset(i) = " " & Sheets(i).Name
Next
End Sub
La 1ère fois, pour refaire la liste sans se fatiguer, mettre la ligne en rouge en commentaire.
Autant pour moi, il faut corriger la macro dans le fichier (1) :
Code:
Private Sub ComboBox1_Change()
On Error Resume Next
Sheets(Trim(ComboBox1)).Activate
If Err Then MsgBox "La feuille " & Trim(ComboBox1) & " n'existe pas...", 48
If [COLOR="Red"][ListeMois][/COLOR].Count = Sheets.Count - 2 Then Exit Sub 'mettre en commentaire pour la 1ère fois
Dim i As Integer
For i = 2 To Sheets.Count - 1
Sheets("Listes").Range("A3").Offset(i) = " " & Sheets(i).Name
Next
End Sub
Mais il vaut mieux je pense mettre la mise à jour de la liste dans ThisWorkbook, cela se fera immédiatement quand on créera une nouvelle feuille.
La macro dans le fichier (2) :
Code:
Private Sub Workbook_SheetActivate(ByVal Sh As Object)
If [ListeMois].Count = Sheets.Count - 2 Then Exit Sub 'mettre en commentaire pour la 1ère fois
Dim i As Integer
For i = 2 To Sheets.Count - 1
Sheets("Listes").Range("A3").Offset(i) = " " & Sheets(i).Name
Next
End Sub
Beaucoup de choses à adapter avec ce nouveau fichier.
1) La ComboBox1 n'etant plus dans une feuille mais dans l'UserForm Sérial, mettre dans le code de cet UserForm :
Code:
Private Sub ComboBox1_Change()
On Error Resume Next
Application.EnableEvents = False
Sheets(Trim(ComboBox1)).Activate
Application.EnableEvents = True
If Err Then MsgBox "La feuille " & Trim(ComboBox1) & " n'existe pas...", 48
End Sub
2) C'est la propriété RowSource de cette ComboBox1 qui doit maintenant être égale à listeréférence.
3) Le nom listeréférence était mal défini, ce doit être :
=DECALER(Listes!$A$5;;;NBVAL(Listes!$A:$A)-1)
4) Enfin j'ai finalement supprimé le test If... dans la macro SheetActivate de ThisWorkbook :
Code:
Private Sub Workbook_SheetActivate(ByVal Sh As Object)
Dim i As Integer
Sheets("Listes").Range("A5:A65536").ClearContents
For i = 2 To Sheets.Count - 1
Sheets("Listes").Range("A3").Offset(i) = " " & Sheets(i).Name
Next
End Sub
bonjour job75, j'ai modifier mon classeur dans le vba et j'ai un soucis avec la mise en place des données dans les cellules.Quand j'enregistre mes donnés sur ma feuille de calcul ça marche avec les onglets que j'ai déjà mais quand j'en insère ou que je l'es renomme ça marche plus "erreur".😡
Peut tu m'aider a résoudre ce problème?
A+😀
Bon j'ai regardé la macro du bouton "Enregistrer", j'ai compris, c'est très simple.
Lors de la création de la liste dans ThisWorkbook, on met un espace devant les noms des feuilles (comme c'était au tout début), ça peut servir pour la présentation de la liste.
Donc soit vous enlevez l'espace dans ThisWorkbook, soit dans le code du bouton vous remplacez :
nomClasseur = Me.ComboBox1 par
nomClasseur = Trim(ComboBox1) [NB : les Me. ne servent à rien]
- Navigue sans publicité - Accède à Cléa, notre assistante IA experte Excel... et pas que... - Profite de fonctionnalités exclusives Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel. Je deviens Supporter XLD
Assurez vous de marquer un message comme solution pour une meilleure transparence.