VBA USF utiliser des ComboBox pour saisir des données dans la cellule cible
Bonjour,
J'ai construit un UserForm dans le but qu'un utilisateur puisse saisir remplacer le contenu de certaines cellules sans avoir à la chercher. J'ai pour cela un ComboBox qui va sélectionner la feuille, puis un ComboBox qui va sélectionner la colonne, puis un DTPicker qui va sélectionner la date (c'est à dire la ligne) et enfin un TextBox pour entrer la nouvelle donnée.
J'ai pas mal galéré pour en arriver la et j'avoue que je sais pas comment construire le bouton qui va transférer la donnée du TextBox vers la cellule qui va utiliser les données des Combobox et DTPicker...
Puisqu'un exemple vaut mieux que des explications confuses, je joins un fichier type.
J'espère que vous pourrez m'aider,
Bastien
Bonjour Bastien,
Un exemple :
Private Sub CommandButton1_Click()
Dim Colonne As Integer, Ligne As Long, Target As Range, D As Date
If ComboBox1.Value <> "" And ComboBox2.Value <> "" And IsDate(DTPicker1.Value) Then
With Worksheets(ComboBox1.Value)
Colonne = 3 * (ComboBox2.ListIndex + 1)
D = CDate(DTPicker1.Value)
Set Target = .Columns(1).Cells.Find(D)
If Not Target Is Nothing Then Ligne = Target.Row
.Cells(Ligne, Colonne).Value = TextBox1.Value
'ou, pour un décalage de 2 cellules vers la droite :
'.Cells(Ligne, Colonne + 2).Value = TextBox1.Value
End With
Else
MsgBox "Merci de remplir tous les champs"
End If
End SubMerci beaucoup Frank cela fonctionne parfaitement !
J'ai mis un peu de temps à comprendre comment tu avais fait mais je pense avoir compris, j'espère pouvoir le refaire tout seul si besoin.
bonne journée,
Bastien
Je te mets des commentaires pour faciliter l'acquisition :
Private Sub CommandButton1_Click()
Dim Colonne As Integer, Ligne As Long, Target As Range, D As Date
'Si les 3 champs de saisies requis sont bien remplis
If ComboBox1.Value <> "" And ComboBox2.Value <> "" And IsDate(DTPicker1.Value) Then
'La combobox1 contenant les noms de feuilles, on "sélectionne" l'objet Feuille(Combobox1)
With Worksheets(ComboBox1.Value)
'calcul du n° de colonne. Celui-ci est égal à 3 x le numéro d'index de la ligne sélectionnée dans la ComboBox2.
'L'index des combobox commençant à 0, on y ajoute 1
Colonne = 3 * (ComboBox2.ListIndex + 1)
'on va rechercher une date, la ligne suivante s'assure que la saisie dans le DTPicker
'soit bien au format Date
D = CDate(DTPicker1.Value)
'on recherche cette date en colonne A (Columns(1)
Set Target = .Columns(1).Cells.Find(D)
'Si on trouve la date, on en déduis la ligne
If Not Target Is Nothing Then Ligne = Target.Row
'Ici, on a la ligne et la colonne, on peut inscrire notre valeur dans la bonne cellule
.Cells(Ligne, Colonne).Value = TextBox1.Value
'ou, pour un décalage de 2 cellules vers la droite :
'.Cells(Ligne, Colonne + 2).Value = TextBox1.Value
End With
Else
MsgBox "Merci de remplir tous les champs"
End If
End SubOn pourrait y ajouter un petit Else au cas ou :
Private Sub CommandButton1_Click()
Dim Colonne As Integer, Ligne As Long, Target As Range, D As Date
'Si les 3 champs de saisies requis sont bien remplis
If ComboBox1.Value <> "" And ComboBox2.Value <> "" And IsDate(DTPicker1.Value) Then
'La combobox1 contenant les noms de feuilles, on "sélectionne" l'objet Feuille(Combobox1)
With Worksheets(ComboBox1.Value)
'calcul du n° de colonne. Celui-ci est égal à 3 x le numéro d'index de la ligne sélectionnée dans la ComboBox2.
'L'index des combobox commençant à 0, on y ajoute 1
Colonne = 3 * (ComboBox2.ListIndex + 1)
'on va rechercher une date, la ligne suivante s'assure que la saisie dans le DTPicker
'soit bien au format Date
D = CDate(DTPicker1.Value)
'on recherche cette date en colonne A (Columns(1)
Set Target = .Columns(1).Cells.Find(D)
'Si on trouve la date, on en déduis la ligne
If Not Target Is Nothing Then
Ligne = Target.Row
'Ici, on a la ligne et la colonne, on peut inscrire notre valeur dans la bonne cellule
.Cells(Ligne, Colonne).Value = TextBox1.Value
'ou, pour un décalage de 2 cellules vers la droite :
'.Cells(Ligne, Colonne + 2).Value = TextBox1.Value
Else
MsgBox "Impossible de trouver la date : " & D & " en colonne A de la feuille " & ComboBox1.Value
End If
End With
Else
MsgBox "Merci de remplir tous les champs"
End If
End Sub