Formulaire VBA

Fermé
tophessa51 Messages postés 16 Date d'inscription jeudi 16 mars 2017 Statut Membre Dernière intervention 24 mars 2017 - 16 mars 2017 à 12:11
f894009 Messages postés 17185 Date d'inscription dimanche 25 novembre 2007 Statut Membre Dernière intervention 15 avril 2024 - 16 mars 2017 à 20:09
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

4 réponses

f894009 Messages postés 17185 Date d'inscription dimanche 25 novembre 2007 Statut Membre Dernière intervention 15 avril 2024 1 702
16 mars 2017 à 12:36
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...
0
tophessa51 Messages postés 16 Date d'inscription jeudi 16 mars 2017 Statut Membre Dernière intervention 24 mars 2017
16 mars 2017 à 14:32
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
0
tophessa51 Messages postés 16 Date d'inscription jeudi 16 mars 2017 Statut Membre Dernière intervention 24 mars 2017
16 mars 2017 à 15:05
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.
0
f894009 Messages postés 17185 Date d'inscription dimanche 25 novembre 2007 Statut Membre Dernière intervention 15 avril 2024 1 702
Modifié par f894009 le 16/03/2017 à 18:12
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
Private Sub ComboBox2_Change()

regardez les formules feuille Stats 2017, pour eviter les #DIV0 et autre
0
tophessa51 Messages postés 16 Date d'inscription jeudi 16 mars 2017 Statut Membre Dernière intervention 24 mars 2017
16 mars 2017 à 18:53
J'ai trouvé la solution. Je reviens bientôt vers vous car je souhaite faire évoluer mon fichier et j'aurai besoin de vos compétences. Merci
0
f894009 Messages postés 17185 Date d'inscription dimanche 25 novembre 2007 Statut Membre Dernière intervention 15 avril 2024 1 702
16 mars 2017 à 20:09
Re
Ok
0