VBA USF utiliser des ComboBox pour saisir des données dans la cellule cible

14test.zip (525.21 Ko)

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 Sub

Merci 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 Sub

On 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
Rechercher des sujets similaires à "vba usf utiliser combobox saisir donnees cible"