Copier une ligne, la stocker, et distribuer sur plusieurs lignes en valeur

Bonjour,

capture1

J'ai des difficultés pour faire une macro qui doit copier une ligne entière (avec ses formules) puis la coller dans une autre ligne

(question de sauvegarder les formules comme dans l'image ci-dessus en L4) puis ensuite la recoller sur la ligne initiale en valeur.

Le véritable problème survient au moment de faire une boucle qui va incrémenter cette formule sauvegardée aux autres lignes

de mon tableau Excel en y appliquant à chaque fois le calcul qui tiendra compte de la variation de ligne.

J'espère avoir été un peu compréhensible.

Merci d'avance de votre aide.

Take care !

Bonjour,

Pourquoi pas juste utiliser la méthode .FillDown de Range en partant de la première ligne de valeur jusqu'à la fin de ta ligne ? Cela évite la boucle. Et est surement plus efficace.

Sinon merci de joindre un bout de fichier anonymisé avec ton bout de code.

Cdlt,

Merci beaucoup @Ergotamine pour votre retour.

En effet, pour être simple, ce que je veux c'est de pouvoir copier la ligne 4 en formule puis la coller en ligne 7 puis en ligne 8, puis en 9 etc...

Et je voudrais donc que quelqu'un m'aide à faire une boucle qui fais ça.

Désolé je n'arrive pas à charger de fichier.

Merci beaucoup!

Bonjour,

Dans ce cas et au vu de la capture d'écran :

Sub RECOPIE()
Dim LR%
LR = ActiveSheet.Cells(ActiveSheet.Rows.Count, 1).End(xlUp).Row 'Chiffre 1 à adapter en fonction du numéro de colonne contenant des valeurs jusqu'à la dernière ligne
Range("DY4:ED4").Copy
Range("DY7:ED" & LR).PasteSpecial Paste:=xlPasteFormulas
End Sub

Je suis parti du principe que les formules étaient entre DY4 et ED4 et que la dernière ligne était identifiée dans la colonne A, donc entre A4 et A jusqu'à la dernière ligne il y a des valeurs. Comme il n'y a pas de continuité entre 4 et 7 je n'ai pas utilisé la méthode FillDown.

Un collage spécial des formules sur une plage, si la formule est bien constituée (références absolues VS références relatives), est plus rapide et consomme moins qu'une boucle.

Dans l'attente de ton retour.

Cdlt,

Bonjour @Ergotamine,

Merci beaucoup pour votre implication. Je viens en effet de charger un fichier qui montre un peu mon problème.

Je cherche à faire une macro qui va coller la formule de la ligne 2 (sur mon fichier) et la coller en ligne 5 puis en ligne 6 et etc et en valeur.

Merci

1tableau-test.xlsx (10.56 Ko)

Bonjour,

A ce moment si l'on veut coller les formules, calculer, puis recoller en valeur là le code devient :

Sub RECOPIE()
Dim LR%
LR = ActiveSheet.Cells(ActiveSheet.Rows.Count, 1).End(xlUp).Row 'Chiffre 1 à adapter en fonction du numéro de colonne contenant des valeurs jusqu'à la dernière ligne
Range("B2:F2").Copy 'copie les formules
Range("B5:F" & LR).PasteSpecial Paste:=xlPasteFormulas 'colle sur la plage jusqu'à la dernière ligne
Range("B5:F" & LR).Copy 'copie la plage jusqu'à la dernière ligne
Range("B5:F" & LR).PasteSpecial Paste:=xlValues 'colle en valeur
End Sub

Cdlt,

Bonjour @Ergotamine,

Vous ne pouvez pas savoir comment vous m'avez ouvert les yeux ; je vous en suis infiniment reconnaissant.

Cependant, je ne crois pas avoir cerné totalement le commentaire ci dessous . Parce que j'ai essayé d'appliquer votre code, mais ça m'a dupliqué

la formule de la première ligne (dans ce fichier la ligne 5) à toutes les lignes de mon tableau. En fin de fin je me retrouve avec le même résultat sur toutes les lignes.

Merci encore beaucoup!

'Chiffre 1 à adapter en fonction du numéro de colonne contenant des valeurs jusqu'à la dernière ligne

J'ai oublié de joindre une tite image question de mieux illustrer ce que je dis .

fiche test

Bonjour,

Dans votre exemple c'est un comportement normal et je me doutais que vous alliez poser cette remarque. En effet je copie toute la plage B2 à F2 sur la plage B5:F28. Donc les quantités, PU et charges de la plage B5:D28 sont remplacées par les valeurs présentes sur la plage B2:D2. Donc ua final la formule des plages E5:F28 se base sur les mêmes valeurs que la plage B2:D2 pour son calcul, donc même résultat.

Je pense que ce que vous vouliez obtenir est uniquement une copie de la plage E2:F2, dans ce cas :

Sub RECOPIE()
Dim LR%
LR = ActiveSheet.Cells(ActiveSheet.Rows.Count, 1).End(xlUp).Row 'Chiffre 1 à adapter en fonction du numéro de colonne contenant des valeurs jusqu'à la dernière ligne
Range("E2:F2").Copy 'copie les formules
Range("E5:F" & LR).PasteSpecial Paste:=xlPasteFormulas 'colle sur la plage jusqu'à la dernière ligne
Range("E5:F" & LR).Copy 'copie la plage jusqu'à la dernière ligne
Range("E5:F" & LR).PasteSpecial Paste:=xlValues 'colle en valeur
End Sub

Cet exemple était juste pour vous montrer qu'il faut être très précis dans les demandes, qui peuvent être mal interpretées. Le plus simple est un fichier représentatif (mêmes lignes, mêmes colonnes si l'on ne maîtrise pas), avec le résultat avant/après, ou la démarche à réaliser et l'objectif.

Je vous laisse adapter à votre fichier et reste à disposition si besoin.

Cdlt,

J'aimerais réellement vous remercier pour votre grande générosité.

C'est ma première fois d'utiliser un forum pour de l'aide et je trouve ça très ingénieux.

Cependant j'ai un autre petit sujet sur le même code que vous avez posté.

En fait je ne comprends pas bien la logique de la 1ère ligne de votre code:

LR = ActiveSheet.Cells(ActiveSheet.Rows.Count, 1).End(xlUp).Row 'Chiffre 1 à adapter en fonction du numéro de colonne contenant des valeurs jusqu'à la dernière ligne

Perso je voudrais que mon code soit établis de la ligne 7 (voir image) à la dernière ligne de mon fichier (je crois ligne 1460).

cap

Bonjour,

Ce code permet d'obtenir la dernière ligne du tableur remplie.

ActiveSheet.Cells(ActiveSheet.Rows.Count, 1).End(xlUp).Row

Elle est décomposée en plusieurs phase :

-J e compte le nombre de ligne de la feuille :ActiveSheet.Rows.Count
- Je me place à la dernière cellule du classeur de la colonne A : Cells(ActiveSheet.Rows.Count, 1)
- Je monte à partir de cette cellule à la dernière cellule remplie : ActiveSheet.Cells(ActiveSheet.Rows.Count, 1).End(xlUp)
- Je renvoie le numéro de ligne à laquel je suis : ActiveSheet.Cells(ActiveSheet.Rows.Count, 1).End(xlUp).Row

Ce code reviendrait à vous placer sur la cellule A1048576 de votre feuille puis actionner CTRL + Flèche du haut et regarder la ligne sur laquelle vous vous trouvez.

Il permet de rendre dynamique votre code afin de ne pas préciser de façon algébrique et fixe une plage : si elle s'agrandit, la macro suit la modification structurelle apportée.

Cdlt,

Bonjour,

Ok je commence à comprendre les trucs compliqués et je vous en remercie.

Moi dans mon cas je cherche à ne tenir compte que des lignes comprises entre la ligne 7 et la dernière ligne du tableau.

J'ai peur que votre code tienne compte de toutes les lignes de mon classeur (même de celles au dessus de la ligne 7 qui ne doivent pas faire partie de mon code).

Merci d'avance.

Bien chaleureusement,

Bonjour,

Dans le premier code envoyé non :

Range("DY7:ED" & LR).PasteSpecial Paste:=xlPasteFormulas

Je ne colle que sur plage DY7:ED dernière ligne. Les lignes 1 à 7 ne sont pas impactées.

Cdlt,

Rechercher des sujets similaires à "copier ligne stocker distribuer lignes valeur"