[EXCEL] Colonne suivante...

Bonjour à tous,
voilà, je suis en train de progammer un tableau sur Excel 2010, et je suis confronté à un problème... Je suis en train de créer un outil qui donne plusieurs valeurs en fonction de critères à sélectionner ; et je dois créer un bouton qui enregistre les données actuellement affichées dans une liste sur sur autre feuille (pour les archiver et les comparer). J'ai donc créé un bouton qui appelle une macro qui se charge de faire les copier/collage spéciale (valeur seule), donc tout marche bien, sauf....
Sauf que j'aimerais qu'à chaque appuie du bouton, excel enregistre les nouvelles valeurs dans la colonne suivante (histoire de pas écraser les valeurs à chaque fois !!)
Donc voici un extrait de la macro (c'est toujours la même chose) :

Range("C1").Select 
    ActiveCell.FormulaR1C1 = "=NOW()" 
    Range("C2").Select 
    Sheets("daten").Select 
    Range("B23").Select 
    Selection.Copy 
    Sheets("List").Select 
    Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _ 
        :=False, Transpose:=False 
    Range("C3").Select 
    Sheets("daten").Select 
    Range("C23").Select 
    Application.CutCopyMode = False 
    Selection.Copy 
    Sheets("List").Select 
    Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _ 
        :=False, Transpose:=False 
    Range("C4").Select


L'idée serait de remplacer sur la sheet "List" les "C1", "C2", etc. par "D1", "D2"... puis "E1", "E2", etc....
J'ai essayer plusieurs solutions d'internet mais rien n'a marché, et vu que je ne comprends rien au VBA (et puis j'ai pas trop le temps d'apprendre, c'est pour le boulot là ^^)...
Merci beaucoup de votre aide en tout cas !

Hug.

4 réponses

  1. Bonjour,

    Ça devrait ressembler à cela :

    Option Explicit 
    
    Sub Test() 
    
        Dim Boucle As Long 
    
        Sheets("List").Select 
        Range("C1").Select 
        ActiveCell.FormulaR1C1 = "=NOW()" 
        Range("C2").Select 
         
        For Boucle = 2 To 50 
            Sheets("daten").Select 
            Cells(Boucle, 23).Select 
            Selection.Copy 
            Sheets("List").Select 
            Selection.PasteSpecial Paste:=xlPasteValues, _ 
                Operation:=xlNone, SkipBlanks _ 
                :=False, Transpose:=False 
            Application.CutCopyMode = False 
            ActiveCell.Offset(1, 0).Select 
        Next Boucle 
         
    End Sub 
    '  
    


    bien entendu, ne voyant pas les données, je ne connais
    pas le nombre de colonne à traiter ?

    For Boucle = 2 To 50

    De la colonne 2 (B) à la colonne 50 (AX).

    Cdt

    Lupin
    0
    1. Merci beaucoup pour votre réponse.
      Alors, j'ai essayé votre solution (en adaptant, car c'est dans la feuille "List" que je veux changer de colonne à chaque fois !), résultat :
      - La liste s'écrit bien, mais en ligne et non en colonne (une colonne = un archivage des données, puis quand on clique à nouveau sur le bouton, et refait un archivage sur la colonne de droite, etc.. Et non sur la ligne, puis la ligne de dessous.) Au pire, je peux inverser et présenter ma liste par ligne...
      - La macro tourne.... 50 fois ! Elle ne s'arrête pas à la fin de l'écriture d'une colonne (enfin, ici en l'occurence : d'une ligne). 'Donc ca écrit 50 fois la même ligne :s

      Merci beaucoup de votre aide, on va y arriver !
      0
      1. re:

        désolé je me suis trompé, il faut juste inverser lignes et colonnes
        dans l'instruction suivante :

        Cells(Boucle, 23).Select
        devient :
        Cells(23, Boucle).Select

        donc on obtient :

        <code>
        Sub Test()

        Dim Boucle As Long

        Sheets("List").Select
        Range("C1").Select
        ActiveCell.FormulaR1C1 = "=NOW()"
        Range("C2").Select

        For Boucle = 2 To 50
        Sheets("daten").Select
        Cells(23, Boucle).Select
        Selection.Copy
        Sheets("List").Select
        Selection.PasteSpecial Paste:=xlPasteValues, _
        Operation:=xlNone, SkipBlanks _
        :=False, Transpose:=False
        Application.CutCopyMode = False
        ActiveCell.Offset(1, 0).Select
        Next Boucle

        End Sub
        '
        <code>

        deuxième point, jusqu'où doit tu effectuer la manip ?

        Je cite :
        L'idée serait de remplacer sur la sheet "List" les "C1", "C2", etc. par "D1", "D2"... puis "E1", "E2", etc....

        le mot [etc...] signifie quoi exactement ?

        En C1, tu inscris la date de maintenant (la formule),

        en C2, tu commence la copie,

        veux-tu toujours inscrire la date du jour sur la ligne 1
        de chaque colonne, et renvoyé la copie sur la ligne 2
        en décalant d'une colonne à chaque fois ?

        Je ne saisis pas bien cette partie, c'est pourquoi j'ai fait
        boucler de 2 à 50, mais cela n'a pas l'air d'être ce que tu
        souhaite !

        Cdt

        Lupin
        0
        1. Bonjour,
          merci beaucoup,
          en adaptant vos codes, j'ai réussi à obtenir ce que je voulais ! J'ai même pu mettre en place un système de suppression de colonne qui fait revenir à la colonne précédente pour écrire (et ne laisse donc pas de blancs)...
          Maintenant je dois trouver un système pour commander une impression en sélectionnant l'année d'archivage des données, mais ça... c'est une autre histoire....!
          0