Rappeler donnees Excel dans userform

Bonjour,

Je suis novice en VBA. J'ai créé un formulaire dans excel (userform). L'utilisation de ce formulaire sera effectuée par deux personnes distinctes. La première renseigne les textbox de 1 à 4. L'autre le reste des textbox. Je souhaiterai donc pouvoir rappeler dans le formulaire les données saisies par la première personne et ainsi pouvoir le compléter. Je vous transmets le fichier. Merci pour votre aide.

32classeur2.xlsm (20.92 Ko)

Bonjour et bienvenue sur le forum

Un essai. Te convient-il ?

68classeur2.xlsm (35.38 Ko)

Bonjour et merci d'avoir pris le temps de t'intéresser à mon problème. Grâce à ton travail, je progresse sur ce formulaire. Cependant, j'ai encore quelques demandes :

1- Je souhaiterai qu'à l'ouverture de l'userform qu'il n'existe aucune donnée. En effet, la première personne qu'il l'ouvre devra le renseigner et donc utiliser les premières texbox (1 à 4) qui doivent être "à blanc".

2- J'ai essayé de rappeler la facture n° 12612 ; cela fonctionne ; je renseigne les textbox de 5 à 16, c'est ok. Puis j'appelle la facture 15678 et là pour le coup les données des textbox 5 à 16 ne se mettent pas à blanc, c'est les données précédentes correspondant à la facture 12612 qui s'affichent. Peux-t-on remédier à ce problème ?

3-Dernière remarque : si je rappelle un numéro de facture et que je ne renseigne pas les textbox de 5 à 16 mais que je valide, la ligne va s'écrire une deuxième fois sur la feuille xls ce qui fait doublon. As-tu une solution ?

Et dernière question : Penses-tu qu'il soit plus judicieux de dissocier la saisie des deux personnes en réalisant par exemple deux userform - 1 pour la première partie et le 2ème qui rappelerai les données du premier afin de les compléter ?

Merci encore pour ton aide.

Bonjour

Voilà pour tes 3 demandes. A tester.

Quant à ta question :

Penses-tu qu'il soit plus judicieux de dissocier la saisie des deux personnes en réalisant par exemple deux userform - 1 pour la première partie et le 2ème qui rappelerai les données du premier afin de les compléter ?

tu es beaucoup mieux placé que moi pour répondre…

46classeur3.xlsm (37.71 Ko)

Bonjour,

J'ai avancé sur mon projet. Par contre, je viens de créer un bouton de commande "quitter" et en plus désactiver l'utilisation de la croix rouge en haut à droite du userform pour fermer le fichier. Du coup, je n'ai plus du tout accès aux feuilles xls du classeur et au code VBA pour continuer à avancer. HELP ! Je suis coincé !

13classeur3.xlsm (34.77 Ko)

Bonjour

Voilà :

45classeur4.xlsm (33.38 Ko)

Merci encore une fois à toi gmb ! Peux-tu m'expliquer par quel moyen tu as réussi à reprendre la main (pour ma culture perso). Merci encore.

Peux-tu m'expliquer par quel moyen tu as réussi à reprendre la main

Quand tu ouvres le fichier, tu gardes la touche "Maj" enfoncée et les macros à l'ouverture ne s'exécutent pas !

Bye !

Bonsoir,

J'ai fait évoluer mon projet. Maintenant je bloque sur un problème : je souhaite que le userform s'ouvre sur la feuil1 (jusque là ça va) mais pour le coup quand il s'ouvre sur la feuil1 et que je veux rappeler les données dans le userform (textbox cbb_factures) les données ne remontent pas dans les 4 premières textbox alors que cela fonctionne très bien si le userform s'ouvre sur la feuil2 ! Avez vous une solution à me proposer ? Merci pour votre aide.

58classeur5.xlsm (38.46 Ko)

Bonjour

Il suffit de mettre un point devant range :

Private Sub Cbb_Factures_Change()

    With Worksheets("Feuil2")

            Set cell = .Range("C2:C" & DerLn).Find(Cbb_Factures, lookat:=xlWhole)

OK ?

Bye !

Merci. Je viens d'essayer le userform en ayant mis le . comme indiqué. Le userform s'ouvre donc sur la feuille1, les données remontent mais quand je renseigne et valide ces données, elles ne s'inscrivent pas sur la feuille2 ?

Bonjour

Tu écris :

les données remontent mais quand je renseigne et valide ces données, elles ne s'inscrivent pas sur la feuille2 ?

Pour l'écriture aussi, il faut ajouter un point :

Private Sub Cmd_Valider_Click()

    If Cbb_Factures = TextBox3 Then
        Flag = 1
    Else
        Flag = 0
    End If
    With Worksheets("Feuil2")
        If TextBox5 = "" And TextBox6 = "" And TextBox7 = "" And TextBox8 = "" And TextBox9 = "" _
        And TextBox10 = "" And TextBox11 = "" And TextBox12 = "" And TextBox13 = "" And TextBox14 = "" _
        And TextBox15 = "" And TextBox16 = "" And TextBox17 = "" Then

            If TextBox1 = "" Or TextBox2 = "" Or TextBox3 = "" Or TextBox4 = "" Then
                MsgBox "Saisie incomplète." & Chr(13) & _
                        "Vous devez saisir la date , le fournisseur la facture et le montant HT.", 17
                Exit Sub
            End If

            'On vérifie que la facture n'existe pas dèjà sur la feuille
            Set cell = .Range("C2:C" & .Range("C1").End(xlDown).Row).Find(TextBox3, lookat:=xlWhole)
            If Not cell Is Nothing Then
                MsgBox "     La facture " & TextBox3 & " a déjà été prise en compte.", 17
                Exit Sub
            End If

            Ln = .Range("A" & Rows.Count).End(xlUp)(2).Row
            For i = 1 To 4
                .Cells(Ln, i).Value = Controls("TextBox" & i)
            Next i
        Else
            Set cell =.Range("C2:C" & DerLn).Find(Cbb_Factures, lookat:=xlWhole)

OK ?

Bye !

Et oui, c'était évident ! Merci. Par contre, je souhaiterai savoir pour quelle raison lorsque je renseigne les textbox 2, 3 et 4 puis "validez" les champs ne se mettent pas à "blanc" pour renseigner la prochaine facture. Il faut réécrire pour cela réécrire sur la première facture renseignée. As-tu une idée ?

Tu écris :

je souhaiterai savoir pour quelle raison lorsque je renseigne les textbox 2, 3 et 4 puis "validez" les champs ne se mettent pas à "blanc" pour renseigner la prochaine facture

Réponse :

Parce qu'on n'a pas demandé à la macro de le faire.

Il faut 2 instructions supplémentaires :

Private Sub Cmd_Valider_Click()

    If Cbb_Factures = TextBox3 Then
        Flag = 1
    Else
        Flag = 0
    End If
    With Worksheets("Feuil2")
        If TextBox5 = "" And TextBox6 = "" And TextBox7 = "" And TextBox8 = "" And TextBox9 = "" _
        And TextBox10 = "" And TextBox11 = "" And TextBox12 = "" And TextBox13 = "" And TextBox14 = "" _
        And TextBox15 = "" And TextBox16 = "" And TextBox17 = "" Then

            If TextBox1 = "" Or TextBox2 = "" Or TextBox3 = "" Or TextBox4 = "" Then
                MsgBox "Saisie incomplète." & Chr(13) & _
                        "Vous devez saisir la date , le fournisseur la facture et le montant HT.", 17
                Exit Sub
            End If

            'On vérifie que la facture n'existe pas dèjà sur la feuille
            Set cell = .Range("C2:C" & .Range("C1").End(xlDown).Row).Find(TextBox3, lookat:=xlWhole)
            If Not cell Is Nothing Then
                MsgBox "     La facture " & TextBox3 & " a déjà été prise en compte.", 17
                Exit Sub
            End If
            Ln = .Range("A" & Rows.Count).End(xlUp)(2).Row
            For i = 1 To 4
                .Cells(Ln, i).Value = Controls("TextBox" & i)
            Next i
            TextBox2 = ""
            TextBox1.Text = CStr(Date)

OK ?

Bye !

14classeur6.xlsm (42.65 Ko)

Merci encore à gmb. Pour terminer, je souhaiterai que la feuille2 soit copiée et enregistrée dans un nouveau classeur à chaque fois que l'on quitte l'appli. Les enregistrements au quotidien de cette feuille viendrait écraser la précédente. Est-ce possible ?

Bonjour

Tu écris :

je souhaiterai que la feuille2 soit copiée et enregistrée dans un nouveau classeur à chaque fois que l'on quitte l'appli.

Cela, c'est possible.

Les enregistrements au quotidien de cette feuille viendrait écraser la précédente.

Là, il faut mieux m'expliquer je ne suis pas sûr de comprendre ce que tu souhaites.

A te relire.

La feuille2 est alimentée au quotidien. Elle sera copier et enregistrer dans un autre classeur défini à chaque fois qu'un clik sera effectué avec la cmd_quitter. Je ne souhaite pas dans ce classeur conserver l'historique des ajouts mais juste une mise à jour (c'est pourquoi je disais que chaque enregistrement viendrait écraser le précédent). Le but est de laisser à disposition ce classeur en lecture pour consultation sans pour autant venir solliciter le formulaire. Ce nouveau classeur doit être le reflet des données entrées dans le formulaire (mise à jour effectuée au moment au l'on quitte l'appli). Voilà, j'espère t'avoir apporté des précisions sur la demande et encore merci pour ton implication.

Bonjour

Un nouvel essai.

Te convient-il ?

27classeur7.xlsm (47.74 Ko)

Merci pour ton implication. En fait, ce que je veux, c'est juste une copie de la feuil2 dans un classeur qui sera nommé par exemple classeur10. Je souhaite vraiment que l'ensemble des données restent inscrites sur la feuil2. Je veux juste au moment où l'utilisateur click sur la cmd quitter une copie de la feuil2 vers le classeur10 et tout ça non visible pour l'utilisateur. C'est tjrs possible ?

Je viens de faire un essai avec ce code :

Private Sub Cmd_quitter_Click()

Dim wkDest As Workbook

Set wkDest = Application.Workbooks.Open("C:\Nouveau dossier\Classeur10.xlsx")

ThisWorkbook.Sheets("Feuil2").Cells.Copy wkDest.Sheets("Feuil1").Range("A1")

wkDest.Close True

Unload UserForm1

ThisWorkbook.Close SaveChanges:=True

End Sub

Cela fonctionne. Mais j'ai encore une question :

SI le classeur10 est ouvert par un utilisateur (lecture) et que en même temps un autre utilisateur click sur la cmd quitter du formulaire, l'appli va planter ?

Rechercher des sujets similaires à "rappeler donnees userform"