Passer un entier en argument d'une macro et manipulation sur les lignes

Bonsoir à tous,

Pour les besoins d'un projet, j'ai enregistré une macro : j'entre une formule dans une cellule et je l'étire sur quelques lignes d'une même colonne dans un TableauRef. Cette formule est un EQUIV : EQUIV($E3;G8:L8;-1) pour être précis ! La plage G8:L8 fait partie d'un tableau.

Je dispose d'une vingtaine de tableaux (autres que TableauRef), les uns en dessous des autres, identiques dans la forme mais dont les valeurs changent. Ces tableaux sont séparés de 10 lignes. En réalité, il s'agit d'un regroupement de valeurs par mois : il s'agit toujours des mêmes choses (quantité de produits vendus, prix unitaire, CA...), seules les valeurs changent. Mon but : reprendre la macro précédente, lui passer un argument "n As Integer" correspondant au n° du tableau et demander à ce que TableauRef soit rempli à partir de la formule : EQUIV($E3;Gx:Lx;-1) où x=8+(n-1)*10.

A partir de cette macro ayant pour argument le numéro du tableau, je souhaite créer une nouvelle macro qui récupère dans la cellule A1 la valeur n correspondant au n° du tableau que je souhaite traiter et qui effectue la macro précédente avec l'argument qui convient.

Comment procéder ? Quelles fonctions utiliser pour demander d'étirer sur une ligne x=8+(n-1)*10 en VBA ? Pouvez-vous me donner un exemple de macro qui étire une formule ?
Mon souhait de créer une macro sans argument, récupérant la valeur de l'Integer n dans une feuille et effectuant la première macro (avec l'argument n) est-elle "bonne" ?

Quelque chose comme :

Sub MacroSansArgument()

Dim n As Integer

n=Range("A1").Value

MacroAvecArgument(n)

End Sub

Je vous remercie pour votre aide ! J'aimerais vous fournir un exemple mais je ne dispose d'Excel qu'au travail...

Bonne soirée à vous !

Bonsoir,

Il existe diverses méthodes qui me viennent en tête pour parvenir à faire ça, je les ai illustré dans le fichier joint.

Bonne soirée!

31classeur1.xlsm (16.98 Ko)

Bonsoir et merci beaucoup !

J'ai des difficultés à exécuter vos macros avec open office : pouvez-vous me fournir les textes VBA afin que je les analyses ?

Je vais essayer de trouver une solution : sans Excel à la maison, cela devient compliqué.

Merci encore!!

Bonsoir,

bien sûr, les codes sont appliqués sur cette feuille:

image

Somme 1:

Sub etirage()
    Range("C2").Select
    Selection.AutoFill Destination:=Range("C2:C8"), Type:=xlFillDefault
    Range("C2:C8").Select
End Sub

Somme 2:

Sub colle()
    Range("D2").Select
    Selection.Copy
    Range("D2:D8").Select
    ActiveSheet.Paste
End Sub

Somme 3:

Sub reecrire()
    Range("e2:e8").Formula = Range("e2").Formula
End Sub

Somme 4:

Sub ecrireParVBA()
    Range("f2:f8").FormulaR1C1 = "=RC[-5]+RC[-4]"
End Sub

Bonne soirée!

Merci beaucoup ! J'ai quelques questions :

Chacune de ces solutions va-t-elle procéder au décalage progressif de E3 vers E4 (voir mon premier post) et de G8:L8 vers G9:L9 etc ?

Pouvez-vous m'expliquer la syntaxe du dernier exemple ? Notamment l'usage de RC[...][...] (crochets et signification) ?

Supposons "l'étirage" via macro VBA fait, comment implémenter ma problématique lié au numéro de tableau ?

Un grand merci que je réitère, encore !

Bonne soirée!

Si j'ai bien compris la problématique, il sera possible de remettre les formules qui existent déjà dans des lignes plus bas oui, l'étirage ne sera peut-être pas la solution par contre, la copie de formule ou la réécriture complète par VBA avec R1C1 seront plus appropriés, la copie étant la plus simple si la formule est déjà renseignée quelque part.

Je ne suis pas expert en écriture de formule en R1C1, je l'ai obtenu par enregistreur de macro, on peut lire de la façon suivante:

on donne l'emplacement relatif des cellules auxquelles on fait référence dans la formule de somme qui fait A2+B2 en ligne 2, pour ça on renseigne Row et Column, le crochet c'est pour encadrer la valeur relative, on peut donner la valeur absolue en mettant R2C1 et R2C2 de mémoire, pour A2 et B2.

Pour la problématique, si on prend le code que je préfère:

Sub reecrire()
    Range("e2:e8").Formula = Range("e2").Formula
End Sub

Il faudra remplacer Range("e2:e8") par l'emplacement dans le tableau où la formule doit être copiée, et Range("e2") par la cellule qui contient cette formule dans un tableau déjà existant, pour l'emplacement du tableau, si ils font tous la même taille, c'est possible de calculer sa position à partir de n, si ils n'ont pas la même taille, que le tableau existe à l'avance, il est possible de le trouver avec une boucle ou une recherche en fonction de son format, si il contient le numéro n, on peut le chercher, si il n'est pas renseigné on peut utiliser une succession de range().End(xlDown) pour arriver là où on le souhaite, c'est une réflexion que vous devrez faire, en tout cas pour la question posée qui est d'étirer une formule sur une zone donnée, les solutions sont fournies

Rechercher des sujets similaires à "passer entier argument macro manipulation lignes"