Intégrer les données d'un userfor dans un fichier excel?

Résolu
arthur0201 Messages postés 55 Date d'inscription samedi 19 mars 2005 Statut Membre Dernière intervention 19 octobre 2006 - 26 sept. 2006 à 20:24
arthur0201 Messages postés 55 Date d'inscription samedi 19 mars 2005 Statut Membre Dernière intervention 19 octobre 2006 - 30 sept. 2006 à 20:15
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

cs_MPi Messages postés 3877 Date d'inscription mardi 19 mars 2002 Statut Membre Dernière intervention 23 août 2018 21
30 sept. 2006 à 18:13
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
3
cs_MPi Messages postés 3877 Date d'inscription mardi 19 mars 2002 Statut Membre Dernière intervention 23 août 2018 21
27 sept. 2006 à 00:37
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
0
arthur0201 Messages postés 55 Date d'inscription samedi 19 mars 2005 Statut Membre Dernière intervention 19 octobre 2006
27 sept. 2006 à 18:50
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!
0
arthur0201 Messages postés 55 Date d'inscription samedi 19 mars 2005 Statut Membre Dernière intervention 19 octobre 2006
27 sept. 2006 à 22:19
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?
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
cs_MPi Messages postés 3877 Date d'inscription mardi 19 mars 2002 Statut Membre Dernière intervention 23 août 2018 21
28 sept. 2006 à 00:54
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
0
arthur0201 Messages postés 55 Date d'inscription samedi 19 mars 2005 Statut Membre Dernière intervention 19 octobre 2006
28 sept. 2006 à 18:31
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....
0
arthur0201 Messages postés 55 Date d'inscription samedi 19 mars 2005 Statut Membre Dernière intervention 19 octobre 2006
28 sept. 2006 à 18:34
Au fait , j'ai tenté de réduire la liste en question sur colonne... mais toujours le m^me message d'erreur....
0
cs_MPi Messages postés 3877 Date d'inscription mardi 19 mars 2002 Statut Membre Dernière intervention 23 août 2018 21
28 sept. 2006 à 23:56
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
0
arthur0201 Messages postés 55 Date d'inscription samedi 19 mars 2005 Statut Membre Dernière intervention 19 octobre 2006
29 sept. 2006 à 18:24
Mpi sa veut dire quoi mettre en commentaire? Et je n'ai pas de UserForm1_Initialize() mais juste un "Private Sub UserForm_Click()"...
0
arthur0201 Messages postés 55 Date d'inscription samedi 19 mars 2005 Statut Membre Dernière intervention 19 octobre 2006
29 sept. 2006 à 18:35
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....
0
cs_MPi Messages postés 3877 Date d'inscription mardi 19 mars 2002 Statut Membre Dernière intervention 23 août 2018 21
29 sept. 2006 à 23:33
Ç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
0
arthur0201 Messages postés 55 Date d'inscription samedi 19 mars 2005 Statut Membre Dernière intervention 19 octobre 2006
29 sept. 2006 à 23:48
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...
0
cs_MPi Messages postés 3877 Date d'inscription mardi 19 mars 2002 Statut Membre Dernière intervention 23 août 2018 21
30 sept. 2006 à 15:54
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
0
cs_MPi Messages postés 3877 Date d'inscription mardi 19 mars 2002 Statut Membre Dernière intervention 23 août 2018 21
30 sept. 2006 à 15:56
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
0
arthur0201 Messages postés 55 Date d'inscription samedi 19 mars 2005 Statut Membre Dernière intervention 19 octobre 2006
30 sept. 2006 à 17:14
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...?
0
arthur0201 Messages postés 55 Date d'inscription samedi 19 mars 2005 Statut Membre Dernière intervention 19 octobre 2006
30 sept. 2006 à 17:22
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...
0
arthur0201 Messages postés 55 Date d'inscription samedi 19 mars 2005 Statut Membre Dernière intervention 19 octobre 2006
30 sept. 2006 à 19:21
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.
0
arthur0201 Messages postés 55 Date d'inscription samedi 19 mars 2005 Statut Membre Dernière intervention 19 octobre 2006
30 sept. 2006 à 19:33
Au fait Mpi mon nouveau sujet et dans la rubrique VBnet et VB5 section débutant ....
0
cs_MPi Messages postés 3877 Date d'inscription mardi 19 mars 2002 Statut Membre Dernière intervention 23 août 2018 21
30 sept. 2006 à 19:39
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
0
arthur0201 Messages postés 55 Date d'inscription samedi 19 mars 2005 Statut Membre Dernière intervention 19 octobre 2006
30 sept. 2006 à 20:12
Ok je vais essayé de transférer le sujet si c possible je me suis juste trompé de ctégorie....
0