IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Macros et VBA Excel Discussion :

Userform : Problème avec liste déroulante et checkbox


Sujet :

Macros et VBA Excel

  1. #1
    Futur Membre du Club
    Homme Profil pro
    Chargé d'affaire
    Inscrit en
    Août 2018
    Messages
    19
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 30
    Localisation : Belgique

    Informations professionnelles :
    Activité : Chargé d'affaire

    Informations forums :
    Inscription : Août 2018
    Messages : 19
    Points : 5
    Points
    5
    Par défaut Userform : Problème avec liste déroulante et checkbox
    Bonjour,

    Est-ce que quelqu'un pourrait vérifier où je commets une erreur dans mon userform ?

    Quand je choisis un nom sur la liste déroulante puis sélectionne un autre, les textbox s"adaptent, mais les checkbox de la précédente sélection restent cochés.

    Je ne comprends pas pourquoi...

    Aussi, je viens d'adapter mon bouton "Nouveau" qui devrait me permettre d'ajouter une ligne, mais je ne sais pas à quel endroit adapter le bouton "modifier" qui devrait me permettre de modifier une ligne préexistente.

    Merci d'avance de vos réponses.

    Voila l'apparence de l'userform:
    Nom : form.PNG
Affichages : 575
Taille : 13,7 Ko

    Voici mon code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
    149
    150
    151
    152
    153
    154
    155
    156
    157
    158
    159
    160
    161
    162
    163
    164
    165
    166
    167
    168
    169
    170
    171
    172
    173
    174
    175
    176
    177
    178
    179
    Option Explicit  'Activation de la déclaration explicite des variables
    Dim Ws As Worksheet  'Variable pour un Objet Worksheet en PUBLIC pour tous les Controls de cet UserForm
     
    'Correspond au programme du FORMULAIRE
     
    Private Sub UserForm_Initialize()
    Dim J As Long
    Dim I As Integer
     
    Set Ws = Sheets("Listing intermédiaires")
     
    With Me.ComboBox1
    For J = 2 To Ws.Range("E" & Rows.Count).End(xlUp).Row
    .AddItem Ws.Range("E" & J)
     
    Next J
      End With
     
    End Sub
     
    'Correspond au programme de la LISTE DEROULANTE
    Private Sub ComboBox1_Change()
    Dim Ligne As Long
    Dim I As Integer
     
    If Me.ComboBox1.ListIndex = -1 Then Exit Sub
    Ligne = Me.ComboBox1.ListIndex + 2
    Me.Controls("TextBox12") = Ws.Cells(Ligne, "A")
    Me.Controls("TextBox1") = Ws.Cells(Ligne, "E")
    Me.Controls("TextBox2") = Ws.Cells(Ligne, "F")
    Me.Controls("TextBox3") = Ws.Cells(Ligne, "G")
    Me.Controls("TextBox4") = Ws.Cells(Ligne, "B")
     
    'Page Statut
    If Ws.Cells(Ligne, "C") = "PV" Then Me.Controls("CheckBox27") = True
    If Ws.Cells(Ligne, "C") = "SIR" Then Me.Controls("CheckBox28") = True
    If Ws.Cells(Ligne, "D") = "FR" Then Me.Controls("CheckBox25") = True
    If Ws.Cells(Ligne, "D") = "NL" Then Me.Controls("CheckBox26") = True
    Me.Controls("TextBox13") = Ws.Cells(Ligne, "H")
     
    'Page Formations
    If Ws.Cells(Ligne, "I") <> "Inexistant" Then Me.Controls("CheckBox1") = True
    If Ws.Cells(Ligne, "I") <> "Inexistant" Then Me.Controls("TextBox14") = Ws.Cells(Ligne, "I")
     
    If Ws.Cells(Ligne, "J") <> "Inexistant" Then Me.Controls("CheckBox2") = True
    If Ws.Cells(Ligne, "J") <> "Inexistant" Then Me.Controls("Textbox14") = Ws.Cells(Ligne, "I")
     
    Me.Controls("TextBox6") = Ws.Cells(Ligne, "K")
     
    If Ws.Cells(Ligne, "L") = "OK" Then Me.Controls("CheckBox3") = True
    If Ws.Cells(Ligne, "L") = "NOK" Then Me.Controls("CheckBox4") = True
     
    If Ws.Cells(Ligne, "M") = "OK" Then Me.Controls("CheckBox5") = True
    If Ws.Cells(Ligne, "M") = "NOK" Then Me.Controls("CheckBox6") = True
     
    If Ws.Cells(Ligne, "N") = "OK" Then Me.Controls("CheckBox7") = True
    If Ws.Cells(Ligne, "N") = "NOK" Then Me.Controls("CheckBox8") = True
     
    If Ws.Cells(Ligne, "O") = "OK" Then Me.Controls("CheckBox9") = True
    If Ws.Cells(Ligne, "O") = "NOK" Then Me.Controls("CheckBox10") = True
     
    Me.Controls("TextBox5") = Ws.Cells(Ligne, "P")
     
    'Page FSMA
    If Ws.Cells(Ligne, "Q") <> "N/A" Then Me.Controls("CheckBox11") = True
    If Ws.Cells(Ligne, "Q") = "N/A" Then Me.Controls("CheckBox18") = True
    Me.Controls("TextBox7") = Ws.Cells(Ligne, "Q")
    If Ws.Cells(Ligne, "R") <> "N/A" Then Me.Controls("CheckBox12") = True
    If Ws.Cells(Ligne, "R") = "N/A" Then Me.Controls("CheckBox19") = True
    Me.Controls("TextBox8") = Ws.Cells(Ligne, "R")
     
    If Ws.Cells(Ligne, "W") <> "N/A" Then Me.Controls("CheckBox13") = True
    If Ws.Cells(Ligne, "W") <> "Inexistant" Then Me.Controls("CheckBox13") = True
    If Ws.Cells(Ligne, "W") = "Inexistant" Then Me.Controls("CheckBox20") = True
    If Ws.Cells(Ligne, "W") = "N/A" Then Me.Controls("CheckBox20") = True
    Me.Controls("TextBox9") = Ws.Cells(Ligne, "W")
     
    If Ws.Cells(Ligne, "X") <> "Inexistant" Then Me.Controls("CheckBox14") = True
    If Ws.Cells(Ligne, "X") = "Inexistant" Then Me.Controls("CheckBox21") = True
    Me.Controls("TextBox10") = Ws.Cells(Ligne, "X")
     
    If Ws.Cells(Ligne, "S") <> "OK" Then Me.Controls("CheckBox15") = True
    If Ws.Cells(Ligne, "S") = "OK" Then Me.Controls("CheckBox22") = True
     
    If Ws.Cells(Ligne, "T") <> "OK" Then Me.Controls("CheckBox16") = True
    If Ws.Cells(Ligne, "T") = "OK" Then Me.Controls("CheckBox23") = True
     
    If Ws.Cells(Ligne, "V") <> "OK" Then Me.Controls("CheckBox17") = True
    If Ws.Cells(Ligne, "V") = "OK" Then Me.Controls("CheckBox24") = True
     
    Me.Controls("TextBox11") = Ws.Cells(Ligne, "Z")
     
    End Sub
     
    'Pour le bouton Nouveau
    Private Sub CommandButton3_Click()
    Dim L As Integer
    If MsgBox("Confirmez-vous l’insertion de ce nouvel intermédiaire ?", vbYesNo, "Demande de confirmation d’ajout") = vbYes Then
    L = Sheets("Listing intermédiaires").Range("a65536").End(xlUp).Row + 1
    Range("A" & L).Value = TextBox12
    Range("B" & L).Value = TextBox4
     
    If CheckBox27 = True Then Range("C" & L).Value = "PV"
    If CheckBox28 = True Then Range("C" & L).Value = "SIR"
     
    If CheckBox25 = True Then Range("D" & L).Value = "FR"
    If CheckBox26 = True Then Range("D" & L).Value = "NL"
     
    Range("E" & L).Value = TextBox1
    Range("F" & L).Value = TextBox2
    Range("G" & L).Value = TextBox3
    Range("H" & L).Value = TextBox13
     
    If CheckBox1 = True Then Range("I" & L).Value = TextBox14.Value
    If CheckBox2 = True Then Range("J" & L).Value = TextBox14.Value
     
    Range("K" & L).Value = TextBox6
     
    If CheckBox3 = True Then Range("L" & L).Value = "OK"
    If CheckBox4 = True Then Range("L" & L).Value = "Inexistant"
     
    If CheckBox5 = True Then Range("M" & L).Value = "OK"
    If CheckBox6 = True Then Range("M" & L).Value = "Inexistant"
     
    If CheckBox7 = True Then Range("N" & L).Value = "OK"
    If CheckBox8 = True Then Range("N" & L).Value = "Inexistant"
     
    If CheckBox9 = True Then Range("O" & L).Value = "OK"
    If CheckBox10 = True Then Range("O" & L).Value = "Inexistant"
     
    Range("P" & L).Value = TextBox5
     
    If CheckBox11 = True Then Range("Q" & L).Value = TextBox7.Value
    If CheckBox18 = True Then Range("Q" & L).Value = TextBox7.Value
     
    If CheckBox12 = True Then Range("R" & L).Value = TextBox8.Value
    If CheckBox19 = True Then Range("R" & L).Value = TextBox8.Value
     
    If CheckBox15 = True Then Range("S" & L).Value = "OK"
    If CheckBox22 = True Then Range("S" & L).Value = "Inexistant"
     
    If CheckBox16 = True Then Range("T" & L).Value = "OK"
    If CheckBox23 = True Then Range("T" & L).Value = "Inexistant"
     
    If CheckBox17 = True Then Range("V" & L).Value = "OK"
    If CheckBox24 = True Then Range("V" & L).Value = "Inexistant"
     
    If CheckBox13 = True Then Range("W" & L).Value = TextBox9.Value
    If CheckBox20 = True Then Range("W" & L).Value = TextBox9.Value
     
    If CheckBox14 = True Then Range("X" & L).Value = TextBox10.Value
    If CheckBox21 = True Then Range("X" & L).Value = TextBox10.Value
     
    Range("Z" & L).Value = TextBox11
    End If
    End Sub
     
    'Correspond au programme du bouton MODIFIER
    Private Sub CommandButton4_Click()
    Dim Ligne As Long
    Dim I As Integer
     
    If MsgBox("Etes-vous certain de vouloir modifier cet intermédiaire ?", vbYesNo, "Demande de confirmation") = vbYes Then
     
      If Me.ComboBox1.ListIndex = -1 Then Exit Sub 'On sort si pas de sélection
      Ligne = Me.ComboBox1.ListIndex + 2
      For I = 1 To 14
        If Me.Controls("TextBox" & I).Visible = True Then
          Ws.Cells(Ligne, I + 1) = Me.Controls("TextBox" & I)
     
        End If
      Next I
        End If
     
    End Sub
    'Correspond au programme du bouton QUITTER
    Private Sub CommandButton5_Click()
    Unload Me
     End Sub

  2. #2
    Expert éminent
    Avatar de Qwazerty
    Homme Profil pro
    La très haute tension :D
    Inscrit en
    Avril 2002
    Messages
    3 898
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France

    Informations professionnelles :
    Activité : La très haute tension :D
    Secteur : Service public

    Informations forums :
    Inscription : Avril 2002
    Messages : 3 898
    Points : 8 529
    Points
    8 529
    Par défaut
    Salut

    Outchh.
    Je sais que les règles du forum incitent (sic ) à ne pas fournir de fichier mais là, peux-tu mettre ton fichier en ligne stp.

    Pour placer du code dans un message, il y a le bouton # plutôt que d'utiliser les citations

    [Edit]
    Enfin, un début de réponse
    Il faut impérativement renommer tes contrôles en leur donnant des noms explicites, par exemple pour le combobox des noms, cbbNom, pour les checkBox CkbFR, CkbNL...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    'Plutôt que de quitter si ça n'est pas bon, on exécute le code si c'est bon
    If Me.ComboBox1.ListIndex <> -1 Then
        Ligne = ComboBox1.ListIndex + 2
        'Inutile de travailler avec "control()" et de préciser Me.
        'Par contre il est préférable de préciser .Text pour les textbox et .Value pour les cellules
        TextBox12.Text = Ws.Cells(Ligne, "A").Value
        TextBox1.Text = Ws.Cells(Ligne, "E").Value
        TextBox2.Text = Ws.Cells(Ligne, "F").Value
        TextBox3.Text = Ws.Cells(Ligne, "G").Value
        TextBox4.Text = Ws.Cells(Ligne, "B").Value
     
        'Page Statut
        'Ici on travailles avec des valeurs boolean, on peut donc attribuer directement un comparaison à la valeur true du checkBox
        CheckBox27.Value = Ws.Cells(Ligne, "C").Value = "PV"
        CheckBox28.Value = Ws.Cells(Ligne, "D").Value = "FR"
        '...
        If Ws.Cells(Ligne, "D") = "FR" Then Me.Controls("CheckBox25") = True
        If Ws.Cells(Ligne, "D") = "NL" Then Me.Controls("CheckBox26") = True
        TextBox13.Text = Ws.Cells(Ligne, "H")
     
        'etc
    End If
    Avant de poster ton fichier, retravailles déjà ton code avec les éléments ci-dessus.
    [/Edit]

    ++
    Qwaz

    MagicQwaz := Harry Potter la baguette en moins
    Le monde dans lequel on vit
    Ma page perso DVP
    Dernier et Seul Tutoriel : VBA & Internet Explorer
    Dernière contribution : Lien Tableau Structuré et UserForm
    L'utilisation de l’éditeur de message

  3. #3
    Futur Membre du Club
    Homme Profil pro
    Chargé d'affaire
    Inscrit en
    Août 2018
    Messages
    19
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 30
    Localisation : Belgique

    Informations professionnelles :
    Activité : Chargé d'affaire

    Informations forums :
    Inscription : Août 2018
    Messages : 19
    Points : 5
    Points
    5
    Par défaut Re
    Bonjour,

    Malheureusement le fichier contient des données privées que je ne peux pas partager...

    Merci beaucoup de ton aide ! J'ai suivi ton conseil et renommer mes textbox et checkbox pour que cela soit plus clair.

    Voila ce que j'ai après avoir effectué tes modifications. Je pense que les checkbox s'adaptent bien maintenant.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
    149
    150
    151
    152
    153
    154
    155
    156
    157
    158
    159
    160
    161
    162
    163
    164
    165
    166
    167
    168
    169
    170
    171
    172
    173
    174
    175
    176
    177
    178
    179
    180
    181
    182
    183
    184
    185
    186
    187
    188
    189
    190
    191
    192
    193
    194
    195
    196
    197
    Option Explicit  'Activation de la déclaration explicite des variables
    Dim Ws As Worksheet  'Variable pour un Objet Worksheet en PUBLIC pour tous les Controls de cet UserForm
     
    'Correspond au programme du FORMULAIRE
     
    Private Sub UserForm_Initialize()
    Dim J As Long
    Dim I As Integer
     
    Set Ws = Sheets("Listing intermédiaires")
     
    With Me.ComboBoxNOM
    For J = 2 To Ws.Range("E" & Rows.Count).End(xlUp).Row
    .AddItem Ws.Range("E" & J)
     
    Next J
      End With
     
    End Sub
     
    'Correspond au programme de la LISTE DEROULANTE
    Private Sub ComboBoxNOM_Change()
    Dim Ligne As Long
    Dim I As Integer
     
    If ComboBoxNOM.ListIndex <> -1 Then
    Ligne = ComboBoxNOM.ListIndex + 2
    TextBoxBureau.Text = Ws.Cells(Ligne, "A").Value
    TextBoxNom.Text = Ws.Cells(Ligne, "E").Value
    TextBoxPrenom.Text = Ws.Cells(Ligne, "F").Value
    TextBoxDate.Text = Ws.Cells(Ligne, "G").Value
    TextBoxNumero.Text = Ws.Cells(Ligne, "B").Value
     
    'Page Statut
    TextBoxStatut.Text = Ws.Cells(Ligne, "H").Value
    CheckBoxFR.Value = Ws.Cells(Ligne, "D").Value = "FR"
    CheckBoxNL.Value = Ws.Cells(Ligne, "D").Value = "NL"
    CheckBoxPV.Value = Ws.Cells(Ligne, "C").Value = "PV"
    CheckBoxSIR.Value = Ws.Cells(Ligne, "C").Value = "SIR"
    TextBoxInscription.Text = Ws.Cells(Ligne, "P").Value
     
    'Page Formations
     
    CheckBox2002.Value = Ws.Cells(Ligne, "I") <> "Inexistant"
    If Ws.Cells(Ligne, "I") <> "Inexistant" Then Me.Controls("TextBoxCESS") = Ws.Cells(Ligne, "I")
     
    CheckBoxPost2002 = Ws.Cells(Ligne, "J") <> "Inexistant"
    If Ws.Cells(Ligne, "J") <> "Inexistant" Then Me.Controls("TextboxCESS") = Ws.Cells(Ligne, "I")
     
    TextBoxDispense.Text = Ws.Cells(Ligne, "K").Value
     
    CheckBoxLoiYES.Value = Ws.Cells(Ligne, "L") = "OK"
    CheckBoxLoiNO.Value = Ws.Cells(Ligne, "L") = "NOK"
     
    CheckBoxMifidYES.Value = Ws.Cells(Ligne, "M") = "OK"
    CheckBoxMifidNO.Value = Ws.Cells(Ligne, "M") = "NOK"
     
    CheckBoxIardYES.Value = Ws.Cells(Ligne, "N") = "OK"
    CheckBoxIardNO.Value = Ws.Cells(Ligne, "N") = "NOK"
     
    CheckBoxVieYES.Value = Ws.Cells(Ligne, "O") = "OK"
    CheckBoxVieNO.Value = Ws.Cells(Ligne, "O") = "NOK"
     
    'Page FSMA
     
    CheckBoxFormYES.Value = Ws.Cells(Ligne, "Q") <> "N/A"
    CheckBoxFormNO.Value = Ws.Cells(Ligne, "Q") = "N/A"
    TextBoxForm.Text = Ws.Cells(Ligne, "Q").Value
     
    CheckBoxAdhesionYES.Value = Ws.Cells(Ligne, "R") <> "N/A"
    CheckBoxAdhesionNO.Value = Ws.Cells(Ligne, "R") = "N/A"
    TextBoxAdhesion.Text = Ws.Cells(Ligne, "R").Value
     
    CheckBoxRcYES.Value = Ws.Cells(Ligne, "W") <> "N/A"
    CheckBoxRcYES.Value = Ws.Cells(Ligne, "W") <> "Inexistant"
    CheckBoxRcNO.Value = Ws.Cells(Ligne, "W") = "Inexistant"
    CheckBoxRcNO.Value = Ws.Cells(Ligne, "W") = "N/A"
    TextBoxRc.Text = Ws.Cells(Ligne, "W").Value
     
    CheckBoxBvmYES.Value = Ws.Cells(Ligne, "X") <> "Inexistant"
    CheckBoxBvmNO.Value = Ws.Cells(Ligne, "X") = "Inexistant"
    TextBoxBvm.Text = Ws.Cells(Ligne, "X").Value
     
    CheckBoxForm117YES.Value = Ws.Cells(Ligne, "S") = "OK"
    CheckBoxForm117NO.Value = Ws.Cells(Ligne, "S") = "NOK"
     
    CheckBoxForm118YES.Value = Ws.Cells(Ligne, "T") = "OK"
    CheckBoxForm118NO.Value = Ws.Cells(Ligne, "T") = "NOK"
     
    CheckBoxExpYES.Value = Ws.Cells(Ligne, "V") = "OK"
    CheckBoxExpNO.Value = Ws.Cells(Ligne, "V") = "NOK"
     
    TextBoxRemarques.Text = Ws.Cells(Ligne, "Z").Value
     
    End If
    End Sub
     
    'Pour le bouton Nouveau
     
    Private Sub CommandButtonNOUVEAU_Click()
    Dim L As Integer
    If MsgBox("Confirmez-vous l’insertion de ce nouvel intermédiaire ?", vbYesNo, "Demande de confirmation d’ajout") = vbYes Then
    L = Sheets("Listing intermédiaires").Range("a65536").End(xlUp).Row + 1
     
    Range("A" & L).Value = TextBoxBureau.Text
    Range("B" & L).Value = TextBoxNumero.Text
     
    If CheckBoxPV = True Then Range("C" & L).Value = "PV"
    If CheckBoxSIR = True Then Range("C" & L).Value = "SIR"
     
    If CheckBoxFR = True Then Range("D" & L).Value = "FR"
    If CheckBoxNL = True Then Range("D" & L).Value = "NL"
     
    Range("E" & L).Value = TextBoxNom.Text
    Range("F" & L).Value = TextBoxPrenom.Text
    Range("G" & L).Value = TextBoxDate.Text
    Range("H" & L).Value = TextBoxStatut.Text
     
    If CheckBox2002 = True Then Range("I" & L).Value = TextBox14.Text
    If CheckBoxPost2002 = True Then Range("J" & L).Value = TextBox14.Text
     
    Range("K" & L).Value = TextBoxDispense.Text
     
    If CheckBoxLoiYES = True Then Range("L" & L).Value = "OK"
    If CheckBoxLoiNO = True Then Range("L" & L).Value = "NOK"
     
    If CheckBoxMifidYES = True Then Range("M" & L).Value = "OK"
    If CheckBoxMifidNO = True Then Range("M" & L).Value = "NOK"
     
    If CheckBoxIardYES = True Then Range("N" & L).Value = "OK"
    If CheckBoxIardNO = True Then Range("N" & L).Value = "NOK"
     
    If CheckBoxVieYES = True Then Range("O" & L).Value = "OK"
    If CheckBoxVieNO = True Then Range("O" & L).Value = "NOK"
     
    Range("P" & L).Value = TextBoxInscription.Text
     
    If CheckBoxFormYES = True Then Range("Q" & L).Value = TextBoxForm.Text
    If CheckBoxFormNO = True Then Range("Q" & L).Value = TextBoxForm.Text
     
    If CheckBoxAdhesionYES = True Then Range("R" & L).Value = TextBoxAdhesion.Text
    If CheckBoxAdhesionNO = True Then Range("R" & L).Value = TextBoxAdhesion.Text
     
    If CheckBoxForm117YES = True Then Range("S" & L).Value = "OK"
    If CheckBoxForm117NO = True Then Range("S" & L).Value = "NOK"
     
    If CheckBoxForm118YES = True Then Range("T" & L).Value = "OK"
    If CheckBoxForm118NO = True Then Range("T" & L).Value = "NOK"
     
    If CheckBoxExpYES = True Then Range("V" & L).Value = "OK"
    If CheckBoxExpNO = True Then Range("V" & L).Value = "NOK"
     
    If CheckBoxRcYES = True Then Range("W" & L).Value = TextBoxRc.Text
    If CheckBoxRcNO = True Then Range("W" & L).Value = TextBoxRc.Text
     
    If CheckBoxBvmYES = True Then Range("X" & L).Value = TextBoxBvm.Text
    If CheckBoxBvmNO = True Then Range("X" & L).Value = TextBoxBvm.Text
     
    Range("Z" & L).Value = TextBoxRemarques.Text
     
    End If
    End Sub
     
    'Correspond au programme du bouton MODIFIER
    Private Sub CommandButtonMODIFIER_Click()
    Dim Ligne As Long
    Dim I As Integer
     
    If MsgBox("Etes-vous certain de vouloir modifier cet intermédiaire ?", vbYesNo, "Demande de confirmation") = vbYes Then
     
      If Me.ComboBoxNOM.ListIndex = -1 Then Exit Sub 'On sort si pas de sélection
      Ligne = Me.ComboBoxNOM.ListIndex + 2
      For I = 1 To 14
        If Me.Controls("TextBox" & I).Visible = True Then
          Ws.Cells(Ligne, I + 1) = Me.Controls("TextBox" & I)
     
        End If
      Next I
        End If
     End Sub
     
     ' Correspond au bouton SUPPRIMER
    Private Sub CommandButtonSUPPRIMER_Click()
    Dim L As Long
    If MsgBox("Etes-vous certain de vouloir supprimer cet intermédiaire ?", vbYesNo, "Demande de confirmation") = vbYes Then
     
    If Me.ComboBoxNOM.ListIndex = -1 Then Exit Sub
     L = Me.ComboBoxNOM.ListIndex + 2
    Ws.Rows(L).Delete
     
    End If
    End Sub
     
    'Correspond au programme du bouton QUITTER
    Private Sub CommandButtonQUITTER_Click()
    Unload Me
     End Sub
    J'ai juste une question par rapport à la page formation, la textboxCESS. En fait j'aimerai que si je coche le premier, ça inscrit le texte de la premiere colonne sur la textbox, si je coche le second, ca inscrit le text de la seconde colonne sur cette même textbox.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    CheckBox2002.Value = Ws.Cells(Ligne, "I") <> "Inexistant"
    If Ws.Cells(Ligne, "I") <> "Inexistant" Then Me.Controls("TextBoxCESS") = Ws.Cells(Ligne, "I")
     
    CheckBoxPost2002 = Ws.Cells(Ligne, "J") <> "Inexistant"
    If Ws.Cells(Ligne, "J") <> "Inexistant" Then Me.Controls("TextboxCESS") = Ws.Cells(Ligne, "I")
    Sans vouloir abuser, tu sais aussi m'indiquer où je dois adapter les informations pour le bouton "modifier" ?

    Merci encore!

  4. #4
    Responsable
    Office & Excel


    Homme Profil pro
    Formateur et développeur chez EXCELLEZ.net
    Inscrit en
    Novembre 2003
    Messages
    19 122
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 57
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur et développeur chez EXCELLEZ.net
    Secteur : Enseignement

    Informations forums :
    Inscription : Novembre 2003
    Messages : 19 122
    Points : 55 947
    Points
    55 947
    Billets dans le blog
    131
    Par défaut
    Salut.

    Pour les interactions entre userform et tableau de données, en ce compris l'alimentation d'un combobox et deux combo en cascade, tu pourrais t'inspirer de cette discussion et du développement que j'explique. Tu y trouveras en pièce jointe le classeur illustrant la mise en place.

    Déjà, tu devrais travailler avec des tableaux structurés, c'est beaucoup plus simple qu'avec des plages normales issues de feuilles de calcul. Ainsi, si ton tableau devait être déplacé, ton code continuerait à fonctionner sans aucune modification, là où un code qui s'appuie sur la position des cellules dans la feuille va devoir être adapté.

    Par exemple, alimenter une combobox se fait en une ligne très facilement, en utilisant la référence structurée du tableau qui agit un peu comme une plage nommée. Avec un tableau d'une colonne qui reprend des clubs, voici comment on alimente une liste déroulante. Il a difficilement plus simple
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    cbxSelClub.List = Range("t_Clubs[Clubs]").Value
    Une liste qui se base sur un choix d'une autre liste peut s'appuyer sur un tableau créé par une fonction, comme celle-ci qui travaille avec des array, toujours en s'appuyant sur des tableaux structurés.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    Function GetPlayersByClub(ClubName As String)
      Dim CountOf As Long
      Dim Clubs
      Dim Index As Long
     
      CountOf = Evaluate("countifs(t_Joueurs[Club],""" & ClubName & """)")
      ReDim players(1 To CountOf, 1 To 2)
     
      Clubs = Range("t_Joueurs[Club]").Value
      Index = 1
      For CountOf = 1 To UBound(Clubs)
        If StrComp(Clubs(CountOf, 1), ClubName, vbTextCompare) = 0 Then
          players(Index, 1) = CountOf
          players(Index, 2) = Range("t_Joueurs[Nom & Prenom]")(CountOf).Value
          Index = Index + 1
        End If
      Next
      GetPlayersByClub = players
    End Function
    Pour échanger les données entre un userform et un enregistrement d'un tableau structuré, on utilise l'objet ListRow du ListObject (tableau structuré côté VBA) et le code est très simple. Ici, voici le code pour alimenter un userform sur base d'une ligne d'un tableau structuré
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    Sub ValuesToControls()
      With mTableRow
        cbxClub.Value = .Range(1).Value
        Txtlicence.Value = .Range(3).Value
        TxtNom.Value = .Range(4).Value
        Txtprenom.Value = .Range(5).Value
        Txtdate.Value = .Range(6).Value
        Txt_clt_Aller_Ufolep.Value = .Range(7).Value
        Txt_clt_retour_Ufolep.Value = .Range(8).Value
        Txt_clt_Aller_FFTT.Value = .Range(9).Value
        Txt_clt_retour_FFTT.Value = .Range(10).Value
        Txt_club_FFTT.Value = .Range(11).Value
        cbxMute.Value = .Range(12).Value
      End With
    End Sub
    Etc, etc...

    Ca correspond d'ailleurs à ce que je t'avais déjà donné dans cette discussion. Je le répète encore une fois: il faut utiliser les tableaux structurés. Ce n'est pas une option si tu veux du code simple à écrire, à lire et à maintenir.
    "Plus les hommes seront éclairés, plus ils seront libres" (Voltaire)
    ---------------
    Mes billets de blog sur DVP
    Mes remarques et critiques sont purement techniques. Ne les prenez jamais pour des attaques personnelles...
    Pensez à utiliser les tableaux structurés. Ils vous simplifieront la vie, tant en Excel qu'en VBA ==> mon tuto
    Le VBA ne palliera jamais une mauvaise conception de classeur ou un manque de connaissances des outils natifs d'Excel...
    Ce ne sont pas des bonnes pratiques parce que ce sont les miennes, ce sont les miennes parce que ce sont des bonnes pratiques
    VBA pour Excel? Pensez D'ABORD en EXCEL avant de penser en VBA...
    ---------------

  5. #5
    Futur Membre du Club
    Homme Profil pro
    Chargé d'affaire
    Inscrit en
    Août 2018
    Messages
    19
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 30
    Localisation : Belgique

    Informations professionnelles :
    Activité : Chargé d'affaire

    Informations forums :
    Inscription : Août 2018
    Messages : 19
    Points : 5
    Points
    5
    Par défaut
    Bonjour,

    Mon tableau excel a été transformé en tableau structuré qui se nomme "t_Listing" mais comme les titres de mes colonnes étaients temporaires, j'ai fais mon code sur base des colonnes.

    Mais tu viens de m'éclairer sur l'utilité de cette utilisation du tableau structuré, sauf que je ne savais pas comment adapter mon code en fonction.

    Je vais aller voir la discussion dont tu parles. Merci.

  6. #6
    Responsable
    Office & Excel


    Homme Profil pro
    Formateur et développeur chez EXCELLEZ.net
    Inscrit en
    Novembre 2003
    Messages
    19 122
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 57
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur et développeur chez EXCELLEZ.net
    Secteur : Enseignement

    Informations forums :
    Inscription : Novembre 2003
    Messages : 19 122
    Points : 55 947
    Points
    55 947
    Billets dans le blog
    131
    Par défaut
    En effet, dans la procédure ValuesToControls, j'utilise la position des colonnes du tableau structuré et elle pourrait donc s'utiliser lorsque les noms des colonnes sont temporaires. Pour moi, ce n'est pas la meilleure des méthodes car elle impose une alimentation séquentielle des contrôles (ou, dans l'autre sens, du Range du ListRow), mais dans l'exemple fourni dans l'autre discussion et par rapport aux attentes, c'était le plus simple...

    Mais on pourrait lier aux noms des colonnes et génériser totalement l'alimentation du userform et le retour vers la plage de données après mise à jour dans le userform, notamment lorsque la réflexion a permis de fixer les noms des colonnes et des tableaux.

    L'idée est toujours d'aller vers uns systématisation du code car c'est le système, testé et retesté, qui garantit l'efficacité et la performance.
    "Plus les hommes seront éclairés, plus ils seront libres" (Voltaire)
    ---------------
    Mes billets de blog sur DVP
    Mes remarques et critiques sont purement techniques. Ne les prenez jamais pour des attaques personnelles...
    Pensez à utiliser les tableaux structurés. Ils vous simplifieront la vie, tant en Excel qu'en VBA ==> mon tuto
    Le VBA ne palliera jamais une mauvaise conception de classeur ou un manque de connaissances des outils natifs d'Excel...
    Ce ne sont pas des bonnes pratiques parce que ce sont les miennes, ce sont les miennes parce que ce sont des bonnes pratiques
    VBA pour Excel? Pensez D'ABORD en EXCEL avant de penser en VBA...
    ---------------

  7. #7
    Futur Membre du Club
    Homme Profil pro
    Chargé d'affaire
    Inscrit en
    Août 2018
    Messages
    19
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 30
    Localisation : Belgique

    Informations professionnelles :
    Activité : Chargé d'affaire

    Informations forums :
    Inscription : Août 2018
    Messages : 19
    Points : 5
    Points
    5
    Par défaut
    Et l'autre problème qui m'a fait écarté du choix des codages sur base des tabelauxstructurés, c'est que je pouvais remplir un nouveau contact sans souçis, mais je n'arrivais pas a faire apparaitre les informations avec la liste déroulante "Rechercher par NOM" sans devoir ajouter un bouton comme tu proposais.

    J'ai besoin que mon code me permette de faire la même chose que celui-ci quand je mets le nom d'une personne :

    Nom : Capture.JPG
Affichages : 413
Taille : 54,3 Ko


    Et j'étais encore plus perdu pour adapter mes codes checkbox avec ta méthode.

    Alors pour mon bouton modifier et supprimer, n'en parlons pas...

    Je comprends l'intérêt de ta méthode, mais comme je n'y arrive pas correctement, et pour pas déranger quelqu'un tous les deux jours, j'ai fais comme cela, dans un premier temps.

  8. #8
    Responsable
    Office & Excel


    Homme Profil pro
    Formateur et développeur chez EXCELLEZ.net
    Inscrit en
    Novembre 2003
    Messages
    19 122
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 57
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur et développeur chez EXCELLEZ.net
    Secteur : Enseignement

    Informations forums :
    Inscription : Novembre 2003
    Messages : 19 122
    Points : 55 947
    Points
    55 947
    Billets dans le blog
    131
    Par défaut
    Et maintenant, c'est okay?
    "Plus les hommes seront éclairés, plus ils seront libres" (Voltaire)
    ---------------
    Mes billets de blog sur DVP
    Mes remarques et critiques sont purement techniques. Ne les prenez jamais pour des attaques personnelles...
    Pensez à utiliser les tableaux structurés. Ils vous simplifieront la vie, tant en Excel qu'en VBA ==> mon tuto
    Le VBA ne palliera jamais une mauvaise conception de classeur ou un manque de connaissances des outils natifs d'Excel...
    Ce ne sont pas des bonnes pratiques parce que ce sont les miennes, ce sont les miennes parce que ce sont des bonnes pratiques
    VBA pour Excel? Pensez D'ABORD en EXCEL avant de penser en VBA...
    ---------------

  9. #9
    Futur Membre du Club
    Homme Profil pro
    Chargé d'affaire
    Inscrit en
    Août 2018
    Messages
    19
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 30
    Localisation : Belgique

    Informations professionnelles :
    Activité : Chargé d'affaire

    Informations forums :
    Inscription : Août 2018
    Messages : 19
    Points : 5
    Points
    5
    Par défaut
    Pas vraiment, bof... Etant donné que je n'ai plus que quelques heures pour boucler cela; je vais juste te demander si, sur base de l'ancienne méthode, tu sais comment je dois adapter mon bouton "modifier" pour que ca update ma ligne ?

  10. #10
    Responsable
    Office & Excel


    Homme Profil pro
    Formateur et développeur chez EXCELLEZ.net
    Inscrit en
    Novembre 2003
    Messages
    19 122
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 57
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur et développeur chez EXCELLEZ.net
    Secteur : Enseignement

    Informations forums :
    Inscription : Novembre 2003
    Messages : 19 122
    Points : 55 947
    Points
    55 947
    Billets dans le blog
    131
    Par défaut
    Modifier, ça doit faire quoi? Envoyer les données du userform vers la feuille Excel ou récupérer les données de la feuille Excel pour les placer dans le userform?
    "Plus les hommes seront éclairés, plus ils seront libres" (Voltaire)
    ---------------
    Mes billets de blog sur DVP
    Mes remarques et critiques sont purement techniques. Ne les prenez jamais pour des attaques personnelles...
    Pensez à utiliser les tableaux structurés. Ils vous simplifieront la vie, tant en Excel qu'en VBA ==> mon tuto
    Le VBA ne palliera jamais une mauvaise conception de classeur ou un manque de connaissances des outils natifs d'Excel...
    Ce ne sont pas des bonnes pratiques parce que ce sont les miennes, ce sont les miennes parce que ce sont des bonnes pratiques
    VBA pour Excel? Pensez D'ABORD en EXCEL avant de penser en VBA...
    ---------------

  11. #11
    Futur Membre du Club
    Homme Profil pro
    Chargé d'affaire
    Inscrit en
    Août 2018
    Messages
    19
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 30
    Localisation : Belgique

    Informations professionnelles :
    Activité : Chargé d'affaire

    Informations forums :
    Inscription : Août 2018
    Messages : 19
    Points : 5
    Points
    5
    Par défaut
    Citation Envoyé par Pierre Fauconnier Voir le message
    Modifier, ça doit faire quoi? Envoyer les données du userform vers la feuille Excel ou récupérer les données de la feuille Excel pour les placer dans le userform?
    Envoyer les données que je modifie chez quelqu'un dans l'userform vers la feuille Excel.

    Je dois supprimer le "For I = 1 to 14 et adapter quelque chose après mais je ne sais pas quoi...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    'Correspond au programme du bouton MODIFIER
    Private Sub CommandButtonMODIFIER_Click()
    Dim Ligne As Long
    Dim I As Integer
     
    If MsgBox("Etes-vous certain de vouloir modifier cet intermédiaire ?", vbYesNo, "Demande de confirmation") = vbYes Then
     
      If Me.ComboBoxNOM.ListIndex = -1 Then Exit Sub 'On sort si pas de sélection
      Ligne = Me.ComboBoxNOM.ListIndex + 2
      For I = 1 To 14
        If Me.Controls("TextBox" & I).Visible = True Then
          Ws.Cells(Ligne, I + 1) = Me.Controls("TextBox" & I)
     
        End If
      Next I
        End If
     End Sub

  12. #12
    Responsable
    Office & Excel


    Homme Profil pro
    Formateur et développeur chez EXCELLEZ.net
    Inscrit en
    Novembre 2003
    Messages
    19 122
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 57
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur et développeur chez EXCELLEZ.net
    Secteur : Enseignement

    Informations forums :
    Inscription : Novembre 2003
    Messages : 19 122
    Points : 55 947
    Points
    55 947
    Billets dans le blog
    131
    Par défaut
    Qu'est-ce qui ne fonctionne pas avec ce code? Il peut être fonctionnel, même si je vois des bizarreries dedans. Sans le classeur, difficile de dire pourquoi ça ne fonctionne pas?

    As-tu une erreur avec un code d'erreur? un problème de ligne ou de colonne décalée? rien qui se passe mais pas d'erreur?
    "Plus les hommes seront éclairés, plus ils seront libres" (Voltaire)
    ---------------
    Mes billets de blog sur DVP
    Mes remarques et critiques sont purement techniques. Ne les prenez jamais pour des attaques personnelles...
    Pensez à utiliser les tableaux structurés. Ils vous simplifieront la vie, tant en Excel qu'en VBA ==> mon tuto
    Le VBA ne palliera jamais une mauvaise conception de classeur ou un manque de connaissances des outils natifs d'Excel...
    Ce ne sont pas des bonnes pratiques parce que ce sont les miennes, ce sont les miennes parce que ce sont des bonnes pratiques
    VBA pour Excel? Pensez D'ABORD en EXCEL avant de penser en VBA...
    ---------------

  13. #13
    Futur Membre du Club
    Homme Profil pro
    Chargé d'affaire
    Inscrit en
    Août 2018
    Messages
    19
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 30
    Localisation : Belgique

    Informations professionnelles :
    Activité : Chargé d'affaire

    Informations forums :
    Inscription : Août 2018
    Messages : 19
    Points : 5
    Points
    5
    Par défaut
    Sur base de ce code, comment la modification sera executée au bon endroit si je ne dis pas que telle colonne correspond à tel control ?

    C'est un code que j'avais copié d'un tuto mais qui n'avait que des textbox qui suivaient l'ordre des colonnes. En l'espèce, ce n'est pas le cas donc je usppose que je dois adapter quelque chose dans

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    If Me.Controls("TextBox" & I).Visible = True Then
          Ws.Cells(Ligne, I + 1) = Me.Controls("TextBox" & I)

  14. #14
    Responsable
    Office & Excel


    Homme Profil pro
    Formateur et développeur chez EXCELLEZ.net
    Inscrit en
    Novembre 2003
    Messages
    19 122
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 57
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur et développeur chez EXCELLEZ.net
    Secteur : Enseignement

    Informations forums :
    Inscription : Novembre 2003
    Messages : 19 122
    Points : 55 947
    Points
    55 947
    Billets dans le blog
    131
    Par défaut
    Ben oui. Dans le code que tu fournis, il y a une correspondance stricte entre le Textbox1 et la colonne 1 (A) de la feuille, le TextBox2 et la colonne 2 (B)... Etc.

    Si tu as renommé tes contrôles comme Quaz te le suggérait (Hello Qwaz), tu devrais pouvoir créer tes correspondances, mais tu devras te passer de la boucle et remplacer tout le bloc For... Next par autant de lignes que tu as de contrôles à transférer dans la feuille. Par exemple, si tu un Textbox nommé txtNom et que la colonne du nom est la première, tu auras

    if txtnom.visible then ws.cells(Ligne, 1).value = txtnom.value et tu devras répéter et adapter cette ligne pour chaque contrôle.

    Evidemment, on pourrait (devrait?) généraliser le process, mais dans le temps imparti, on va faire comme ça.

    Citation Envoyé par jeffreypv Voir le message
    [...]C'est un code que j'avais copié d'un tuto mais qui n'avait que des textbox qui suivaient l'ordre des colonnes.[...]
    Serais curieux de savoir dans quel tuto merdique tu as trouvé un exemple aussi peu exploitable. J'ose espérer que ce n'est pas sur DVP
    "Plus les hommes seront éclairés, plus ils seront libres" (Voltaire)
    ---------------
    Mes billets de blog sur DVP
    Mes remarques et critiques sont purement techniques. Ne les prenez jamais pour des attaques personnelles...
    Pensez à utiliser les tableaux structurés. Ils vous simplifieront la vie, tant en Excel qu'en VBA ==> mon tuto
    Le VBA ne palliera jamais une mauvaise conception de classeur ou un manque de connaissances des outils natifs d'Excel...
    Ce ne sont pas des bonnes pratiques parce que ce sont les miennes, ce sont les miennes parce que ce sont des bonnes pratiques
    VBA pour Excel? Pensez D'ABORD en EXCEL avant de penser en VBA...
    ---------------

  15. #15
    Futur Membre du Club
    Homme Profil pro
    Chargé d'affaire
    Inscrit en
    Août 2018
    Messages
    19
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 30
    Localisation : Belgique

    Informations professionnelles :
    Activité : Chargé d'affaire

    Informations forums :
    Inscription : Août 2018
    Messages : 19
    Points : 5
    Points
    5
    Par défaut
    Merci beaucoup !

    Est ce que je peux mettre la lettre de la colonne au lieu de la ligne de la colonne ?

  16. #16
    Futur Membre du Club
    Homme Profil pro
    Chargé d'affaire
    Inscrit en
    Août 2018
    Messages
    19
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 30
    Localisation : Belgique

    Informations professionnelles :
    Activité : Chargé d'affaire

    Informations forums :
    Inscription : Août 2018
    Messages : 19
    Points : 5
    Points
    5
    Par défaut
    Citation Envoyé par Pierre Fauconnier Voir le message

    Serais curieux de savoir dans quel tuto merdique tu as trouvé un exemple aussi peu exploitable. J'ose espérer que ce n'est pas sur DVP
    Ici http://cellulexcel.blogspot.com/p/qu...e-loption.html

  17. #17
    Responsable
    Office & Excel


    Homme Profil pro
    Formateur et développeur chez EXCELLEZ.net
    Inscrit en
    Novembre 2003
    Messages
    19 122
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 57
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur et développeur chez EXCELLEZ.net
    Secteur : Enseignement

    Informations forums :
    Inscription : Novembre 2003
    Messages : 19 122
    Points : 55 947
    Points
    55 947
    Billets dans le blog
    131
    Par défaut
    Citation Envoyé par jeffreypv Voir le message
    Merci beaucoup !

    Est ce que je peux mettre la lettre de la colonne au lieu de la ligne de la colonne ?
    Oui
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ws.range("A" & ligne).value = txtnom.value

    Je suis allé jeter un oeil (espionnage industriel). Le cas proposé n'est pas du tout réaliste. Vaut mieux que je me taise et que je ne donne pas mon avis sur ce tuto.. (Arf, c'est déjà fait )
    "Plus les hommes seront éclairés, plus ils seront libres" (Voltaire)
    ---------------
    Mes billets de blog sur DVP
    Mes remarques et critiques sont purement techniques. Ne les prenez jamais pour des attaques personnelles...
    Pensez à utiliser les tableaux structurés. Ils vous simplifieront la vie, tant en Excel qu'en VBA ==> mon tuto
    Le VBA ne palliera jamais une mauvaise conception de classeur ou un manque de connaissances des outils natifs d'Excel...
    Ce ne sont pas des bonnes pratiques parce que ce sont les miennes, ce sont les miennes parce que ce sont des bonnes pratiques
    VBA pour Excel? Pensez D'ABORD en EXCEL avant de penser en VBA...
    ---------------

  18. #18
    Futur Membre du Club
    Homme Profil pro
    Chargé d'affaire
    Inscrit en
    Août 2018
    Messages
    19
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 30
    Localisation : Belgique

    Informations professionnelles :
    Activité : Chargé d'affaire

    Informations forums :
    Inscription : Août 2018
    Messages : 19
    Points : 5
    Points
    5
    Par défaut
    Je t'avoue que ce tuto m'a crée plus de problèmes que de solutions haha..

    Voilà, j'ai adapté les boutons, mais j'ai l'impression que ca ne modifie toujours pas une ligne précedemment remplie.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    'Correspond au programme du bouton MODIFIER
    Private Sub CommandButtonMODIFIER_Click()
    Dim Ligne As Long
    Dim I As Integer
     
    If MsgBox("Etes-vous certain de vouloir modifier cet intermédiaire ?", vbYesNo, "Demande de confirmation") = vbYes Then
     
    If ComboBoxNOM.ListIndex = -1 Then Exit Sub 'On sort si pas de sélection
    Ligne = ComboBoxNOM.ListIndex + 2
     
    If TextBoxBureau.Visible Then Ws.Range("A" & Ligne).Value = TextBoxBureau.Text
    If TextBoxNumero.Visible Then Ws.Range("B" & Ligne).Value = TextBoxNumero.Text
     
    If CheckBoxPV.Visible = True Then Ws.Range("C" & Ligne).Value = "PV"
    If CheckBoxSIR.Visible = True Then Ws.Range("C" & Ligne).Value = "SIR"
     
    If CheckBoxFR.Visible = True Then Ws.Range("D" & Ligne).Value = "FR"
    If CheckBoxNL.Visible = True Then Ws.Range("D" & Ligne).Value = "NL"
     
    If TextBoxNom.Visible = True Then Ws.Range("E" & Ligne).Value = TextBoxNom.Text
    If TextBoxPrenom.Visible = True Then Ws.Range("F" & Ligne).Value = TextBoxPrenom.Text
    If TextBoxDate.Visible = True Then Ws.Range("G" & Ligne).Value = TextBoxDate.Text
    If TextBoxStatut = True Then Ws.Range("H" & Ligne).Value = TextBoxStatut.Text
     
    If CheckBox2002.Visible = True Then Ws.Range("I" & Ligne).Value = TextBoxCESS.Text
    If CheckBoxPost2002.Visible = True Then Ws.Range("J" & Ligne).Value = TextBoxCESS.Text
     
    If TextBoxDispense.Visible = True Then Ws.Range("K" & Ligne).Value = TextBoxDispense.Text
     
    If CheckBoxLoiYES.Visible = True Then Ws.Range("L" & Ligne).Value = "OK"
    If CheckBoxLoiNO.Visible = True Then Range("L" & Ligne).Value = "NOK"
     
    If CheckBoxMifidYES.Visible = True Then Ws.Range("M" & Ligne).Value = "OK"
    If CheckBoxMifidNO.Visible = True Then Range("M" & Ligne).Value = "NOK"
     
    If CheckBoxIardYES.Visible = True Then Ws.Range("N" & Ligne).Value = "OK"
    If CheckBoxIardNO.Visible = True Then Ws.Range("N" & Ligne).Value = "NOK"
     
    If CheckBoxVieYES.Visible = True Then Ws.Range("O" & Ligne).Value = "OK"
    If CheckBoxVieNO.Visible = True Then Ws.Range("O" & Ligne).Value = "NOK"
     
    If TextBoxInscription.Visible = True Then Ws.Range("P" & Ligne).Value = TextBoxInscription.Text
     
    If CheckBoxFormYES.Visible = True Then Ws.Range("Q" & Ligne).Value = TextBoxForm.Text
    If CheckBoxFormNO.Visible = True Then Ws.Range("Q" & Ligne).Value = TextBoxForm.Text
     
    If CheckBoxAdhesionYES.Visible = True Then Ws.Range("R" & Ligne).Value = TextBoxAdhesion.Text
    If CheckBoxAdhesionNO.Visible = True Then Ws.Range("R" & Ligne).Value = TextBoxAdhesion.Text
     
    If CheckBoxForm117YES.Visible = True Then Ws.Range("S" & Ligne).Value = "OK"
    If CheckBoxForm117NO.Visible = True Then Ws.Range("S" & Ligne).Value = "NOK"
     
    If CheckBoxForm118YES.Visible = True Then Ws.Range("T" & Ligne).Value = "OK"
    If CheckBoxForm118NO.Visible = True Then Ws.Range("T" & Ligne).Value = "NOK"
     
    If CheckBoxExpYES.Visible = True Then Ws.Range("V" & Ligne).Value = "OK"
    If CheckBoxExpNO.Visible = True Then Ws.Range("V" & Ligne).Value = "NOK"
     
    If CheckBoxRcYES.Visible = True Then Ws.Range("W" & Ligne).Value = TextBoxRc.Text
    If CheckBoxRcNO.Visible = True Then Ws.Range("W" & Ligne).Value = TextBoxRc.Text
     
    If CheckBoxBvmYES.Visible = True Then Ws.Range("X" & Ligne).Value = TextBoxBvm.Text
    If CheckBoxBvmNO.Visible = True Then Ws.Range("X" & Ligne).Value = TextBoxBvm.Text
     
    If TextBoxRemarques.Visible = True Then Ws.Range("Z" & Ligne).Value = TextBoxRemarques.Text
     
    End If
    End Sub

  19. #19
    Responsable
    Office & Excel


    Homme Profil pro
    Formateur et développeur chez EXCELLEZ.net
    Inscrit en
    Novembre 2003
    Messages
    19 122
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 57
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur et développeur chez EXCELLEZ.net
    Secteur : Enseignement

    Informations forums :
    Inscription : Novembre 2003
    Messages : 19 122
    Points : 55 947
    Points
    55 947
    Billets dans le blog
    131
    Par défaut
    Met un point d'arrêt sur la ligne Private Sub CommandButtonMODIFIER_Click(). Ca te permettra d'avancer pas à pas (Pour mettre un point d'arrêt, tu cliques dans la marge de l'éditeur à hauteur de la ligne, ou tu fais clic droit sur la ligne puis Basculer>Point d'arrêt). Ainsi, lorsque tu cliqueras sur le bouton, tu pourras avancer ligne par ligne pour voir ce qui se passe. Lorsque la ligne sera surlignée en jaune, tu pourras avancer ligne par ligne avec F8. La ligne en jaune est celle qui va être exécutée.

    As-tu un message d'erreur ou bien "il ne se passe rien"?

    Déjà, il faut qu'un nom soit sélectionné dans ComboBoxNOM, sinon son ListIndex vaudra -1 à la ligne 8 et tu sortiras avec Exit Sub.

    Pourquoi testes-tu que tes textbox sont visibles?

    A la ligne 9, tu prends le ListIndex du combobox et tu y ajoutes 2. Ca veut dire que ton tableau commence en ligne 1 avec l'entête et que les données commencent en ligne 2. Quelle est la valeur de Ligne après exécution de cette ligne? Sa valeur devrait correspondre à la ligne de la feuille sur laquelle enregistrer les données. Pour voir rapidement sa valeur, pointe dessus avec la souris sans cliquer et l'infobulle te renseignera la valeur.

    Dans le code de ce bouton, je ne vois pas que ws est attribué à une feuille particulière. J'ose imaginer que ça a été effectué avant. Pour le savoir, pointe dessus avec la souris. Si l'infobulle affiche Nothing, c'est que ws a été réinitialisé (tu aurais dû avoir une erreur à l'exécution, dès lors). Si pas d'infobulle, c'est que c'est supposé OK.

    Je ne comprends pas non plus pourquoi tu testes Checkbox.Visible. Tu devrais tester CheckBox.Value. Tu devrais aussi passer une valeur lorsque non coché, sinon, tu risques de laisser la valeur si coché... Par exemple, écrire PV si coché et vider la cellule si non coché

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    If CheckBoxPV.Value =  True Then Ws.Range("C" & Ligne).Value = "PV" else Ws.Range("C" & Ligne).Value = ""


    Citation Envoyé par jeffreypv Voir le message
    Je t'avoue que ce tuto m'a crée plus de problèmes que de solutions haha..[...]
    Tu m'étonnes
    "Plus les hommes seront éclairés, plus ils seront libres" (Voltaire)
    ---------------
    Mes billets de blog sur DVP
    Mes remarques et critiques sont purement techniques. Ne les prenez jamais pour des attaques personnelles...
    Pensez à utiliser les tableaux structurés. Ils vous simplifieront la vie, tant en Excel qu'en VBA ==> mon tuto
    Le VBA ne palliera jamais une mauvaise conception de classeur ou un manque de connaissances des outils natifs d'Excel...
    Ce ne sont pas des bonnes pratiques parce que ce sont les miennes, ce sont les miennes parce que ce sont des bonnes pratiques
    VBA pour Excel? Pensez D'ABORD en EXCEL avant de penser en VBA...
    ---------------

  20. #20
    Futur Membre du Club
    Homme Profil pro
    Chargé d'affaire
    Inscrit en
    Août 2018
    Messages
    19
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 30
    Localisation : Belgique

    Informations professionnelles :
    Activité : Chargé d'affaire

    Informations forums :
    Inscription : Août 2018
    Messages : 19
    Points : 5
    Points
    5
    Par défaut
    Un grand merci !

    Aucun message d'erreur, tout fonctionne bien !

    Le problème venait du fait que pour tester, j'ai créer un contact avec "nouveau", puis j'ai tenté de le modifier.

    Mais le problème était que ce nouveau contact ne restait pas dans la liste déroulante car il faut "refresh" la page.

    je usppose que je dois ajouter à ma commande "nouveau", à la fin un :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Unload Me
    UserForm1.Show
    Et de même à ma commande "modifier" pour que les modifications se voient quand je change de contact.

    Et en effet, Ws était affecté au tout début de mon code userform.

    Un grand merci à toi ! je crois que j'ai tout ce qu'il faut maintenant.

Discussions similaires

  1. Réponses: 2
    Dernier message: 30/01/2010, 12h16
  2. problèmes avec liste déroulante
    Par _MattU_ dans le forum VBA Access
    Réponses: 5
    Dernier message: 17/06/2008, 09h52
  3. [SQL] Problème avec liste déroulante et select
    Par cari dans le forum PHP & Base de données
    Réponses: 15
    Dernier message: 28/07/2006, 20h52
  4. Problème avec listes déroulantes
    Par dl_jarod dans le forum Langage
    Réponses: 9
    Dernier message: 07/06/2006, 10h13
  5. Problème avec liste déroulante
    Par Invité dans le forum IHM
    Réponses: 2
    Dernier message: 14/12/2005, 21h04

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo