XL 2016 Modification de données sur 2 feuilles différentes via UserForm

Boostez vos compétences Excel avec notre communauté !

Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force. Apprenez, échangez, progressez – et tout ça gratuitement ! 👉 Inscrivez-vous maintenant !

tontonboulii

XLDnaute Nouveau
Bonjour,

Je cherche à pouvoir modifier mes données via un Userform (USF_SAISIE) sur 2 feuilles différentes. Pour saisir dans ces 2 feuilles, j'utilise le code suivant qui va saisir dans une feuille appelée "Tous_les_décès" et l'autre en fonction de la valeur de ma ComboBox... Jusque là, tout va bien 🙂

VB:
Private Sub btn_enregistrer_Click() 'Bouton enregistrer USF_SAISIE

'################################
'### DEBUT CHAMPS OBLIGATOIRE ###
If Me.txt_nom.Value = Empty Then
    s = MsgBox("Le champ : " & Label2 & " est obligatoire", vbCritical, "Erreur de saisie")
    Me.txt_nom.SetFocus
    Exit Sub
End If

If Me.txt_prenom.Value = Empty Then
    s = MsgBox("Le champ : " & Label3 & " est obligatoire", vbCritical, "Erreur de saisie")
    Me.txt_prenom.SetFocus
    Exit Sub
End If

If Me.txt_naissance.Value = Empty Then
    s = MsgBox("Le champ : " & Label4 & " est obligatoire", vbCritical, "Erreur de saisie")
    Me.txt_naissance.SetFocus
    Exit Sub
End If

If Me.Cbo_services.Value = Empty Then
    s = MsgBox("Le champ : " & Label5 & " est obligatoire", vbCritical, "Erreur de saisie")
    Me.Cbo_services.SetFocus
    Exit Sub
End If

If Me.txt_deces.Value = Empty Then
    s = MsgBox("Le champ : " & Label6 & " est obligatoire", vbCritical, "Erreur de saisie")
    Me.txt_deces.SetFocus
    Exit Sub
End If

If Me.txt_hdeces.Value = Empty Then
    s = MsgBox("Le champ : " & Label7 & " est obligatoire", vbCritical, "Erreur de saisie")
    Me.txt_hdeces.SetFocus
    Exit Sub
End If

If Me.Cbo_precaution.Value = Empty Then
    s = MsgBox("Le champ : " & Label8 & " est obligatoire", vbCritical, "Erreur de saisie")
    Me.Cbo_precaution.SetFocus
    Exit Sub
End If

If Me.Cbo_pacemaker.Value = Empty Then
    s = MsgBox("Le champ : " & Label9 & " est obligatoire", vbCritical, "Erreur de saisie")
    Me.Cbo_pacemaker.SetFocus
    Exit Sub
End If

If Me.Cbo_bracelet.Value = Empty Then
    s = MsgBox("Le champ : " & Label10 & " est obligatoire", vbCritical, "Erreur de saisie")
    Me.Cbo_bracelet.SetFocus
    Exit Sub
End If

'#### FIN CHAMPS OBLIGATOIRE ####
'################################
'-------------------------------------------------------------------
'###################################
'### DEBUT SAISIE TOUS_LES_DECES ###

Dim L As Integer 'Concerne la feuille Tous_les_deces
Dim C As Integer 'Concerne les feuilles SERVICES en fonction de la combobox

 If MsgBox("Confirmer l'enregistrement d'un nouveau décès ?", vbYesNo, "Demande de confirmation d'ajout") = vbYes Then
     L = Sheets("Tous_les_deces").Range("B65536").End(xlUp).Row + 1 'Pour placer le nouvel enregistrement à la première ligne de tableau non vide

        Range("B" & L).Value = IIf(Me.option_madame = True, "Madame", "Monsieur")
        Range("C" & L).Value = txt_nom
        Range("D" & L).Value = txt_prenom
        Range("E" & L).Value = txt_naissance
        Range("G" & L).Value = Cbo_services
        Range("H" & L).Value = txt_deces
        Range("I" & L).Value = txt_hdeces
        Range("J" & L).Value = Cbo_precaution
        Range("K" & L).Value = Cbo_pacemaker
        Range("L" & L).Value = Cbo_bracelet
        Range("M" & L).Value = txt_famille
        Range("N" & L).Value = txt_effet
        Range("O" & L).Value = txt_autre
        Range("P" & L).Value = Cbo_pf

        If USF_PATIENT.option_DSB.Value = True Then 'Sélectionne le bon optionbutton à l'affichage pour DSB & MB
                Range("Q" & L).Value = "DSB"
        End If
        If USF_PATIENT.option_MB.Value = True Then
                Range("Q" & L).Value = "MB"
        End If

        Range("R" & L).Value = txt_depart
        Range("U" & L).Value = txt_hdepart
        Range("V" & L).Value = Cbo_presentation
        Range("W" & L).Value = Cbo_sepulture
        Range("X" & L).Value = txt_lieu

'#### FIN SAISIE TOUS_LES_DECES ####
'###################################
'-----------------------------------------------------------------
'#############################
'### DEBUT SAISIE SERVICES ###

    C = Sheets(Cbo_services.Text).Range("B65536").End(xlUp).Row + 1

        Sheets(Cbo_services.Text).Range("B" & C).Value = IIf(Me.option_madame = True, "Madame", "Monsieur")
        Sheets(Cbo_services.Text).Range("C" & C).Value = txt_nom
        Sheets(Cbo_services.Text).Range("D" & C).Value = txt_prenom
        Sheets(Cbo_services.Text).Range("E" & C).Value = txt_naissance
        Sheets(Cbo_services.Text).Range("G" & C).Value = Cbo_services
        Sheets(Cbo_services.Text).Range("H" & C).Value = txt_deces
        Sheets(Cbo_services.Text).Range("I" & C).Value = txt_hdeces
        Sheets(Cbo_services.Text).Range("J" & C).Value = Cbo_precaution
        Sheets(Cbo_services.Text).Range("K" & C).Value = Cbo_pacemaker
        Sheets(Cbo_services.Text).Range("L" & C).Value = Cbo_bracelet
        Sheets(Cbo_services.Text).Range("M" & C).Value = txt_famille
        Sheets(Cbo_services.Text).Range("N" & C).Value = txt_effet
        Sheets(Cbo_services.Text).Range("O" & C).Value = txt_autre
        Sheets(Cbo_services.Text).Range("P" & C).Value = Cbo_pf

        If USF_PATIENT.option_DSB.Value = True Then 'Sélectionne le bon optionbutton à l'affichage pour DSB & MB
            Sheets(Cbo_services.Text).Range("Q" & C).Value = "DSB"
        End If
        If USF_PATIENT.option_MB.Value = True Then
            Sheets(Cbo_services.Text).Range("Q" & C).Value = "MB"
        End If

     Sheets(Cbo_services.Text).Range("R" & C).Value = txt_depart
     Sheets(Cbo_services.Text).Range("U" & C).Value = txt_hdepart
     Sheets(Cbo_services.Text).Range("V" & C).Value = Cbo_presentation
     Sheets(Cbo_services.Text).Range("W" & C).Value = Cbo_sepulture
     Sheets(Cbo_services.Text).Range("X" & C).Value = txt_lieu

MsgBox ("Le décès de ") & txt_nom & " " & txt_prenom & "" & (" a été enregistré avec succès !")

'### FIN SAISIE SERVICES ###
'###########################
 End If

    'Unload Me
End Sub

Donc ensuite, lorsque je suis sur ma page "Tous_les_deces", j'affiche les infos dans un autre UserForm (USF_PATIENT) en double cliquant sur la ligne que je souhaites consulter avec le code suivant (dans ma page Tous_les_deces) : Jusque là, tout va bien aussi 🙂

VB:
Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean) 'Pour afficher les infos décès par double clique
i = ActiveCell.Row

        If Cells(i, 2).Value = "Monsieur" Then 'Sélectionne le bon optionbutton à l'affichage pour MR & MME
        USF_PATIENT.Option_MR.Value = True
        End If
        If Cells(i, 2).Value = "Madame" Then
        USF_PATIENT.Option_MME.Value = True
        End If

    USF_PATIENT.txt_nom = Cells(i, 3)
    USF_PATIENT.txt_prenom = Cells(i, 4)
    USF_PATIENT.txt_naissance = Cells(i, 5)
    USF_PATIENT.txt_age = Cells(i, 6)
    USF_PATIENT.Cbo_services = Cells(i, 7)
    USF_PATIENT.txt_deces = Cells(i, 8)
    USF_PATIENT.txt_hdeces = Cells(i, 9)
    USF_PATIENT.Cbo_precaution = Cells(i, 10)
    USF_PATIENT.Cbo_pacemaker = Cells(i, 11)
    USF_PATIENT.Cbo_bracelet = Cells(i, 12)
    USF_PATIENT.txt_famille = Cells(i, 13)
    USF_PATIENT.txt_effet = Cells(i, 14)
    USF_PATIENT.txt_autre = Cells(i, 15)
    USF_PATIENT.Cbo_pf = Cells(i, 16)

        If Cells(i, 17).Value = "DSB" Then 'Sélectionne le bon optionbutton à l'affichage pour DSB & MB
        USF_PATIENT.option_DSB.Value = True
        End If
        If Cells(i, 17).Value = "MB" Then
        USF_PATIENT.option_MB.Value = True
        End If

    USF_PATIENT.txt_depart = Cells(i, 18)
    USF_PATIENT.txt_hdepart = Cells(i, 21)
    USF_PATIENT.Cbo_presentation = Cells(i, 22)
    USF_PATIENT.Cbo_sepulture = Cells(i, 23)
    USF_PATIENT.txt_lieu = Cells(i, 24)

USF_PATIENT.Caption = "Fiche décès - " & Cells(i, 3) & " " & Cells(i, 4) 'Ajoute le NOM et prénom du défunt dans la Caption de l'UserForm

USF_PATIENT.Show
End Sub

En utilisant cette méthode d'affichage via double clique, j'arrive à modifier mes données sur la page "Tous_les_deces" en utilisant le code suivant :

VB:
Private Sub btn_modifier_Click() 'bouton modifier : Sert à insérer les TextBox qui ont été modifiées
    If MsgBox("Voulez-vous mettre à jour la fiche décès ?", vbYesNo, "Mise à jour fiche décès ?") = vbYes Then

    i = ActiveCell.Row

    Cells(i, 2) = IIf(Me.Option_MME = True, "Madame", "Monsieur")
    Cells(i, 3) = txt_nom.Value
    Cells(i, 4) = txt_prenom.Value
    Cells(i, 5) = txt_naissance.Value
    Cells(i, 6) = txt_age.Value
    Cells(i, 7) = Cbo_services.Value
    Cells(i, 8) = txt_deces.Value
    Cells(i, 9) = txt_hdeces.Value
    Cells(i, 10) = Cbo_precaution.Value
    Cells(i, 11) = Cbo_pacemaker.Value
    Cells(i, 12) = Cbo_bracelet.Value
    Cells(i, 13) = txt_famille.Value
    Cells(i, 14) = txt_effet.Value
    Cells(i, 15) = txt_autre.Value
    Cells(i, 16) = Cbo_pf.Value

    If USF_PATIENT.option_DSB.Value = True Then 'Sélectionne le bon optionbutton à l'affichage pour DSB & MB
        Cells(i, 17) = "DSB"
    End If
    If USF_PATIENT.option_MB.Value = True Then
        Cells(i, 17) = "MB"
    End If

    Cells(i, 18) = txt_depart.Value
    Cells(i, 19) = txt_hdepart.Value
    Cells(i, 20) = Cbo_presentation.Value
    Cells(i, 21) = Cbo_sepulture.Value
    Cells(i, 22) = txt_lieu.Value

    MsgBox ("La fiche décès de ") & txt_nom & " " & txt_prenom & " " & ("a été mise à jour avec succès !")
End If
    Unload Me
End Sub

Et c'est là que tout ce complique ... Je souhaite pouvoir modifier mes données dans la feuille "Tous_les_deces" (ça c'est bon avec le code ci-dessus)et dans la feuille du service au NOM de la bonne personne. La feuille du service dans l'UserForm d'affichage (USF_PATIENT) apparaît dans ma ComboBox nommée "Cbo_services". Donc il faudrait que mes données se modifient dans la page "Tous_les_deces" ET dans la page du service au bon Nom de patient...

Un grand MERCI d'avance à ceux qui prendront le temps de lire ceci et de m'aider. Je suis assez novice en VBA.

Bien à vous
 
Bonjour tontonboulii
Il faut savoir que lorsque tu mets
Cells(1,1) sans indication de la feuille cible. tu traites la cellule de la feuille active .
Il faut
Ex :Sheets(1) ou Worksheets(Nomdelafeuille)
Sheets(1).Cells(1,1) premier cellule de la feuille 1
Worksheets("Nomdelafeuille).Cells(1,1)
Première cellule de la feuille "Nomdelafeuille"
Édit: Idem pour le Range
il faut indiquer la feuille Cible
Worksheets("Tous_les_deces").Range("B" & L)
A voir donc
Bonne journée
Jean marie
 
Dernière édition:
Bonjour tontonboulii
Il faut savoir que lorsque tu mets
Cells(1,1) sans indication de la feuille cible. tu traites la cellule de la feuille active .
Il faut
Ex :Sheets(1) ou Worksheets(Nomdelafeuille)
Sheets(1).Cells(1,1) premier cellule de la feuille 1
Worksheets("Nomdelafeuille).Cells(1,1)
Première cellule de la feuille "Nomdelafeuille"
Édit: Idem pour le Range
il faut indiquer la feuille Cible
Worksheets("Tous_les_deces").Range("B" & L)
A voir donc
Bonne journée
Jean marie
Bonjour ChTi160,

J'avais bien compris qu'il fallait cibler la bonne feuille mais ce que je cherche à faire c'est de cibler le bon patient pour ne pas que ça aille modifier le mauvais patient.
 
Bonjour
Et si tu postais un fichier, cela nous aiderai à t'aider, et à te proposer des codes correspondant à ta demande.
Bonjour JM27,

Au vu des noms de mes TextBox et de mes pages, il s'agit d'un fichier sensible et surtout confidentiel 😳 c'est pourquoi j'ai mis l'intégralité des codes utilisés.
En gros, je souhaite qu'à partir du dernier code que j'ai mis, que ça modifie mes données dans ma page "Tous_les_deces" & dans ma page du service en mettant le bon patient "à jour".

En te remerciant,
 
Bonsoir à tous et toutes
toujours pas d'ordi
Mais anonymiser c'est enlever toute données confidentiel des bases de données .
Ensuite que les noms des control soient eux aussi confidentiels alors la faut les renommer lol est ce que cela aide l'importance ?
Quelques lignes suffisent et un exemple de ce que tu as et ce que tu veux.
Jean marie
 
Bonsoir
pour anonymiser ton fichier tu remplaces les noms par , toto , titi, tutu , etc ;tu remplaces les prénoms par A , B C et tu mets des dates de naissance bidon ( au format date toutefois) et ainsi de suite .
Pour les services : machin , bidule , truc , etc .
quelques lignes suffisent.
comme cela pas de pb , a mon avis
et la on pourra t'aider ! 😉

lors de la modification:
pour ma part : tu as le nom du service du patient ( donc de la feuille ? : supposition !!!)
il ne te reste plus qu'a trouver la ligne du patient à modifier : donc une petite application.match te donneras la ligne. il ne te resteras plus qu'a transférer les données dans cette feuille.
Mais tout cela n'est que supposition , c'est bien pour cela que l'on te demande un fichier exemple pour mieux t'aider.
 
Dernière édition:
En arrivant sur le fichier, il y a une erreur VBA, il ne faut pas y tenir compte. Ensuite le bouton de saisie se trouve dans la page "Tous_les_deces". Ca saisie dans l'onglet "Tous_les_deces" ET dans l'onglet correspondant au nom du service ... Ensuite, pour voir ce qui a été saisie, dans la page "Tous_les_deces" doublie cliquer sur la ligne que vous souhaitez modifier ...

Merci encore
 
- Navigue sans publicité
- Accède à Cléa, notre assistante IA experte Excel... et pas que...
- Profite de fonctionnalités exclusives
Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel.
Je deviens Supporter XLD

Discussions similaires

Réponses
4
Affichages
355
  • Question Question
Microsoft 365 Export données
Réponses
4
Affichages
497
Réponses
2
Affichages
392
Réponses
2
Affichages
123
Réponses
3
Affichages
586
Retour