Excel - VB - Remplir feuille via Userform

Résolu/Fermé
k.deg - 9 oct. 2011 à 18:31
 k.deg - 24 oct. 2011 à 10:38
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

A voir également:

4 réponses

michel_m Messages postés 16603 Date d'inscription lundi 12 septembre 2005 Statut Contributeur Dernière intervention 16 décembre 2023 3 303
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
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
1
f894009 Messages postés 17185 Date d'inscription dimanche 25 novembre 2007 Statut Membre Dernière intervention 15 avril 2024 1 701
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
0
michel_m Messages postés 16603 Date d'inscription lundi 12 septembre 2005 Statut Contributeur Dernière intervention 16 décembre 2023 3 303
Modifié par michel_m le 12/10/2011 à 18:34
erreur d'envoi
0
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 :)
0
michel_m Messages postés 16603 Date d'inscription lundi 12 septembre 2005 Statut Contributeur Dernière intervention 16 décembre 2023 3 303
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/
0
f894009 Messages postés 17185 Date d'inscription dimanche 25 novembre 2007 Statut Membre Dernière intervention 15 avril 2024 1 701
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......
0
michel_m Messages postés 16603 Date d'inscription lundi 12 septembre 2005 Statut Contributeur Dernière intervention 16 décembre 2023 3 303
13 oct. 2011 à 12:17
??? bof, faut pas se vexer, mon brave
0
f894009 Messages postés 17185 Date d'inscription dimanche 25 novembre 2007 Statut Membre Dernière intervention 15 avril 2024 1 701
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.
0
michel_m Messages postés 16603 Date d'inscription lundi 12 septembre 2005 Statut Contributeur Dernière intervention 16 décembre 2023 3 303
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
0