XL 2019 ComboBox dans Userform sélectionne une feuille

Yann71

XLDnaute Occasionnel
Bonjour la com. Je cherche à réaliser un projet, mais je ne trouve pas la solution à mon problème.
J'ai un Userform avec 1 ComboBox et 3 TextBox. Les TextBox affiche leur contenu dans des cellules différente
sur la Feuil1. Mon classeur possède 3 Feuilles et j'aimerai éviter de créer plusieurs UserForm pour chaque
feuille. Donc est-il possible de pouvoir utiliser la ComboBox pour sélectionner la feuille désirée et d'y rentrer
les informations.
 

Pièces jointes

  • TEST.xlsm
    26.8 KB · Affichages: 5

Yann71

XLDnaute Occasionnel
Hello

voir PJ pour les modifs apportées
Merci pour ton fichier, c'est ce que je recherchais. Mais je m'aperçois d'un problème. Si en feuille1 je rentre des donnée et que je ferme l'userform les données s'affiche, mais lorsque j'ouvre à nouveau l'userform et que je n'inscrit aucune donnée, le contenu des cellules disparaissent, ce que je ne souhaite pas. J'aimerai que le contenu des cellules soit visible dans les textbox et que je puisse modifier les informations.
 

vgendron

XLDnaute Barbatruc
C'est pas un problème, c'est juste que le code n'est pas adapté


ici pour charger les données déjà présentes sur la feuille
VB:
Private Sub ComboBox1_Change()
With Sheets(CStr(Me.ComboBox1))
    TextBox1.Value = .Range("A1")
    TextBox2.Value = .Range("B1")
    TextBox3.Value = .Range("C1")
End With
End Sub

ici pour enregistrer des données sur la feuille UNIQUEMENT si le textbox contient quelque chose
Code:
Private Sub cmdFermer_Click()
With Sheets(CStr(Me.ComboBox1))
    .Range("A1") = IIf(TextBox1.Value <> "", TextBox1.Value, .Range("A1"))
    .Range("B1") = IIf(TextBox2.Value <> "", TextBox2.Value, .Range("B1"))
    .Range("C1") = IIf(TextBox3.Value <> "", TextBox3.Value, .Range("C1"))
End With

Unload Me
End Sub
 
Dernière édition:

Yann71

XLDnaute Occasionnel
C'est pas un problème, c'est juste que les données ne sont pas chargées
à faire dans l'évènement combobox1_change
Merci pour l'info mais je ne sais comment faire. Autre chose, j'aimerai qu'à l'ouverture de l'userform que la combobox affiche ce message "Sélectionner une feuille" et je ne souhaite pas que la feuille "Liste" s'affiche apparaisse, il y aura par ailleurs d'autres feuilles qui seront rajouté au classeur qui ne devront pas apparaître dans cette combobox. Je m'aperçois que j'en demande beaucoup dsl.
 

vgendron

XLDnaute Barbatruc
à adapter

VB:
Private Sub cmdFermer_Click()
If Me.ComboBox1.ListIndex = -1 Then
    MsgBox "Veuillez selectionner une feuille"
    Exit Sub 'si aucune feuille n'est selectionnée on ne fait rien
End If
With Sheets(CStr(Me.ComboBox1))
    .Range("A1") = IIf(TextBox1.Value <> "", TextBox1.Value, .Range("A1"))
    .Range("B1") = IIf(TextBox2.Value <> "", TextBox2.Value, .Range("B1"))
    .Range("C1") = IIf(TextBox3.Value <> "", TextBox3.Value, .Range("C1"))
End With

Unload Me
End Sub

Private Sub ComboBox1_Change()
If Me.ComboBox1.ListIndex = -1 Then Exit Sub 'si aucune feuille n'est selectionnée on ne fait rien
With Sheets(CStr(Me.ComboBox1))
    TextBox1.Value = .Range("A1")
    TextBox2.Value = .Range("B1")
    TextBox3.Value = .Range("C1")
End With
End Sub

Private Sub UserForm_Initialize()
Me.ComboBox1.Clear 'on vide le combobox
For Each ws In ActiveWorkbook.Sheets 'pour chaque feuille du classeur actif
    If ws.Name <> "Liste" Then 'si le nom n'est PAS Liste
        Me.ComboBox1.AddItem ws.Name 'on l'ajoute
    End If
Next ws
MsgBox "Veuillez selectionner une feuille"
End Sub
 

Eric C

XLDnaute Barbatruc
Bonjour le forum
Bonjour Yann71, bonjour Vincent

Comment faire....
VB:
Private Sub ComboBox1_Change()
 TextBox1.Text = Sheets(ComboBox1.Value).Range("A1")
 TextBox2.Text = Sheets(ComboBox1.Value).Range("B1")
 TextBox3.Text = Sheets(ComboBox1.Value).Range("C1")
End Sub

...Bon je poste mais je viens de voir que notre ami vgendron t'a déjà apporté la solution. Plus rapide que l'éclair....;)
Bonne après-midi
@+ Eric c
 

Yann71

XLDnaute Occasionnel
à adapter

VB:
Private Sub cmdFermer_Click()
If Me.ComboBox1.ListIndex = -1 Then
    MsgBox "Veuillez selectionner une feuille"
    Exit Sub 'si aucune feuille n'est selectionnée on ne fait rien
End If
With Sheets(CStr(Me.ComboBox1))
    .Range("A1") = IIf(TextBox1.Value <> "", TextBox1.Value, .Range("A1"))
    .Range("B1") = IIf(TextBox2.Value <> "", TextBox2.Value, .Range("B1"))
    .Range("C1") = IIf(TextBox3.Value <> "", TextBox3.Value, .Range("C1"))
End With

Unload Me
End Sub

Private Sub ComboBox1_Change()
If Me.ComboBox1.ListIndex = -1 Then Exit Sub 'si aucune feuille n'est selectionnée on ne fait rien
With Sheets(CStr(Me.ComboBox1))
    TextBox1.Value = .Range("A1")
    TextBox2.Value = .Range("B1")
    TextBox3.Value = .Range("C1")
End With
End Sub

Private Sub UserForm_Initialize()
Me.ComboBox1.Clear 'on vide le combobox
For Each ws In ActiveWorkbook.Sheets 'pour chaque feuille du classeur actif
    If ws.Name <> "Liste" Then 'si le nom n'est PAS Liste
        Me.ComboBox1.AddItem ws.Name 'on l'ajoute
    End If
Next ws
MsgBox "Veuillez selectionner une feuille"
End Sub
Je te remercie beaucoup, c'est top, mais je m'aperçois que si je rajoute une feuille, celle-ci apparaît dans la combobox et je n'ai trouvé comment modifier le code pour que cela fonctionne. J'ai dû par ailleurs mal m'exprimer, le message "Veuillez sélectionner une feuille" je le désirai pas dans msgbox mais dans la combobox à l'ouverture de l'userform pour autant que cela soit réalisable..
 

Yann71

XLDnaute Occasionnel
Bonjour le forum
Bonjour Yann71, bonjour Vincent

Comment faire....
VB:
Private Sub ComboBox1_Change()
 TextBox1.Text = Sheets(ComboBox1.Value).Range("A1")
 TextBox2.Text = Sheets(ComboBox1.Value).Range("B1")
 TextBox3.Text = Sheets(ComboBox1.Value).Range("C1")
End Sub

...Bon je poste mais je viens de voir que notre ami vgendron t'a déjà apporté la solution. Plus rapide que l'éclair....;)
Bonne après-midi
@+ Eric c
Bonjour Eric, merci pour votre intervention vous êtes toujours autant réactif, même si d'autre se montre plus rapide ;)
 

vgendron

XLDnaute Barbatruc
Je te remercie beaucoup, c'est top, mais je m'aperçois que si je rajoute une feuille, celle-ci apparaît dans la combobox et je n'ai trouvé comment modifier le code pour que cela fonctionne. J'ai dû par ailleurs mal m'exprimer, le message "Veuillez sélectionner une feuille" je le désirai pas dans msgbox mais dans la combobox à l'ouverture de l'userform pour autant que cela soit réalisable..
un message est un message
toi, tu souhaites soit un label sur le formulaire dans lequel le texte est ecrit
soit, c'est ce qui est écrit dans l'intitulé du formulaire (en haut à gauche)==> voir propriété Caption du formulaire

pour ajouter une feuille à exclure;. suffit d'adapter la condition
if ws.name=feuille OR ws.name=.....
 

Eric C

XLDnaute Barbatruc
Re le fil

Juste pour le fun.
@vincent - Avant mon repas, j'avais commencé le fichier puis dès mon retour, j'ai vu que tu avais répondu. J'ai mis dans le présent fichier, ma façon par laquelle j'appelle la feuille considérée (1/2/...). Est-ce raisonnable d'agir de cette façon ou faut-il passer par CStr ?
@+ Eric c
 

Pièces jointes

  • pour le fun.xlsm
    33.4 KB · Affichages: 10

Discussions similaires

Statistiques des forums

Discussions
314 603
Messages
2 111 081
Membres
111 035
dernier inscrit
Gharbi