Excel - VB - Remplir feuille via Userform

Résolu
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

4 réponses

  1. Contributeur
    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. 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
      1. 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 :)
        1. Contributeur
          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/
        2. 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......
        3. Contributeur
          ??? bof, faut pas se vexer, mon brave
        4. 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.
        5. Contributeur
          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