Formulaire VBA
tophessa51
Messages postés
16
Statut
Membre
-
f894009 Messages postés 17414 Date d'inscription Statut Membre Dernière intervention -
f894009 Messages postés 17414 Date d'inscription Statut Membre Dernière intervention -
Bonjour,
Je vous sollicite car j'aurai besoin d'aide pour un formulaire réalisé sous vba. Je vous explique mon soucis. Mon formulaire gère un fichier patient et alimente un tableau.
Quand je crée une fiche nouveau patient je n'ai aucun soucis, par contre quand je souhaite modifier une fiche patient j'ai un soucis. En haut de mon formulaire, j'ai 2 combobox (Nom, prénom). Pour éviter les doublons, je sélectionne le nom dans la liste des noms proposés et ensuite je viens sélectionner le prénom qui correspond. Une fois le prénom sélectionné, toutes les autres combobox et textbox viennent se compléter en fonction de se qui a été entré auparavant. Après avoir lu différentes choses notamment sur votre forum, j'ai modifié mon fichier et j'arrive à peu près à récupérer les données mais parfois il y a une erreur. Par contre, j'ai 3 frames ou je ne récupère pas les infos des optionbuttons sans comprendre pourquoi. Aussi, quand j'appuie sur modifier, ça ne marche pas toujours (pour modifier, je sélectionne nom, prénom et ensuite je modifie ce que je veux puis je clique sur le bouton modifier en bas). Par exemple, quand je sélectionne l'enregistrement NOM et prénom et que je souhaite modifier, j'ai une erreur sur : Me.Controls("TB2") = Ws.Cells(Ligne, "E"). Avec certains enregistrements je n'ai pas d'erreur et avec d'autres oui. Pouvez-vous m'aider sur ce point car je nage. Je suis débutant en vba.
Je vous mets un bout de mon code :
'Correspond au programme de la LISTE DEROULANTE "NOM"
Private Sub ComboBox1_Change()
Dim J As Long
Nettoyage 'Lance le programme Nettoyage
Me.ComboBox2.Clear 'Efface les données de la combobox2
If Me.ComboBox1.ListIndex = -1 Then Exit Sub
With Me.ComboBox2
For J = 2 To NbLignes
If Ws.Range("A" & J) = Me.ComboBox1 Then
.AddItem Ws.Range("B" & J)
.List(.ListCount - 1, 1) = J
End If
Next J
End With
End Sub
'Correspond à la liste déroulante Prénom
Private Sub ComboBox2_Change()
Dim Ligne As Long
Dim I As Integer
Dim TB
Nettoyage 'Lance le programme Nettoyage
If Me.ComboBox2.ListIndex = -1 Then Exit Sub
Ligne = Me.ComboBox2.List(Me.ComboBox2.ListIndex, 1)
For I = 1 To 33
Me.Controls("TB31") = Ws.Cells(Ligne, "A")
Me.Controls("TB32") = Ws.Cells(Ligne, "B")
Me.Controls("TB33") = Ws.Cells(Ligne, "C")
Me.Controls("TB2") = Ws.Cells(Ligne, "E")
Me.Controls("TB30") = Ws.Cells(Ligne, "F")
Me.Controls("TB1") = Ws.Cells(Ligne, "G")
Me.Controls("TB12") = Ws.Cells(Ligne, "H")
Me.Controls("TB11") = Ws.Cells(Ligne, "I")
Me.Controls("TB4") = Ws.Cells(Ligne, "J")
Me.Controls("TB16") = Ws.Cells(Ligne, "K")
Me.Controls("TB17") = Ws.Cells(Ligne, "L")
Me.Controls("TB27") = Ws.Cells(Ligne, "M")
Me.Controls("TB28") = Ws.Cells(Ligne, "N")
Me.Controls("TB29") = Ws.Cells(Ligne, "O")
Me.Controls("TB13") = Ws.Cells(Ligne, "P")
Me.Controls("TB14") = Ws.Cells(Ligne, "Q")
Me.Controls("TB15") = Ws.Cells(Ligne, "R")
Me.Controls("TB5") = Ws.Cells(Ligne, "S")
Me.Controls("TB3") = Ws.Cells(Ligne, "T")
Me.Controls("TB7") = Ws.Cells(Ligne, "U")
Me.Controls("TB8") = Ws.Cells(Ligne, "V")
Me.Controls("TB18") = Ws.Cells(Ligne, "W")
Me.Controls("TB10") = Ws.Cells(Ligne, "X")
Me.Controls("TB19") = Ws.Cells(Ligne, "Y")
Me.Controls("TB20") = Ws.Cells(Ligne, "Z")
Me.Controls("TB21") = Ws.Cells(Ligne, "AA")
Me.Controls("TB22") = Ws.Cells(Ligne, "AB")
Me.Controls("TB23") = Ws.Cells(Ligne, "AC")
Me.Controls("TB9") = Ws.Cells(Ligne, "AD")
Me.Controls("TB6") = Ws.Cells(Ligne, "AE")
Me.Controls("TB24") = Ws.Cells(Ligne, "AF")
Me.Controls("TB25") = Ws.Cells(Ligne, "AG")
Me.Controls("TB26") = Ws.Cells(Ligne, "AH")
Next I
If TB16.Value = "Oui" Then
OptionButton1.Value = True
OptionButton2.Value = False
OptionButton3.Value = False
Else
If TB16.Value = "Non" Then
OptionButton1.Value = False
OptionButton2.Value = True
OptionButton3.Value = False
Else
If TB16.Value = "Non renseigné" Then
OptionButton1.Value = False
OptionButton2.Value = False
OptionButton3.Value = True
End If
End If
End If
Etc pour récupérer chaque frame
'Correspond au programme du bouton MODIFIER
Private Sub CommandButton2_Click()
If MsgBox("Etes-vous certain de vouloir modifier la fiche patient ?", vbYesNo, "Demande de confirmation") = vbYes Then
Dim Ligne As Long
Dim L As Integer
Dim TB
If Me.ComboBox1.ListIndex = -1 Then Exit Sub
Ligne = Me.ComboBox2.List(Me.ComboBox2.ListIndex, 1)
Ws.Cells(Ligne, "A") = TB31.Value
Ws.Cells(Ligne, "B") = TB32.Value
Ws.Cells(Ligne, "C") = TB33.Value
Ws.Cells(Ligne, "E") = TB2.Value
Ws.Cells(Ligne, "F") = TB30.Value
Ws.Cells(Ligne, "G") = TB1.Value
Ws.Cells(Ligne, "H") = TB12.Value
Ws.Cells(Ligne, "I") = TB11.Value
Ws.Cells(Ligne, "J") = TB4.Value
Ws.Cells(Ligne, "K") = TB16.Value
Ws.Cells(Ligne, "L") = TB17.Value
Ws.Cells(Ligne, "M") = TB27.Value
Ws.Cells(Ligne, "N") = TB28.Value
Ws.Cells(Ligne, "O") = TB29.Value
Ws.Cells(Ligne, "P") = TB13.Value
Ws.Cells(Ligne, "Q") = TB14.Value
Ws.Cells(Ligne, "R") = TB15.Value
Ws.Cells(Ligne, "S") = TB5.Value
Ws.Cells(Ligne, "T") = TB3.Value
Ws.Cells(Ligne, "U") = TB7.Value
Ws.Cells(Ligne, "V") = TB8.Value
Ws.Cells(Ligne, "W") = TB18.Value
Ws.Cells(Ligne, "X") = TB10.Value
Ws.Cells(Ligne, "Y") = TB19.Value
Ws.Cells(Ligne, "Z") = TB20.Value
Ws.Cells(Ligne, "AA") = TB21.Value
Ws.Cells(Ligne, "AB") = TB22.Value
Ws.Cells(Ligne, "AC") = TB23.Value
Ws.Cells(Ligne, "AD") = TB9.Value
Ws.Cells(Ligne, "AE") = TB6.Value
Ws.Cells(Ligne, "AF") = TB24.Value
Ws.Cells(Ligne, "AG") = TB25.Value
Ws.Cells(Ligne, "AH") = TB26.Value
End If
End Sub
Merci à vous
Je vous sollicite car j'aurai besoin d'aide pour un formulaire réalisé sous vba. Je vous explique mon soucis. Mon formulaire gère un fichier patient et alimente un tableau.
Quand je crée une fiche nouveau patient je n'ai aucun soucis, par contre quand je souhaite modifier une fiche patient j'ai un soucis. En haut de mon formulaire, j'ai 2 combobox (Nom, prénom). Pour éviter les doublons, je sélectionne le nom dans la liste des noms proposés et ensuite je viens sélectionner le prénom qui correspond. Une fois le prénom sélectionné, toutes les autres combobox et textbox viennent se compléter en fonction de se qui a été entré auparavant. Après avoir lu différentes choses notamment sur votre forum, j'ai modifié mon fichier et j'arrive à peu près à récupérer les données mais parfois il y a une erreur. Par contre, j'ai 3 frames ou je ne récupère pas les infos des optionbuttons sans comprendre pourquoi. Aussi, quand j'appuie sur modifier, ça ne marche pas toujours (pour modifier, je sélectionne nom, prénom et ensuite je modifie ce que je veux puis je clique sur le bouton modifier en bas). Par exemple, quand je sélectionne l'enregistrement NOM et prénom et que je souhaite modifier, j'ai une erreur sur : Me.Controls("TB2") = Ws.Cells(Ligne, "E"). Avec certains enregistrements je n'ai pas d'erreur et avec d'autres oui. Pouvez-vous m'aider sur ce point car je nage. Je suis débutant en vba.
Je vous mets un bout de mon code :
'Correspond au programme de la LISTE DEROULANTE "NOM"
Private Sub ComboBox1_Change()
Dim J As Long
Nettoyage 'Lance le programme Nettoyage
Me.ComboBox2.Clear 'Efface les données de la combobox2
If Me.ComboBox1.ListIndex = -1 Then Exit Sub
With Me.ComboBox2
For J = 2 To NbLignes
If Ws.Range("A" & J) = Me.ComboBox1 Then
.AddItem Ws.Range("B" & J)
.List(.ListCount - 1, 1) = J
End If
Next J
End With
End Sub
'Correspond à la liste déroulante Prénom
Private Sub ComboBox2_Change()
Dim Ligne As Long
Dim I As Integer
Dim TB
Nettoyage 'Lance le programme Nettoyage
If Me.ComboBox2.ListIndex = -1 Then Exit Sub
Ligne = Me.ComboBox2.List(Me.ComboBox2.ListIndex, 1)
For I = 1 To 33
Me.Controls("TB31") = Ws.Cells(Ligne, "A")
Me.Controls("TB32") = Ws.Cells(Ligne, "B")
Me.Controls("TB33") = Ws.Cells(Ligne, "C")
Me.Controls("TB2") = Ws.Cells(Ligne, "E")
Me.Controls("TB30") = Ws.Cells(Ligne, "F")
Me.Controls("TB1") = Ws.Cells(Ligne, "G")
Me.Controls("TB12") = Ws.Cells(Ligne, "H")
Me.Controls("TB11") = Ws.Cells(Ligne, "I")
Me.Controls("TB4") = Ws.Cells(Ligne, "J")
Me.Controls("TB16") = Ws.Cells(Ligne, "K")
Me.Controls("TB17") = Ws.Cells(Ligne, "L")
Me.Controls("TB27") = Ws.Cells(Ligne, "M")
Me.Controls("TB28") = Ws.Cells(Ligne, "N")
Me.Controls("TB29") = Ws.Cells(Ligne, "O")
Me.Controls("TB13") = Ws.Cells(Ligne, "P")
Me.Controls("TB14") = Ws.Cells(Ligne, "Q")
Me.Controls("TB15") = Ws.Cells(Ligne, "R")
Me.Controls("TB5") = Ws.Cells(Ligne, "S")
Me.Controls("TB3") = Ws.Cells(Ligne, "T")
Me.Controls("TB7") = Ws.Cells(Ligne, "U")
Me.Controls("TB8") = Ws.Cells(Ligne, "V")
Me.Controls("TB18") = Ws.Cells(Ligne, "W")
Me.Controls("TB10") = Ws.Cells(Ligne, "X")
Me.Controls("TB19") = Ws.Cells(Ligne, "Y")
Me.Controls("TB20") = Ws.Cells(Ligne, "Z")
Me.Controls("TB21") = Ws.Cells(Ligne, "AA")
Me.Controls("TB22") = Ws.Cells(Ligne, "AB")
Me.Controls("TB23") = Ws.Cells(Ligne, "AC")
Me.Controls("TB9") = Ws.Cells(Ligne, "AD")
Me.Controls("TB6") = Ws.Cells(Ligne, "AE")
Me.Controls("TB24") = Ws.Cells(Ligne, "AF")
Me.Controls("TB25") = Ws.Cells(Ligne, "AG")
Me.Controls("TB26") = Ws.Cells(Ligne, "AH")
Next I
If TB16.Value = "Oui" Then
OptionButton1.Value = True
OptionButton2.Value = False
OptionButton3.Value = False
Else
If TB16.Value = "Non" Then
OptionButton1.Value = False
OptionButton2.Value = True
OptionButton3.Value = False
Else
If TB16.Value = "Non renseigné" Then
OptionButton1.Value = False
OptionButton2.Value = False
OptionButton3.Value = True
End If
End If
End If
Etc pour récupérer chaque frame
'Correspond au programme du bouton MODIFIER
Private Sub CommandButton2_Click()
If MsgBox("Etes-vous certain de vouloir modifier la fiche patient ?", vbYesNo, "Demande de confirmation") = vbYes Then
Dim Ligne As Long
Dim L As Integer
Dim TB
If Me.ComboBox1.ListIndex = -1 Then Exit Sub
Ligne = Me.ComboBox2.List(Me.ComboBox2.ListIndex, 1)
Ws.Cells(Ligne, "A") = TB31.Value
Ws.Cells(Ligne, "B") = TB32.Value
Ws.Cells(Ligne, "C") = TB33.Value
Ws.Cells(Ligne, "E") = TB2.Value
Ws.Cells(Ligne, "F") = TB30.Value
Ws.Cells(Ligne, "G") = TB1.Value
Ws.Cells(Ligne, "H") = TB12.Value
Ws.Cells(Ligne, "I") = TB11.Value
Ws.Cells(Ligne, "J") = TB4.Value
Ws.Cells(Ligne, "K") = TB16.Value
Ws.Cells(Ligne, "L") = TB17.Value
Ws.Cells(Ligne, "M") = TB27.Value
Ws.Cells(Ligne, "N") = TB28.Value
Ws.Cells(Ligne, "O") = TB29.Value
Ws.Cells(Ligne, "P") = TB13.Value
Ws.Cells(Ligne, "Q") = TB14.Value
Ws.Cells(Ligne, "R") = TB15.Value
Ws.Cells(Ligne, "S") = TB5.Value
Ws.Cells(Ligne, "T") = TB3.Value
Ws.Cells(Ligne, "U") = TB7.Value
Ws.Cells(Ligne, "V") = TB8.Value
Ws.Cells(Ligne, "W") = TB18.Value
Ws.Cells(Ligne, "X") = TB10.Value
Ws.Cells(Ligne, "Y") = TB19.Value
Ws.Cells(Ligne, "Z") = TB20.Value
Ws.Cells(Ligne, "AA") = TB21.Value
Ws.Cells(Ligne, "AB") = TB22.Value
Ws.Cells(Ligne, "AC") = TB23.Value
Ws.Cells(Ligne, "AD") = TB9.Value
Ws.Cells(Ligne, "AE") = TB6.Value
Ws.Cells(Ligne, "AF") = TB24.Value
Ws.Cells(Ligne, "AG") = TB25.Value
Ws.Cells(Ligne, "AH") = TB26.Value
End If
End Sub
Merci à vous
4 réponses
Bonjour,
Mettez votre fichier a dispo sans donnees confidentielles mais coherantes
. Ce sera plus facile de vous aider
Pour transmettre un fichier,
Veillez a ce qu'il n'y ait PAS DE DONNEES CONFIDENTIELLES
il faut passer par un site de pièce jointe tel que cjoint.com
Allez sur ce site : https://www.cjoint.com/
Clic sur parcourir,
Cherche ton fichier,
clic sur ouvrir,
Clic sur "Créer le lien cjoint",
Copier le lien,
Revenir ici le coller dans une réponse...
Mettez votre fichier a dispo sans donnees confidentielles mais coherantes
. Ce sera plus facile de vous aider
Pour transmettre un fichier,
Veillez a ce qu'il n'y ait PAS DE DONNEES CONFIDENTIELLES
il faut passer par un site de pièce jointe tel que cjoint.com
Allez sur ce site : https://www.cjoint.com/
Clic sur parcourir,
Cherche ton fichier,
clic sur ouvrir,
Clic sur "Créer le lien cjoint",
Copier le lien,
Revenir ici le coller dans une réponse...
Je vous mets un lien avec le fichier ça sera plus simple. A priori, je n'arrive pas à récupérer les infos quand je sélectionne NR mais pas sûr.
https://www.cjoint.com/c/GCqnDX0fW76
https://www.cjoint.com/c/GCqnDX0fW76
Pour NR j'ai trouvé, j'avais une erreur en nommant. Par contre quand je souhaite modifier un enregistrement où il y a des colonnes vides, je récupère une erreur.
Re,
Je recupere votre fichier
A+
Suite:
Il faut tester la valeur de cellule avant d'ecrire les TBx
ex: If .Cells(Ligne, "E") <> "" Then TB2 = .Cells(Ligne, "E")
votre fichier: https://www.cjoint.com/c/GCqrjChk8gf
code VBA voir
regardez les formules feuille Stats 2017, pour eviter les #DIV0 et autre
Je recupere votre fichier
A+
Suite:
Il faut tester la valeur de cellule avant d'ecrire les TBx
ex: If .Cells(Ligne, "E") <> "" Then TB2 = .Cells(Ligne, "E")
votre fichier: https://www.cjoint.com/c/GCqrjChk8gf
code VBA voir
Private Sub ComboBox2_Change()
regardez les formules feuille Stats 2017, pour eviter les #DIV0 et autre