Useform remplir un fichier Excel

bonjour à tous

Comme demandé je déplace mon sujet pour ne pas squatter un déjà résolu mais se rapprochant terriblement du miens...

https://forum.excel-pratique.com/excel/probleme-userform-vba-t46215.html

Comme vous le verrez probablement j'ai suivi un tutorial pour créer un formulaire de saisie et de correction de donnée pour un classeur excel..

aujourd'hui je me trouve bloqué dans la suite du développement et je suis loin d'avoir terminé. J'ai une erreur 91 sur ce code la et j'avoue ne pas comprendre et ne pas avoir trouvé la réponse via google... En gros je voudrais qu'en sélectionnant le nom dans ma combobox11 il me remplisse mes autres combobox, jusuqe la en bidouillant j'y arrive mais maintenant j'en suis au textbox et encore une fois je ne comprend pas mes erreurs...pourtant si je compare aux autres fichiers comme celui de simon j'ai l'impression de respecter le code...

J'ai modifié comme cela et maintenant j'ai mes combobox de rempli mais pas mes textbox avec une erreur sur la ligne Me.Controls("TextBox" & I) = Ws.Cells(Ligne, I + 2) objet spécifié introuvable...

Private Sub ComboBox11_Change()

    Dim Ligne As Long
    Dim I As Integer
    Set Ws = Sheets("Feuil1")
    If Me.ComboBox11.ListIndex = -1 Then Exit Sub
    Ligne = Me.ComboBox11.ListIndex + 4
    ComboBox1 = Ws.Cells(Ligne, "E")
    ComboBox2 = Ws.Cells(Ligne, "I")
    ComboBox4 = Ws.Cells(Ligne, "K")
    ComboBox5 = Ws.Cells(Ligne, "L")
    ComboBox6 = Ws.Cells(Ligne, "M")
    ComboBox7 = Ws.Cells(Ligne, "N")
    ComboBox8 = Ws.Cells(Ligne, "O")
    ComboBox9 = Ws.Cells(Ligne, "R")
    For I = 1 To 7
    Me.Controls("TextBox" & I) = Ws.Cells(Ligne, I + 2)
    TextBox1 = Ws.Cells(Ligne, "C")
    TextBox5 = Ws.Cells(Ligne, "G")
    TextBox10 = Ws.Cells(Ligne, "J")
    TextBox2 = Ws.Cells(Ligne, "B")
    TextBox8 = Ws.Cells(Ligne, "A")
    TextBox4 = Ws.Cells(Ligne, "D")
    TextBox9 = Ws.Cells(Ligne, "F")
    Next I

End Sub
36statboulot.xlsm (59.40 Ko)

Bonsoir Wallox, bonsoir le forum,

J'ai ouvert ton fichier et vite refermé à cause de ce "Starflash"qui gave !...

bonsoir thauthème, wallox et le forum

thauthème je ne sais pas ce qu'est "starflash" mais quand j'ai ouvert le fichier il y a un scintillement de la flèche de la souris

dans vba il y a 2 fois

Private Sub Userform_initialize()

et

Private Sub Useforme_initialize()

je ne peux pas aller plus loin non plus

Pascal

bonsoir,

En ouvrant fichier tout en appuyant sur la touche Maj on inhibe les macro.

Il est aisé alors de supprimer ou d'inhiber le Starflash et le Private Sub Useforme_initialize() qui n'a rien à faire ici.

Pour le reste, ça ne me semble pas une bonne idée de remplir les champs calculés dans le Userform : ou on les inscrits en dur ou on conserve la formule. Selon mon idée un champ calculé n'a rien à faire dans ce fichier mébon...

Le code :

    For I = 1 To 7
    Me.Controls("TextBox" & I) =

...Suppose qu'il existe au moins 7 TextBox numérotés de 1 à 7 or il n'existe pas de TextBox3.

D'où l'erreur objet introuvable.

Pour le reste je n'ai pas analysé.

A+

effectivement ça gave...

Bon j'ai supprimé ce code permettant de rappeler de manière agressive à la secrétaire les champs nécessitant d'être complétés..


galopin01 a écrit :

bonsoir,

En ouvrant fichier tout en appuyant sur la touche Maj on inhibe les macro.

Il est aisé alors de supprimer ou d'inhiber le Starflash et le Private Sub Useforme_initialize() qui n'a rien à faire ici.

Pour le reste, ça ne me semble pas une bonne idée de remplir les champs calculés dans le Userform : ou on les inscrits en dur ou on conserve la formule. Selon mon idée un champ calculé n'a rien à faire dans ce fichier mébon...

Le code :

    For I = 1 To 7
    Me.Controls("TextBox" & I) =

...Suppose qu'il existe au moins 7 TextBox numérotés de 1 à 7 or il n'existe pas de TextBox3.

D'où l'erreur objet introuvable.

Pour le reste je n'ai pas analysé.

A+

Merci galopin effectivement ma création plutôt brouillon m'a fait effacer des textbox inutiles..du coup elle ne se suive pas...je les renomme de ce pas...

34statboulot.xlsm (62.90 Ko)

Bonsoir le fil, bonsoir le forum,

Galopin merci pour l'info et pour ta patience.

Il y a des jours où, de mauvaise humeur, je m'énerve vite. Mais il y a pire... Les jours où je m'énerve vite et en plus il faut que j'ouvre ma grande g... J'aurais pu le dire plus gentiment comme tu as su le faire avec ta tournure qui n'a rien à faire ici. Mais quand j'ai vu les UserForme_Initialize(), les contrôles non ordonnés, et le reste, j'ai abandonné.

Pourtant, tout comme Wallox, j'ai été débutant et j'ai commis des erreurs bien plus insensées encore. Aussi je reviens sur son fil pour lui présenter mes excuses...

Je profite aussi pour te féliciter pour la patience dont tu fait preuve sur un autre fil et qui me laisse pantois. D'ailleurs je viens de me pendre mais le plafond a cédé sous le poids...

Thauthème, nul besoin de t'excuser, je me doutais bien que ce bricolage ressemblerait à rien de bien précis pour un pro...

autant le PHP, le CSS et l'HTML me parle autant le VBA c'est plus qu'abstrait...Je suis psychologue à la base pas de cours d'informatique, pas d'excel pas de développement WEB j'essaye d'apprendre pas moi même en suivant les tutorial sur les forum...Cependant les tuto ne permettent (la plupart du temps) pas d'expliquer réellement la ligne de commande..Ce fichier évolue péniblement depuis 2 semaines et il m'a posé beaucoup d’insomnie mais quand on à pas les bases on devrait peut être pas s'attaquer à ce genre de projet...

Bonsoir

Wallox a écrit :

Je suis psychologue à la base

Je pensais qu'un psychologue aurait pensé à dire ce qu'il pense du travail fourni

https://forum.excel-pratique.com/excel/probleme-userform-vba-t46215-10.html#p328193

C'est vrai que je ne le suis pas

Bonne continuation

décidément j'enchaîne...Merci à toi Banzai64...

On va reprendre dans l'ordre, tout d'abord excusez moi pour les nombreuses fautes sur les derniers échanges (orthographe et grammaire)... Je ne pensais que les réponses iraient aussi vite à venir.

Ce forum est très réactif est c'est particulièrement agréable. Le souci c'est que j'ai regardé ça vite fait en m'occupant en même temps de mon môme de 6 mois et la double tâche c'est pas mon fort...

Pour les conseils, et les critiques (qui nous font avancer) merci à tous. @Banzai64 j'avoue ne pas avoir compris les changements que tu as réalisés en dehors de la mise en commentaire d'une partie du code (cette partie empêchait le bon déroulement ?)

tu as judicieusement placé un bouton de lancement de l'useform qui simplifie grandement son accès et j'ai honteusement repris ton idée.

@galopin01 Effectivement le champ calculé ne devrait pas apparaître dans l'useform (le but c'est de voir s'affichée la réponse et de ne pas la modifier). Bref je n'en suis qu'au début mais grâce à vous j'avance beaucoup plus vite. Maintenant j'aimerais comprendre la ou je me trompe, la ou le code n'a pas de sens (par mes modifications de bourrin). Je sais que ce n'est pas le lieu pour donner les bases aux débutant. Donc je comprendrais que l'idée de détailler plus vos réponses puissent être difficilement réalisable.

@thauthème la patience quand on voit d'énormes erreur de code ça peut parfois manqué...donc pas de problème.

Je vais corriger mon fichier quand mes enfants seront couchés et je vous poste les modifications..

Bonjour,

Je n'ai pas de commentaires à faire sur vos différentes expressions. Chacun fait bien selon ses propres disponibiltés et compétences...

Je voulais juste revenir sur l'expressiobn :

"le champ calculé ne devrait pas apparaître dans l'useform"

En fait il y a 2 approches :

#1 - Où la base de données sert de stockage et n'est jamais utilisé en direct et elle à vocation à être masquée -voire inconnue- pour l'utilisateur qui ne se sert que de l'interface de consultation et de saisie. (l'UserForm)

C'est ce que font la plupart des applications courantes ou on privilégie l'accessibilité et la présentation par fiche à la présentation tabulaire. Dans ce cas ce champ calculé (de même que l'autre) n'a rien à faire dans la base de donnée. Il est aisé de les recalculer à chaque fois qu'on charge le USF...

#2 - Si par contre on utilise malgré tout la base de données en lecture directe, pour une consultation rapide par exemple, dans ce cas il peut être tentant d'insérer cette information dans la BD, mais dans ce cas, il me semble inutile d'en faire un champ calculé : Il suffit d'enregistrer l'information "en dur" à la sortie du formulaire.

De même pour la distance d'habitation n'ayant pas vocation à changer sauf déménagement de l'une ou l'autre des parties...

J'ai tendance à considérer que toute base de données devrait être aménagée pour fonctionner selon l'option #1. Cependant mon expérience me force à constater que la plupart des "bricoleurs au long cours" (dont je fais volontiers partie à l'occasion) utilisent souvent leur base de données en lecture directe ne serait-ce que pour afficher la fiche par sélection directe d'une ligne... au lieu d'utiliser une interface de recherche de fiche plus contraignante.

Il faut avouer que cette manière de faire est souvent pratique pour de petites bases de données ne dépassant guère quelques centaines d'enregistrements (300 me semblant être un maximum absolu au delà duquel la consultation directe de la BD n'a plus aucun intérêt)

Il semble difficile d'avoir une appréciation tranchée entre les 2 pratiques :

#1 suppose une conception un peu plus aboutie de l'application ou l'utilisateur n'a pas à pester sans cesse contre le manque de finition. Tout doit être prévu pour lui éviter d'avoir à contourner les insuffisance de la programmation initiale...

#2 reconnait que #1 est la plupart du temps inaccessible pour l'utilisateur lambda d'Excel qui programme le plus souvent "à la va comme je te pousse" et "dans le sens du vent" en fonction de ses besoins du moment.

Dans les 2 cas il est bon de se rappeler que l'approche formulistique est coûteuse en ko et en temps d'exécution... On peut toujours afficher des informations calculées dans un formulaire. (Dans un label p.e.) C'est beaucoup moins pénalisant pour le formulaire qui n'a à calculer qu'une ou deux informations à chaque consultation alors que la base de données doit être recalculée en permanence pour être tout le temps à jour...

A+

ça me parait tout à fait logique.

Comme j'ai pris les choses à l'envers, il va me falloir supprimer les calculs dans la BDD et les implanter dans le code (ça c'est pas gagné ).

Bref grâce à vous j'ai surmonté la première étape et j'entame dans les prochains jours la seconde avec la modification et la création d'un nouveau patient.

Encore merci pour votre aide.

31statboulot.xlsm (64.56 Ko)

Bonjour à tous

Je reviens vers vous avec mon fichier qui évolue petit à petit.

J'ai suivi les conseils de galopin et m'acharne à faire entrer mes formules de calculs dans mon useform...

Je m'en sors (pas si mal) sauf pour la dernière avec les condtions if et elseif qui me donne une erreur else sans If alors que pour le coup encore une fois je ne comprends pas mon erreur....Il me semble que je respecte la syntaxe mais a priori non...

Private Sub ComboBox2_Change()

Dim demence As String
Dim mmse As Integer
Dim Stade As String

demence = ComboBox2.Value
mmse = TextBox5.Value
Stade = TextBox8.Value

If demence = "oui" And mmse < 10 Then Stade = "sévère"

ElseIf demence = "oui" And 10 > mmse < 20 Then Stade = "modéré"

ElseIf demence = "oui" And mmse > 20 Then Stade = "léger"

    Else: Stade = ""

End If
End Sub

Par avance merci pour votre patience...Pourriez-vous m'expliquer mon erreur ?


Private Sub ComboBox2_Change()

Dim demence As String, mmse As Integer, Stade As String

demence = ComboBox2.Value
mmse = TextBox5.Value
Stade = TextBox8.Value

If demence = "oui" And mmse < 10 Then
Stade = "sévère"

ElseIf demence = "oui" And 10 < mmse < 20 Then
Stade = "modéré"

ElseIf demence = "oui" And mmse > 20 Then
Stade = "léger"

Else
 Stade = ""

End If
End Sub

Comme ça c'est mieux...mais ça n'écrit toujours pas dans ma textbox8...

22statboulot2.xlsm (56.13 Ko)
Private Sub ComboBox2_Change()

Dim demence As String, mmse As Integer

demence = ComboBox2.Value
mmse = TextBox5.Value

If demence = "oui" And mmse < 10 Then
 Me.TextBox8.Value = "sévère"

ElseIf demence = "oui" And 10 < mmse < 20 Then
Me.TextBox8.Value = "modéré"

ElseIf demence = "oui" And mmse > 20 Then
Me.TextBox8.Value = "léger"

Else
Set Me.TextBox8.Value = ""

End If
End Sub

non toujours pas ça quand je rentre 25 an MMSE il me laisse modéré.. alors que la bonne réponse serait léger... je ne dois pas bien présenter la plage de la condition..

cette fois c'est correct !! peut on réalisé un private sub sur 2 objet_change en même temps...

Sans copier 2 fois le code ?

Private Sub TextBox5_Change()

If ComboBox2.Value = "oui" And TextBox5.Value <= 10 Then
 Me.TextBox8.Value = "sévère"

ElseIf ComboBox2.Value = "oui" And TextBox5.Value > 10 And TextBox5.Value < 20 Then
Me.TextBox8.Value = "modéré"

ElseIf ComboBox2.Value = "oui" And TextBox5.Value >= 20 Then
Me.TextBox8.Value = "léger"

Else
Me.TextBox8.Value = ""

End If
End Sub

Private Sub ComboBox2_Change()

If ComboBox2.Value = "oui" And TextBox5.Value <= 10 Then
 Me.TextBox8.Value = "sévère"

ElseIf ComboBox2.Value = "oui" And TextBox5.Value > 10 And TextBox5.Value < 20 Then
Me.TextBox8.Value = "modéré"

ElseIf ComboBox2.Value = "oui" And TextBox5.Value >= 20 Then
Me.TextBox8.Value = "léger"

Else
Me.TextBox8.Value = ""

End If
End Sub

Hum...

Je n'avais franchement pas envie de reprendre ce fil car tu me semblais parti dans un sacré bourbier ! Mais comme c'est bientôt Noël...

Comme Le Combo et le TextBox interragissent je vois le truc un peu comme ça :

Private Sub ComboBox2_Change()
EvalStade
End Sub

Private Sub TextBox5_Change()
EvalStade
If IsDate(Me.TextBox1.Value) Then Me.TextBox6.Value = fctAge(Me.TextBox1.Value)
End Sub

Sub EvalStade()
Dim S$
S = ""
If ComboBox2 = "oui" Then
Select Case TextBox5
Case Is < 10: S = "sévère"
Case Is <= 20: S = "modéré"
Case Is > 20: S = "léger"
End If
TextBox8.Value = S
End Sub

Hum... Sans garantie : A tester !

A+

Merci pour ton absence d'abandon a priori ça donne une erreur if sans bloc if..mais comme mon bricolage fonctionne je vais m'en contenter et arrêter d'abuser de ta patience même en ces jours de fêtes...

J'ai oublié le End Select...

Private Sub TextBox5_Change()
EvalStade
If IsDate(Me.TextBox1.Value) Then Me.TextBox6.Value = fctAge(Me.TextBox1.Value)
End Sub

Sub EvalStade()
Dim S$
S = ""
If ComboBox2 = "oui" Then
Select Case TextBox5
Case Is < 10: S = "sévère"
Case Is <= 20: S = "modéré"
Case Is > 20: S = "léger"
End Select
End If
TextBox8.Value = S
End Sub

Nota : la condition > 0 n'est pas examinée.

A+

Plus d'erreur mais concrétement ça ne permet pas d'actualiser en temps réel les données. Du coup il faut à chaque fois modifier la combobox et lla textbox pour que le résultat s'affiche dans la dernière textbox.. Bref pas grave merci en tout cas car la présentation en cas id est quand même mille fois plus propre et pratique.

Dernier problème pas moyen de faire écrire les données de ma liste1box dans mes cellules...

Je pensais naivement utliliser

Range("Q" & L).Select = ListBox1

mais forcément ça ne fonctionne pas...

 Ws.Cells(Ligne, "Q") = ListBox1

ne fonctionne pas non plus

Et enfin... comment récupérer ces données dans mon ComboBox11_change...

Private Sub ComboBox11_Change()
    Dim Ligne As Long
    Dim i As Integer
    Dim ValeurARetourner As String
    Set Ws = Sheets("Feuil1")
    If Me.ComboBox11.ListIndex = -1 Then Exit Sub
    Ligne = Me.ComboBox11.ListIndex + 4
    ComboBox1 = Ws.Cells(Ligne, "E")
    ComboBox2 = Ws.Cells(Ligne, "I")
    ComboBox4 = Ws.Cells(Ligne, "K")
    ComboBox5 = Ws.Cells(Ligne, "L")
    ComboBox6 = Ws.Cells(Ligne, "M")
    ComboBox7 = Ws.Cells(Ligne, "N")
    ComboBox8 = Ws.Cells(Ligne, "O")
    ComboBox9 = Ws.Cells(Ligne, "R")
    ComboBox10 = Ws.Cells(Ligne, "H")
    ComboBox12 = Ws.Cells(Ligne, "P")

    For i = 1 To 8
    Me.Controls("TextBox" & i) = Ws.Cells(Ligne, i + 2)
    TextBox1 = Ws.Cells(Ligne, "C")
    TextBox2 = Ws.Cells(Ligne, "B")
    TextBox3 = Ws.Cells(Ligne, "G")
    TextBox4 = Ws.Cells(Ligne, "A")
    TextBox5 = Ws.Cells(Ligne, "F")
    TextBox6 = Ws.Cells(Ligne, "D")
    TextBox7 = Ws.Cells(Ligne, "S")
    TextBox8 = Ws.Cells(Ligne, "J")

    Next i
    ListBox1 = Ws.Cells(Ligne, "Q")

Le dernier gros dossier...J'avais un useform 1 pour faire ça en cliquant sur la colonne via ce code la...Mais je ne veux plus tripoter ma BDD comme tu me l'as si bien conseillé et l'intégrer dans mon useform2...Promis après je ne toucherais plus jamais à du code VBA de ma vie..Enfin si mais pas avant 2015 !!

Hum,

Mon problème actuellement est que tu charges un USF dont on ne sait pas trop à quoi il sert.

Tu as d'abord fait un formulaire sans savoir à quoi il servirait. Avec la vague idée que ça servirait bien à quelque chose !

La meilleure preuve en est que une fois le formulaire ouvert tu as le choix entre chercher un patient, en afficher les données, ou en créer un nouveau.

Dans la réalité même si les formulaires sont très voisins, ça ne se passe pas comme ça :

Si tu rentres dans ton fichier Excel, c'est que tu as quelques arrière pensées.

Tu as un patient ("DUPONT") dont tu ne sais pas à priori s'il est déjà dans ton fichier ou pas.

Dans un premier temps, pour la clarté de l'exposé, on va admettre que tu fais une recherche avec le menu Excel "Rechercher"

Dès cet instant tu entres dans 2 démarches fondamentalement différentes du point de vue de la programmation :

Ou le patient existe déjà dans ton fichier, ou il n'existe pas encore...

S'il n'existe pas encore le problème est simple.

C'est une CREATION.

Tu ne vas charger qu'un formulaire vide... Que tu rempliras au fur et à mesure.

A ce stade pas de bouton "Modification", ni "Recherche..."

A ce stade il n'y pas de problème de calcul : Tu ne peux pas envisager de connaître son âge avoir d'avoir sa date de naissance.

De même tu ne peux envisager de connaître le "stade" tant que tu n'as pas rempli tous les autres critères...

Idem pour la distance que tu ne peux afficher qu'après avoir entré la Ville.

De plus avant même de commencer à remplir ton formulaire, il faut d'abord s'assurer de quelques petits détails...

tes Combos et ListBox doivent contenir un certain nombre d'éléments prédéfinis parmi lesquels tu pourras ensuite choisir :

Une liste de villes peut-être, de traitements, une échelle de distances, que sais-je...

Le nourrissage d'un formulaire de création est relativement simple (encore que... ! )

Ensuite de quoi YORAPUKA tout vider dans la première ligne vide du tableau et l'affaire sera faite avec une série de lignes du style :

Ws.Cells(Ligne, 1) = TextBox1
Ws.Cells(Ligne, 2) = TextBox2
Ws.Cells(Ligne, 3) = ComboBox1

...Je suis volontairement très schématique !

Si au contraire la fonction de recherche préliminaire abouti positivement (il faudra peut-être faire la distinction entre "DUPONT Jean" et "DUPONT Luc" ensuite trouver un système qui affiche les données du bon "DUPONT"

Nous seront alors en "CONSULTATION" et il ne sera pas question de changer en cours de route pour créer un autre "DUPONT Jean" s'il existe déjà... Le bouton "Nouveau patient" et "Recherche" devra alors être masqué...

Le problème sera alors inverse, on pourra alors utiliser le même formulaire mais qui fonctionnera à l'envers.

On aura alors une succession de :

 TextBox1 = Ws.Cells(Ligne, 1)
TextBox2 = Ws.Cells(Ligne, 2)
ComboBox1 = Ws.Cells(Ligne, 3)

A ce stade là encore pas de problème : Des infos qui ne figurent pas dans le tableau peuvent quand même être affichées.

Si tu as déjà la date de naissance, à priori il n'y a pas de difficulté à calculer et afficher l'àge...

Il en va de même pour le "stade" : Si tu as déjà suffisamment d'infos tu pourras afficher un "stade" sinon il faudra compléter pour obtenir l'information voulue...

A ce stade seulement des évènements Change interviendront pour prendre en charge tes modifications. (S'il y en a...)

S'il y a la moindre MODIFICATION, cela devra être détecté et répercuté quand tu voudras sortir (sauf si tu annules tout...)

On reviendra alors au cas de la CREATION sauf que au lieu d'écrire sur la première ligne vide, il suffira de remplacer les informations de la ligne source par les nouvelles informations....

Hum, je ne répond pas directement à tes questions, mais j'espère que je stimule un peu ton intérêt...

Parce que on ne peut pas envisager de vider le formulaire avant de savoir pourquoi on l'a ouvert (Était-on en mode Consultation ou en mode Création ?)

Transférer les données d'un ListBox ou de Combo vers la feuille n'est pas le plus simple (euphémisme) et demande une programmation pointue.

Il me semble d'abord indispensable que les mécanismes préliminaires de différentiation des étapes (Recherche, Affichage, Création, Consultation, Modification) soit bien acquis, Ensuite une bonne maitrise de la mise à jour via des TextBox, avant de passer au plat de résistance les Combo et ListBox.

Cela ne peut se faire que dans la durée et la persévérance.

En résumé, ne crois pas que tu vas pouvoir utiliser un fichier opérationnel pour Noël (ni même pour Janvier !) surtout si c'est toi le toubib et que tu as déjà des journées bien chargées...

Cordialement

A+

Merci encore pour cette réponse GaLopin. Mon intérêt est plus qu'aiguisé et dans la pratique je comprend effectivement bien ta démarche.

Je différencie bien les différentes étapes: consultation, création et modification.

Effectivement je croyais m'en être sortit juste avant noël mais non...Il va me falloir encore plusieurs semaine la dessus.

Tout faire sur un Useform parait effectivement compliqué mais je reviens sur le cas de Simon https://forum.excel-pratique.com/excel/probleme-userform-vba-t46215.html, il y arrive plutôt bien.

Alors nos problématiques sont pas les mêmes car au final j'essaye de gérer des listbox, des combobox, des textbox...les formules données fonctionnent chez lui mais pas chez moi et j'ai du mal à saisir pourquoi.

Bref l'intérêt de ce formulaire c'est qu'à ce stade de l'année je dois créer/modifier/compléter les données du services pour pouvoir faire le bilan d'activité. Environs 300 patients à chercher, modifier et créer dans cette base de donnée.

aujourd'hui j'ai réussi en bidouillant à consulter ma BDD, modifier des éléments (combobox et listbox (encore que pour la listbox c'est pas encore ça), mais dieu seul sait pourquoi pas les textbox). En fouillant dans le forum j'ai réussi à mettre ma combobox correspondant à la recherche de patient dans l'ordre alphabétique (grâce à une réponse de banzai => Merci !).

La création marche impec, la recherche tout aussi parfaitement, la modification ne fonctionne pas complètement et ça surement car j'ai du adapter le code proposé pour Simon car il ne prenait pas en charge ma listbox. Pour autant n'ayant pas d'erreur en réponse à la validation de la message box modifier difficile d'avancer.

'Pour le bouton Modifier
Private Sub CommandButton2_Click()
 Dim Ligne As Long
 Dim i As Integer

If MsgBox("Confirmez-vous la modification de ce contact ?", vbYesNo, "Demande de confirmation de modification") = vbYes Then
 If Me.ComboBox11.ListIndex = -1 Then Exit Sub
Set Ws = Sheets("Feuil1")
    If Me.ComboBox11.ListIndex = -1 Then Exit Sub
    Ligne = Me.ComboBox11.ListIndex + 4
    Ws.Cells(Ligne, "E") = ComboBox1
    Ws.Cells(Ligne, "I") = ComboBox2
    Ws.Cells(Ligne, "K") = ComboBox4
    Ws.Cells(Ligne, "L") = ComboBox5
    Ws.Cells(Ligne, "M") = ComboBox6
    Ws.Cells(Ligne, "N") = ComboBox7
    Ws.Cells(Ligne, "O") = ComboBox8
    Ws.Cells(Ligne, "R") = ComboBox9
    Ws.Cells(Ligne, "H") = ComboBox10
    Ws.Cells(Ligne, "P") = ComboBox12
    Ws.Cells(Ligne, "C") = TextBox1
    Ws.Cells(Ligne, "B") = TextBox2
    Ws.Cells(Ligne, "G") = TextBox3
    Ws.Cells(Ligne, "A") = TextBox4
    Ws.Cells(Ligne, "F") = TextBox5
    Ws.Cells(Ligne, "J") = TextBox6
    Ws.Cells(Ligne, "S") = TextBox7
    Ws.Cells(Ligne, "D") = TextBox8
    Ws.Cells(Ligne, "Q") = ""
    With Me.ListBox1
    For i = 0 To .ListCount - 1
    If .Selected(i) = True Then
        ' y = y
         If Ws.Cells(Ligne, "Q").Value = "" Then
              Ws.Cells(Ligne, "Q").Value = .List(i) ' cas du premier mot pas de ";" avant
         Else
             Ws.Cells(Ligne, "Q").Value = Ws.Cells(Ligne, "Q").Value & "" & .List(i)
        End If
    End If
    Next i
    End With
     End If

End Sub

J'ai aussi éliminer comme conseillé les calculs dans la BDD pour les intégrer aux useform, j'ai également supprimer la lecture des données qui se calcul automatiquement car effectivement c'était inutile.

Je n'ai pas d'erreur dans le code, mais au final en cliquant sur modifier et en acceptant, il ne met pas à jour les textbox.

Effectivement le bouton nouveau contact devrait être sur une page à part, mais pour moi comme je ne sais quels patients sont rentrés je gagne du temps à vérifier qu'il n'est pas dans ma base de donnée et le créer le cas échéant.

Je poste mon fichier au cas ou quelqu'un aurait le courage de regarder ça, à tête reposé, après une bonne bière de noël. De mon coté je vais continuer à chercher mes erreurs mais j'avoue que ça fait déjà 4h que je teste, re teste sans succès des modifications..

Mon intuition c'est qu'il y a un problème avec la fonction de modification et la mise à jour des différentes combobox et textbox... mais pas certain car au final pourquoi seules les textbox se mettent pas à jour ??... Du coup, je vais partir sur un fonction recherche via une textbox me permettant d'afficher les données trouvée et modifier ensuite via le bouton modifier.

Et ça n'a pas l'air d'être particulièrement aisé...

Je suis pas toubib (c'est le toubib qui me fait bosser la dessus), mes journées sont bien chargées mais je ne lâcherais rien avant d'avoir dompté ce fichier excel !!!!!!!

Merci encore pour ces conseils, je vais apprendre de mes erreurs et j'ai beaucoup avancé grâce à vous mais bon sang le VBA c'est compliqué !!

Encore 3h de plus...je découvre qu'il y a des textbox qui se mettent à jour mais pas les autres...donc je met toutes mes modification de code en commentaire via ' mais ça ne change rien...c'est à n'y rien comprendre...Au Final 3 textbox mettent à jour les chanps correspondant dans ma BDD quand je demande la modification la 1 ,la 2 et la 8 sachant que la 8 se calcul seule en fonction de la 8 (calcul de l'âge)...

92statboulot.zip (41.49 Ko)
Rechercher des sujets similaires à "useform remplir fichier"