Introduire un paramètre dans RANGE().select

Résolu
krankinette -  
Morgothal Messages postés 1350 Statut Membre -
Bonjour,

Je dois écrire une macro qui vient chercher une colonne dans un onglet 1 puis qui la colle dans un onglet 2 où s'effectue un calcul dont le résultat apparait onglet 3. Je dois faire ce calcul autant de fois qu'il y a de colonnes dans le premier onglet (environ 180) et lister tous les résultats dans un onglet 4.

J'ai enregistré cette macro pour la première colonne :

Sheets("Colonnes").Select
Range("C3").Select
Range(Selection, Selection.End(xlDown)).Select
Application.CutCopyMode = False
Selection.Copy
Sheets("Calculs").Select
Range("P10").Select
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
Sheets("Résultats").Select
Range("C20").Select
Range(Selection, Selection.End(xlToRight)).Select
Application.CutCopyMode = False
Selection.Copy
Sheets("Présentation résultats").Select
Range("C2").Select
Selection.PasteSpecial Paste:=xlPasteValuesAndNumberFormats, Operation:= _
xlNone, SkipBlanks:=False, Transpose:=False

Je voudrais l'automatiser pour me faire les 180 colonnes mais je n'arrive pas à introduire de paramètre dans la fonction RANGE()

Est ce que quelqu'un q une idée ?

Merci

3 réponses

  1. Morgothal Messages postés 1350 Statut Membre 184
     
    Salut,
    Au lieu de
    Range("C3").Select 
    tu peux écrire
    Range("C3:FZ3").select
    FZ c'est la 180ème colonne à partir de C, donc il faut adapter en fonction du nombre exact de colonnes que tu veux sélectionner, et à répéter à chaque fois que tu veux sélectionner plusieurs colonnes.

    Si j'ai mal compris n'hésite pas à reposter !

    A+
    0
  2. Paf
     
    bonjour
    pour introduire un paramètre on peut écrire :

    range("A" & i) i étant un indice que tu peux faire évoluer.

    par exemple :
    For i= 3 to 180
        Range("C" & i).Select 
        ...
        ...
    Next i

    à la place de Range, tu peux utiliser Cells( i , j) ou i est N° de ligne et j N° de colonne

    A+ si besoin
    0
    1. krankinette
       
      Merci beaucoup,
      Mais ça serait range(i&3) dans mon cas et ça ne fonctionne pas, si ?
      0
  3. Morgothal Messages postés 1350 Statut Membre 184
     
    Le premier exemple de Paf te permet de passer sur 180 lignes, et non sur 180 colonnes, il faut utiliser son deuxième exemple :

    Dim colonne as Integer
    
    For colonne = 1 to 180
    Cells(3, colonne).Select
    ...
    ...
    Next
    0
    1. Morgothal Messages postés 1350 Statut Membre 184
       
      Ou alors utiliser
      Range ( i & "3")
      pour que ça fonctionne.
      0
    2. krankinette
       
      Moi quand j'écris
      Range(i + 2 & "2").Select
      il bugue
      tu sais pourquoi ?
      0
    3. Morgothal Messages postés 1350 Statut Membre 184
       
      Un exemple de Range, c'est
      Range("A1")
      , si tu essayes de lui donner une variable numérique
      i+2
      à la place du A, il aime pas trop...
      C'est pour ça qu'il faut bien utiliser
      For colonne = 1 to 180
      Cells(3, colonne).Select
      ...
      ...
      Next
      Pour passer sur toutes les colonnes sous forme de nombre et non de lettres
      0
    4. krankinette
       
      Je crois que ça marche (ça tourne là et ça prend un temps de fou mais au moins ça s'est lancé !)
      Merci beaucoup pour votre aide, vous avez été super réactifs !
      Bonne fin d'aprem
      0
    5. Morgothal Messages postés 1350 Statut Membre 184
       
      Si ça tourne trop longtemps, Echap ou Ctrl+Pause pour arrêter l'exécution et débugger, mais tant mieux si ça marche !
      Et ne pas oublier de mettre le topic en résolu :)
      0