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

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
 

ChTi160

XLDnaute Barbatruc
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:

tontonboulii

XLDnaute Nouveau
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.
 

tontonboulii

XLDnaute Nouveau
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 :oops: 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,
 

ChTi160

XLDnaute Barbatruc
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
 

JM27

XLDnaute Barbatruc
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:

tontonboulii

XLDnaute Nouveau
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
 

Statistiques des forums

Discussions
311 711
Messages
2 081 783
Membres
101 817
dernier inscrit
carvajal