Excel - VB - Remplir feuille via Userform
Résolu/Fermé
Bonjour,
Je souhaite créer une sorte de base de donnée. J'ai créer un userform pour pouvoir rentrer mes données plus facilement, mais je ne sais pas comment les exporter vers la feuille Excel..
Je sais les exporter vers une cellule précise, mais ce n'est pas ce que je recherche. Je voudrais que les données s'ajoutent une par une dans les colonnes.
Ca doit être simple et idiot pour vous, mais je ne vois vraiment pas.
Merci d'avance
Je souhaite créer une sorte de base de donnée. J'ai créer un userform pour pouvoir rentrer mes données plus facilement, mais je ne sais pas comment les exporter vers la feuille Excel..
Je sais les exporter vers une cellule précise, mais ce n'est pas ce que je recherche. Je voudrais que les données s'ajoutent une par une dans les colonnes.
Ca doit être simple et idiot pour vous, mais je ne vois vraiment pas.
Merci d'avance
A voir également:
- Excel - VB - Remplir feuille via Userform
- Feuille de pointage excel - Télécharger - Tableur
- Liste déroulante excel - Guide
- Si et excel - Guide
- Word et excel gratuit - Guide
- Verrouiller cellule excel sans verrouiller la feuille - Guide
4 réponses
michel_m
Messages postés
16602
Date d'inscription
lundi 12 septembre 2005
Statut
Contributeur
Dernière intervention
16 décembre 2023
3 313
Modifié par michel_m le 12/10/2011 à 18:33
Modifié par michel_m le 12/10/2011 à 18:33
bonjour
par exemple colonne A
dans ton code tu écris cette ligne qui te donne la 1° ligne vide
tu retrouveras très souvent ce genre de pb: trouver la première lige vide, donc mémorise
Il existe d'autres manières
mais à éviter
qui sent le newbie pas très au point
Michel
par exemple colonne A
dans ton code tu écris cette ligne qui te donne la 1° ligne vide
With sheets("nomdetafeuille") ligvid = .Columns(1).Find("*", , , , , xlPrevious).Row+1 .cells(ligvide,"A")=tadonnee_usf end with
tu retrouveras très souvent ce genre de pb: trouver la première lige vide, donc mémorise
Il existe d'autres manières
With sheets("nomdetafeuille") ligvid=.cells(.cells.rows.count, "A").end(xlup).row+1 .cells(ligvide,"A")=tadonnee_usf end with
mais à éviter
lig=1 while cells(lig,"A")<>"" lig=lig+1 wend . cells(lig+1,"A")=tadonnee_usf
qui sent le newbie pas très au point
Michel
f894009
Messages postés
17268
Date d'inscription
dimanche 25 novembre 2007
Statut
Membre
Dernière intervention
29 mars 2025
1 713
12 oct. 2011 à 18:04
12 oct. 2011 à 18:04
Bonjour,
Le moyen le plus simple est de copier vos donnees toujours sur la premiere ligne de votre feuille de calcul (onglet) et de faire une insertion de ligne. Ce qui fera descendre d'une ligne les donnes que vous avez copiees.
Bonne suite
Le moyen le plus simple est de copier vos donnees toujours sur la premiere ligne de votre feuille de calcul (onglet) et de faire une insertion de ligne. Ce qui fera descendre d'une ligne les donnes que vous avez copiees.
Bonne suite
michel_m
Messages postés
16602
Date d'inscription
lundi 12 septembre 2005
Statut
Contributeur
Dernière intervention
16 décembre 2023
3 313
Modifié par michel_m le 12/10/2011 à 18:34
Modifié par michel_m le 12/10/2011 à 18:34
erreur d'envoi
Bonjour et merci,
Est ce que vous pouvez détaillé vos code ??
Je m'explique : il est bien de connaître les codes, mais il faut les comprendre.. ( et je suis un débutant )
Donc ça serait sympa de votre part :D
Et encore merci pour vos réponse :)
Est ce que vous pouvez détaillé vos code ??
Je m'explique : il est bien de connaître les codes, mais il faut les comprendre.. ( et je suis un débutant )
Donc ça serait sympa de votre part :D
Et encore merci pour vos réponse :)
michel_m
Messages postés
16602
Date d'inscription
lundi 12 septembre 2005
Statut
Contributeur
Dernière intervention
16 décembre 2023
3 313
13 oct. 2011 à 08:34
13 oct. 2011 à 08:34
Bonjour
tu as plusieurs manières de désigner une cellule range ("A3") ou cells(3,1) ou cells(3,"A") ou marginalement range("L3C1")
pour 1 et 2, on cherche le numéro de la dernière ligne remplie et on ajoute
1/ la fonction Find demande ici la dernière (xlprevious) ligne(row) où il y a quelque chose ("*") dans la colonne 1 (1="A", j'aurais pu marqué columns("A"))
la suite des 4 virgules sont des paramètres dont on a pas besoin ici, donc...( voir l'aide sur Find)
2/ on part de la dernière ligne de la feuille (.cells.rows.count permet de trouver la dernière ligne quelque soit la version d'excel <2007- 65536 ou >=2007- 2^20)
on se base sur la colonne A la fonction end(xlup) voir l'aide remonte à la dernière ligne remplie
ces 2 formules donne la dernière ligne en ne tenant compte d'une éventuelle ligne vide insérée dans la colonne entre 2 données
Si tu es sûr de ne pas avoir de trous, tu pourrais utiliser ces 2 syntaxes dans l'autre sens si tu as une étiquette en ligne 1
lig=columns("A").find("";range("A1")).row
lig=range("A1").end(xldown).row
si tu commences à la ligne 1 sans étiquette, le départ est la dernière de la feuille (65536 pour XL2003)
la notation with sheets(N)....end with crée un "bloc " on indique au processeur que l'on travaille dans ce bloc avec les cellules (cells ou range) précédées d'un point: ne pas oublier ce point car sinon XL travaille sur la feuille active (bug classique que je sais faire!)
l'avantage est la sécurité de ton processus et évite les sheets.activate et sheets.select qui sont très lents et dénote une mauvaise connaissance de VBA
Tu peux utiliser with...end with avec d'autres objets (range, checkbox....)
3/ la boucle While cells(lig, "A")<>"" est le + souvent inutile et lente et dénote une très mauvaise connaissance de VBA (j'ai dis le + souvent !!!)
4/ quant à la solution d'insérer une ligne, OK mais impose à la mémoire un calcul de décalage d'adresse et elle est aléatoire: si tu utilises des références de cellules dans une macro par ex: range("A3") si tu insères une ligne avant la ligne la référence dans VBA restera A3 alors que l'adresse réelle est devenue A4. il faudrait alors nommées les cellules pour éviter ce bug ('c'est d'ailleurs conseillé quelque soit la méthode mais...)
un cours VBA très utile et complet à télécharger
https://bidou.developpez.com/article/VBA/
tu as plusieurs manières de désigner une cellule range ("A3") ou cells(3,1) ou cells(3,"A") ou marginalement range("L3C1")
pour 1 et 2, on cherche le numéro de la dernière ligne remplie et on ajoute
1/ la fonction Find demande ici la dernière (xlprevious) ligne(row) où il y a quelque chose ("*") dans la colonne 1 (1="A", j'aurais pu marqué columns("A"))
la suite des 4 virgules sont des paramètres dont on a pas besoin ici, donc...( voir l'aide sur Find)
2/ on part de la dernière ligne de la feuille (.cells.rows.count permet de trouver la dernière ligne quelque soit la version d'excel <2007- 65536 ou >=2007- 2^20)
on se base sur la colonne A la fonction end(xlup) voir l'aide remonte à la dernière ligne remplie
ces 2 formules donne la dernière ligne en ne tenant compte d'une éventuelle ligne vide insérée dans la colonne entre 2 données
Si tu es sûr de ne pas avoir de trous, tu pourrais utiliser ces 2 syntaxes dans l'autre sens si tu as une étiquette en ligne 1
lig=columns("A").find("";range("A1")).row
lig=range("A1").end(xldown).row
si tu commences à la ligne 1 sans étiquette, le départ est la dernière de la feuille (65536 pour XL2003)
la notation with sheets(N)....end with crée un "bloc " on indique au processeur que l'on travaille dans ce bloc avec les cellules (cells ou range) précédées d'un point: ne pas oublier ce point car sinon XL travaille sur la feuille active (bug classique que je sais faire!)
l'avantage est la sécurité de ton processus et évite les sheets.activate et sheets.select qui sont très lents et dénote une mauvaise connaissance de VBA
Tu peux utiliser with...end with avec d'autres objets (range, checkbox....)
3/ la boucle While cells(lig, "A")<>"" est le + souvent inutile et lente et dénote une très mauvaise connaissance de VBA (j'ai dis le + souvent !!!)
4/ quant à la solution d'insérer une ligne, OK mais impose à la mémoire un calcul de décalage d'adresse et elle est aléatoire: si tu utilises des références de cellules dans une macro par ex: range("A3") si tu insères une ligne avant la ligne la référence dans VBA restera A3 alors que l'adresse réelle est devenue A4. il faudrait alors nommées les cellules pour éviter ce bug ('c'est d'ailleurs conseillé quelque soit la méthode mais...)
un cours VBA très utile et complet à télécharger
https://bidou.developpez.com/article/VBA/
f894009
Messages postés
17268
Date d'inscription
dimanche 25 novembre 2007
Statut
Membre
Dernière intervention
29 mars 2025
1 713
13 oct. 2011 à 12:10
13 oct. 2011 à 12:10
Je sais les exporter vers une cellule précise, mais ce n'est pas ce que je recherche. Je voudrais que les données s'ajoutent une par une dans les colonnes.
Votre code permet d'incrire une donnee a modifier pour toutes les donnees de la meme ligne . De plus cette personne va ranger des donnees pas de formule pas question de refrences simplement une base de donnees qui ne fera pas des millers de lignes donc la methode la plus simple est l'insertion de ligne. Question simple ---> reponse simple......
Votre code permet d'incrire une donnee a modifier pour toutes les donnees de la meme ligne . De plus cette personne va ranger des donnees pas de formule pas question de refrences simplement une base de donnees qui ne fera pas des millers de lignes donc la methode la plus simple est l'insertion de ligne. Question simple ---> reponse simple......
michel_m
Messages postés
16602
Date d'inscription
lundi 12 septembre 2005
Statut
Contributeur
Dernière intervention
16 décembre 2023
3 313
13 oct. 2011 à 12:17
13 oct. 2011 à 12:17
??? bof, faut pas se vexer, mon brave
f894009
Messages postés
17268
Date d'inscription
dimanche 25 novembre 2007
Statut
Membre
Dernière intervention
29 mars 2025
1 713
13 oct. 2011 à 12:24
13 oct. 2011 à 12:24
Bonjour michel_m
Je ne suis pas du tout vexer. Cette personne debute donc elle a bien le temps de se compliquer le vie avec les innombrables facon de programmer pour arriver a ne pas faire grand-chose.
Je ne suis pas du tout vexer. Cette personne debute donc elle a bien le temps de se compliquer le vie avec les innombrables facon de programmer pour arriver a ne pas faire grand-chose.
michel_m
Messages postés
16602
Date d'inscription
lundi 12 septembre 2005
Statut
Contributeur
Dernière intervention
16 décembre 2023
3 313
13 oct. 2011 à 12:35
13 oct. 2011 à 12:35
sur ta proposition, j'ai marqué 0K, mais j'ai indiqué le risque de cette méthode surtout qu'un débutant ne pensera peut-être pas à nommer les cellules sous l'insertion d'une ligne
les syntaxes que j'ai proposé sont celles indiquées dans tous les bouquins, topos, etc. d'initiation à VBA dignes de ce nom
j'ai répondu la demande d'explication de k.deg, c'est tout et c'est pour lui, j'espère, profitable, plutôt que le déclarer inapte au départ de son apprentisage à comprendre une syntaxe
les syntaxes que j'ai proposé sont celles indiquées dans tous les bouquins, topos, etc. d'initiation à VBA dignes de ce nom
j'ai répondu la demande d'explication de k.deg, c'est tout et c'est pour lui, j'espère, profitable, plutôt que le déclarer inapte au départ de son apprentisage à comprendre une syntaxe