Incrémenter test cellule non vide

Résolu
jib92 -  
 jib92 -
Bonjour,

Je travaille sous excel 2003.

Je souhaite enregistrer des données dans un tableau.

Pour cela je souhaite faire un test:

première cellule à tester : B3
si cellule vide, la macro doit enregistrer des données dans la ligne 3
si cellule non vide, la macro doit tester B4, puis B5... jusqu'à trouver une ligne vide pour enregistrer les données.

Le but est d'enregistrer des données sans effacer les enregistrements précédents.

Merci d'avance.

jib92, apprenti...
Configuration: Windows XP
Opera 9.51

8 réponses

  1. eriiic Messages postés 24581 Date d'inscription   Statut Contributeur Dernière intervention   7 281
     
    pour un débutant c'est pas mal...
    tu peux faire plus court avec par exemple :
        Set ws = Worksheets("Feuil1")
        Set ws1 = Worksheets("Feuil2")
        derlig = ws1.[B65536].End(xlUp).Row + 1
        If derlig < 3 Then derlig = 3
        ws.[B14:D14].Copy Destination:=ws1.Range("B" & derlig)

    puisque tu as défini des variables pour les noms des feuilles, autant s'en servir.

    Et pour inscrire une valeur même ligne colonne 5 (E) tu peux faire :
    ws1.Cells(derlig, 5).Value = UserForm1.TextBox1.Text


    eric
    2
  2. jib92
     
    Bonjour,

    J'ai résolu mon problème de #ref en copiant directement de C7. Par contre je n'ai pas trouvé pour copier sans la mise en forme. Je vais etre obligé d'utiliser Paste Special mais je ne vois pas comment l'intégrer dans ta procédure qui marche bien.
    2
  3. Leahkim Messages postés 3219 Statut Membre 281
     
    Facile !!

    voila l'algo:

    declarer A=3,

    tant que (cellule(A,2)<>"")
    A=A+1
    fin tantque

    coller les données dans la cellule(A,2)

    ainsi, il vérifie toutes les cellules a partir de B3 et des qu'il y en a une qui est vide il y colle ce que tu as copié
    1
  4. jib92
     
    Merci de répondre aussi vite.

    Pour commencer je suis vraiment au stade débutant.

    J'ai écris:

    Set ws = Worksheets("Fiche de maintenance")
    Set ws1 = Worksheets("Fiche client refusée")

    Range("B14:D14").Select
    Selection.Copy
    Sheets("Fiche client refusée").Select

    i = 3

    if ws1.Range("B" & i).Value <> ""
    Application.CutCopyMode = False
    Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
    :=False, Transpose:=False
    Else
    i = i + 1
    end

    Moi je me comprends à peu près mais vba pas du tout (mais alors vraiment pas)...

    en français:

    Feuille ("Fiche de maintenance")

    copie des cases B14 à D14

    Feuille ("Fiche client refusée")

    ligne de départ: i=3

    Si B(3) vide alors copie des cases B14 C14 D14 (de ws) dans B3 C3 D3 (ws1)
    sinon (B(3) non vide)
    on incrémente i=i+1 et on refait le test jusqu'a trouver une ligne vide où copier les données

    Par ailleurs, Je voudrais mettre dans E(i) F(i) G(i) des données venant d'une textbox. Vu que je ne connais pas la syntaxe vba, je ne suis pas arrivé... je pense que je devrais enregistrer les valeurs provenant de la listbox avant de faire ma recherche de ligne.
    1
  5. Vous n’avez pas trouvé la réponse que vous recherchez ?

    Posez votre question
  6. eriiic Messages postés 24581 Date d'inscription   Statut Contributeur Dernière intervention   7 281
     
    Bonjour,

    Pour sélectionner la 1ère cellule vide de la colonne B :
    [B65536].End(xlUp).Offset(1, 0).Select
    eric
    0
  7. jib92
     
    ça marche bien, j'avoue que j'aurais pas deviner la manip...

    Comment pourrais je faire cette copie sans la mise en forme de départ? et le D(i), feuille 3 créé qui est une copie de D14, feuille 1 qui est déjà C7 de la même feuille... (programme torturé) m'indique #REF. C'est un nombre, peut être faut il le préciser ou copier directement de C7... je sais pas. Je précise qu'ensuite j'efface C7 donc D14 et je souhaite conserver la valeur enregistrée dans l'autre feuille.

    Merci Eric
    0
  8. eriiic Messages postés 24581 Date d'inscription   Statut Contributeur Dernière intervention   7 281
     
    Comment pourrais je faire cette copie sans la mise en forme de départ?
    à ma connaissance pas avec .copy.
    Donc soit retourner au copier/coller avec .PasteSpecial Paste:=xlPasteValues
    ou bien s'il n'y a pas bcp de mise en forme à reprendre la modifier sur les cellules d'arrivée

    #REF
    indépendant de la macro (enfin le bout que je t'ai donné), à régler sur ta feuille... peut-être des suppressions de cellules un peu hatives et des formules y faisaient référence, ressaisi tes formules.
    0
  9. jib92
     
    J'ai trouvé.

    ws1.Cells(derlig, 2).Value = ws.[B14].Value

    Plus de mise en forme du coup.

    Merci encore
    0