Intégrer les données d'un userfor dans un fichier excel? [Résolu]

Signaler
Messages postés
55
Date d'inscription
samedi 19 mars 2005
Statut
Membre
Dernière intervention
19 octobre 2006
-
Messages postés
55
Date d'inscription
samedi 19 mars 2005
Statut
Membre
Dernière intervention
19 octobre 2006
-
Bonjour,

Je voudrais que les infos sélectionnés dans ces listes modifiables de mon Userform mettent à jour mon tableau excel, sachant que sur l'userform j'ai créé un bouton validation... On m'a parlé de TextBox.Text et Range ou Cells...Mais j'aurai besoin de plus de précision sur la manip a effectué svp.
J'ai aussi un champ (textbox) pour la date et un texbox pour saisir le nombre d'heures passé sur le chantier.

Mon userform et maintenant tout beau... Si sa peut vous aider à comprendre ce que je veux faire je peux vous envoyer une capture d'écran par mail.

21 réponses

Messages postés
3877
Date d'inscription
mardi 19 mars 2002
Statut
Membre
Dernière intervention
23 août 2018
18
Selon la méthode que tu utilises:

Si tu choisis la boucle, ce sera plus précis et normalement sans erreur, quoiqu'un peu plus lent pour les gros fichiers.

La boucle recherchera la première cellule vide, peu importe s'il y en a d'autres non vides plus bas.


Si tu choisis la formule

Ligne = Sheets("saisi feuille de temps").Columns("A:A").Find("*", Sheets("saisi feuille de temps").Range("A1"), , , xlByRows, xlPrevious).Row + 1
Il faut que tu effaces au préalable les données que tu as déjà entrées en bas, sinon, c'est là que seront copiées les suivantes.

Et une seule formule est nécessaire.

Ne pas oublier que la formule recherche la première ligne vide en bas de toutes les données inscrites de cette colonne.

MPi
Messages postés
3877
Date d'inscription
mardi 19 mars 2002
Statut
Membre
Dernière intervention
23 août 2018
18
C'est toi qui sais ce que tu veux faire avec ces données

Sur Click du bouton Valider

Sheets("NomDeFeuille").Range("A1") = textbox1 (ou textbox1.Text)
équivaut à

Sheets("NomDeFeuille").Cells(1,1) = textbox1


Il s'agit juste à savoir où tu veux inscrire ces données

Ligne = RechercheLaDernièreLigne

Sheets("NomDeFeuille").Range("A" & Ligne) = textbox1


Avec un peu plus d'explications, on pourrait rajouter un peu de crème

MPi
Messages postés
55
Date d'inscription
samedi 19 mars 2005
Statut
Membre
Dernière intervention
19 octobre 2006

Voici un peu plus de précisons:


Quand on a rempli mes diverses listes déroulantes(ComboBox1,2,et 3) et mes TextBox(1 et 2); il faut que quand j'appuie sur le bouton Validation(CommandButton3), que les infos saisie se positionnent dans les cases suivantes de ma feuille excel nommée "saisi feuille de temps":

-ComboBox1= dans la colonne A à partir de la ligne 9.
-TextBox2=dans la colonne C à partir de la ligne 9.
-ComboBox2=dans la colonne D à partir de la ligne 9
-ComboBox3=dans la colonne F à partir de la ligne 9
-TextBox1=dans la colonne H à partir de la ligne 9

Voilà... et tous celà sans que sa me supprime les anciennes saisies, cad qu'il faut que si la ligne 9 n'est pas vide qu'il aille sur la ligne suivantes et ansi de suite.

Cependant, la où est la difficultée(je pense...) c'est que mes Combox (liste déroulante) contiennent 2 colonnes(cf aide de Dolphin et Mpi);or dans mon fichier excel, par exemple, pour le ComboBox1, il faut uniquement les données de la première colonne de ma liste déroulante qui ailles dans ma colonne A ligne 9.....
Je sais pas si je me suis fais bien comprendre là...mais bon c'est pas grave si personne ne trouve comment résoudre ce problème je réduirai mes listes à une colonne.

Merci d'avance pour vos réponses!
Messages postés
55
Date d'inscription
samedi 19 mars 2005
Statut
Membre
Dernière intervention
19 octobre 2006

Je pense que dans un premier temps il faut que j'utilise ce que Mpi m'a indiué, cad:Sheets("NomDeFeuille").Range("A" & Ligne) = textbox1

Mais comment faire pour que sa commence a etre inséré à partir de la ligne 9? Dois faire comme ceci:Sheets("NomDeFeuille").Range("A9" & Ligne) = textbox1?
Messages postés
3877
Date d'inscription
mardi 19 mars 2002
Statut
Membre
Dernière intervention
23 août 2018
18
Pour un Combobox à plusieurs colonnes, il faut spécifier d'une part la
ligne sélectionnée (ici ComboboxX.ListIndex) et pour la colonne il faut
spécifier son Index (ici 0 pour la première colonne)


Private Sub CommandButton1_Click()

    Dim Ligne As Long

   

    On Error GoTo Erreur  ' au cas où la page serait vierge

   

    Ligne = Sheets("Feuil1").Cells.Find _

        ("*", Sheets("Feuil1").Range("A1"), , , xlByRows, xlPrevious).Row + 1

    If Ligne < 9 Then Ligne = 9

    Err.Clear

   

    Range("A" & Ligne) = ComboBox1.List(ComboBox1.ListIndex, 0)

    Range("C" & Ligne) = Textbox2.Text

    Range("D" & Ligne) = ComboBox2.List(ComboBox1.ListIndex, 0)

    Range("F" & Ligne) = ComboBox3.List(ComboBox1.ListIndex, 0)

    Range("H" & Ligne) = Textbox1.Text

   

    Exit Sub

Erreur:

    If Err.Number = 91 Then

        Ligne = 1

        Resume Next

    Else

        MsgBox Err.Description

    End If

End Sub

MPi
Messages postés
55
Date d'inscription
samedi 19 mars 2005
Statut
Membre
Dernière intervention
19 octobre 2006

Voilà j'ai mis le code de MPi en y insérant le nom de ma feuille excel comme ci-dessous:
rivate Sub CommandButton3_Click()
    Dim Ligne As Long
   
    On Error GoTo Erreur
   
    Ligne = Sheets("saisi feuille de temps").Cells.Find _
        ("*", Sheets("saisi feuille de temps").Range("A1"), , , xlByRows, xlPrevious).Row + 1
    If Ligne < 9 Then Ligne = 9
    Err.Clear
   
    Range("A" & Ligne) = ComboBox1.List(ComboBox1.ListIndex, 0)
    Range("C" & Ligne) = TextBox2.Text
    Range("D" & Ligne) = ComboBox2.List(ComboBox1.ListIndex, 0)
    Range("F" & Ligne) = ComboBox3.List(ComboBox1.ListIndex, 0)
    Range("H" & Ligne) = TextBox1.Text
   
    Exit Sub
Erreur:
    If Err.Number = 91 Then
        Ligne = 1
        Resume Next
    Else
        MsgBox Err.Description
    End If
End Sub

Cependant il semble qu'il y est un problème avec ma liste déroulante qui contient le code salarié...quand je lance l'userform et que je sélectionne le code voilà ce qui s'affiche:"Erreur d'execution 380.Impossible de définir la propriété RowSource.Valeur de propriété non valide."

Voici le code de la liste en question:

Private Sub ComboBox1_Change()



ComboBox1.RowSource = ("Base de donnée!D4:E66")



End Sub


Voilà si vous avez une petite idée....
Messages postés
55
Date d'inscription
samedi 19 mars 2005
Statut
Membre
Dernière intervention
19 octobre 2006

Au fait , j'ai tenté de réduire la liste en question sur colonne... mais toujours le m^me message d'erreur....
Messages postés
3877
Date d'inscription
mardi 19 mars 2002
Statut
Membre
Dernière intervention
23 août 2018
18
Mets cette ligne dans UserForm1_Initialize()
ComboBox1.RowSource = ("Base de donnée!D4:E66")


Et mets ta procédure Private Sub ComboBox1_Change() en commentaire


et refais un test pour voir...

MPi
Messages postés
55
Date d'inscription
samedi 19 mars 2005
Statut
Membre
Dernière intervention
19 octobre 2006

Mpi sa veut dire quoi mettre en commentaire? Et je n'ai pas de UserForm1_Initialize() mais juste un "Private Sub UserForm_Click()"...
Messages postés
55
Date d'inscription
samedi 19 mars 2005
Statut
Membre
Dernière intervention
19 octobre 2006

Voilà ce que j'ai fais:

Private Sub UserForm1_Initialize()



ComboBox1.RowSource = ("Base de donnée!D4:E66")



End Sub

Je n'ai plus de message d'erreur quand je selectionne les infos mais quand je clique sur le bouton validation les données ne sont pas transférées...Par contre excel ce positionne sur la ligne 9....
Messages postés
3877
Date d'inscription
mardi 19 mars 2002
Statut
Membre
Dernière intervention
23 août 2018
18
Ça devrait être écrit comme ça (avec les apostrophes)
ComboBox1.RowSource = "'Base de donnée'!D4:E66"


Mettre en commentaire veut dire de mettre une apostrophe en début de
ligne de code pour qu'elle ne soit pas lue par le programme/compilateur
comme si c'était un simple commentaire


Si tu cliques sur le bouton Valider et que rien ne s'écrit dans la
feuille, il faut t'assurer que tu avais bien écrit quelque chose dans
les textbox ou sélectionné un item du Combobox autrement je ne vois
pas... pour l'instant...

MPi
Messages postés
55
Date d'inscription
samedi 19 mars 2005
Statut
Membre
Dernière intervention
19 octobre 2006

Voilà en commentaire sa donne donsc celà:
Private Sub UserForm1_Initialize()



ComboBox1.RowSource = ("'Base de donnée'!D4:E66")



End Sub


J'ai bien des données selectionnées dans mes texBox (le chiffre 7 par exemple), et g selectionné sur chacune de mes listes modifiables...mais rien ne se passe après avoir cliquer sur mon bouton validation...
Messages postés
3877
Date d'inscription
mardi 19 mars 2002
Statut
Membre
Dernière intervention
23 août 2018
18
Salut,


Comme j'ai pu voir ton fichier, il m'a été plus facile de trouver le problème....


Les différentes méthodes pour trouver la dernière ligne écrite ou la
première ligne vide sont utiles dans les cas où il n'y a pas de
formules ou autre sur les lignes qu'on veut remplir. Pour être plus
clair, regarde les lignes 107 et suivantes. C'est là que tes données de
test ont été inscrites parce qu'il y a des formules dans certaines
colonnes (B, E, G)


Private Sub CommandButton3_Click()

    Dim I As Long, Ligne As Long

   

    On Error GoTo Erreur

   

'On peut soit boucler

    For I = 9 To 60000  'on peut bien sûr modifier le 60000...

        If Range("A" & I) = ""
Then  ' considérant que A sera toujours rempli à la validation

            Ligne = I

            Exit For

        End If

    Next

'ou forcer la recherche de ligne vide dans une colonne particulière, vraiment vide...

'Changer les 3 A si on veut rechercher une autre colonne

'Ligne = Sheets("saisi feuille de temps").Columns("A:A").Find("*", Sheets("saisi feuille de temps").Range("A1"), , , xlByRows, xlPrevious).Row + 1

   

    Range("A" & Ligne) = ComboBox1.List(ComboBox1.ListIndex, 0)

    Range("C" & Ligne) = TextBox2.Text

    Range("D" & Ligne) = ComboBox2.List(ComboBox2.ListIndex, 0)

    Range("F" & Ligne) = ComboBox3.List(ComboBox3.ListIndex, 0)

    Range("H" & Ligne) = TextBox1.Text

   

    Exit Sub

Erreur:

        MsgBox Err.Number & vbCrLf & Err.Description

End Sub

Bonne chance pour le reste...
MPi
Messages postés
3877
Date d'inscription
mardi 19 mars 2002
Statut
Membre
Dernière intervention
23 août 2018
18
Et j'oubliais...

J'ai modifié mon code (mauvais copier/coller...)

    Range("A" & Ligne) = ComboBox1.List(ComboBox1.ListIndex, 0)

    Range("C" & Ligne) = TextBox2.Text

    Range("D" & Ligne) = ComboBox2.List(ComboBox2.ListIndex, 0)

    Range("F" & Ligne) = ComboBox3.List(ComboBox3.ListIndex, 0)

    Range("H" & Ligne) = TextBox1.Text

MPi
Messages postés
55
Date d'inscription
samedi 19 mars 2005
Statut
Membre
Dernière intervention
19 octobre 2006

Merci j'aurai jamais pensez à aller voir en bas!

j'ai mis ton nouveau code mais sa ne change rien les données vont toujours en bas.... D'après ce que tu me dis je ne peut pasavoir recours a des formules( de simples rechercheV...)?

N'y aurait il pas un autre moyen...?
Messages postés
55
Date d'inscription
samedi 19 mars 2005
Statut
Membre
Dernière intervention
19 octobre 2006

En plus les colonnes où il y a des formules , ce ne sont pas elles qui sont intégrer depuis mon userform... Ou alors si g bien compris ce que tu m'explique,il faut que je reprenne cet partie de ton code pour chacunes des colonnes que je veux renseigner? C'est à dire:
Ligne = Sheets("saisi feuille de temps").Columns("A:A").Find("*", Sheets("saisi feuille de temps").Range("A1"), , , xlByRows, xlPrevious).Row + 1
'Ligne = Sheets("saisi feuille de temps").Columns("c:c").Find("*", Sheets("saisi feuille de temps").Range("c1"), , , xlByRows, xlPrevious).Row + 1
'Ligne = Sheets("saisi feuille de temps").Columns("d:d").Find("*", Sheets("saisi feuille de temps").Range("d1"), , , xlByRows, xlPrevious).Row + 1
'Ligne = Sheets("saisi feuille de temps").Columns("f:f").Find("*", Sheets("saisi feuille de temps").Range("f1"), , , xlByRows, xlPrevious).Row + 1

etc...

Mais là je croisque je dis une bétise vu que j'ai aussi deux texbox à renseigner...
Messages postés
55
Date d'inscription
samedi 19 mars 2005
Statut
Membre
Dernière intervention
19 octobre 2006

Mille merci Mpi t'es trop fort!

Bon comme tu as vu mon fichier tu sais que je n'ai pas fini, mais je vais ouvrir un nouveau sujet...Si tu peux continuer à m'aider... Merci.
Messages postés
55
Date d'inscription
samedi 19 mars 2005
Statut
Membre
Dernière intervention
19 octobre 2006

Au fait Mpi mon nouveau sujet et dans la rubrique VBnet et VB5 section débutant ....
Messages postés
3877
Date d'inscription
mardi 19 mars 2002
Statut
Membre
Dernière intervention
23 août 2018
18
Salut, si tu postes dans VB ou VBA, je verrai si je peux t'aider. Je ne visite pas toutes les rubriques.

Si tu postes dans VB Net ou 2005, aucune chance que j'y sois pour l'instant...

MPi
Messages postés
55
Date d'inscription
samedi 19 mars 2005
Statut
Membre
Dernière intervention
19 octobre 2006

Ok je vais essayé de transférer le sujet si c possible je me suis juste trompé de ctégorie....