Boostez vos compétences Excel avec notre communauté !
Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force.
Apprenez, échangez, progressez – et tout ça gratuitement !
👉 Inscrivez-vous maintenant !
je suis en train de réaliser ma première macro, et ce n'est pas franchement une réussite.
Je suis bloquée au stade suivant :
J'ai crée la macro pour ma première ligne.
Mon fichier comporte nlignes
Je souhaites pouvoir creer une boucle qui effectue cet ordre sur toutes les lignes de mon onglet "synthese" sans modifier la position des lignes de mon onglet "budget (2)"
en gros il faut que j'arrive a mettre une variable n dans partie 1 : Range("Gn:On").Select
partie 2 : Range("Zn:CZn").Select
Qu'il execute les 2 parties et passe au suivant
Première petite remarque, dont tu trouveras confirmation au fil de tes lectures sur ce forum: il faut tâcher de n'utiliser les instructions '.Select' ... que si tu ne peux faire autrement! L'instruction suivante:
Salut gwenou17 et le forum
Toutes interprétations, de notre part, seront celles que tu ne voulais pas (Loi de Murphy).
Donc expliques exactement ce que tu veut, y compris ce qui est évident pour ceux qui utilisent ton fichier, ce qui n'est pas notre cas.
Pour une meilleure lisibilité, sur le forum, utilises les balises de codes (#) et les indentations dans ton code
Je souhaites pouvoir creer une boucle qui effectue cet ordre sur toutes les lignes de mon onglet "synthese" sans modifier la position des lignes de mon onglet "budget (2)"
en gros il faut que j'arrive a mettre une variable n dans partie 1 : Range("Gn:On").Select
partie 2 : Range("Zn:CZn").Select
Qu'il execute les 2 parties et passe au suivant
Un peu de logique me dit que si on copie G2:O2 sur AP2:AX2, G3:O3 devra être copié sur AP3:AX3 => pourquoi faire une boucle ? On peut copier G2:Gn sur les cellules à partir de AP2 (vaut mieux simplement définir la cellule en haut à gauche et laisser Excel calculer la plage, on risque moins d'erreurs).
Comme on ne connaît pas l'utilisation du fichier, difficile de proposer ce qu'il y a de mieux pour répondre à une question non formulée (plage de départ ?)
Je sais que c'est chiant, mais s'obliger à déclarer ses variables dans le type attendu, évite bien des crises.
Tu utilises une instruction de champ application : avant de sortir de la macro, remet l'application dans l'état où elle était au début. Même si ce n'est pas toujours utile, quand ça l'est, tu ne l'oublieras pas.
On peut raccourcir un code comme ça, en enlevant tout le texte inutile, puisque Excel le met par défaut. Ce qui nous donne
Code:
.PasteSpecial Paste:=xlPasteValues
plus concis
Tu ne peux pas fixer la plage de réception en dur, à moins de remplacer les vieilles valeurs par les nouvelles. En règle générale, on calcule laplage d'arrivée de sorte qu'elle continue les données déjà inscrites. Mais il faut savoir ce que l'on doit faire, comment est utilisé la feuille et quelle colonne va servir de référence.
A+
Bonjour gwenou17, Modeste, Gorfael, le fil, le forum
Comme la question n'est pas vraiment aisée à cerner et que l'exemple n'aide pas non plus, je fais une proposition avec ce que j'ai compris.
A tester pour vérifier car je ne copie que les valeurs des cellules.
Code:
[COLOR=blue]Sub[/COLOR] test()
[COLOR=#000000][COLOR=green]'On cherche la dernière cellule non vide de la colonne g de la feuille budget (2)[/COLOR]
y = Sheets("budget (2)").Cells(Rows.Count, 7).End(xlUp).Row
[COLOR=green]'On récupère la plage à copier dans un tableau[/COLOR]
Tablo2 = Sheets("budget (2)").Range("G2:O" & y).Value
[COLOR=green]'On colle le tablo sur la feuille de destination[/COLOR]
Sheets("synthese").Range("AP2").Resize([COLOR=blue]UBound[/COLOR](Tablo2, 1), [COLOR=blue]UBound[/COLOR](Tablo2, 2)) = Tablo2[/COLOR]
[COLOR=#000000][COLOR=green]'On cherche la dernière cellule non vide de la colonne B de la feuille synthèse[/COLOR]
x = Sheets("synthese").Cells(Rows.Count, 2).End(xlUp).Row
[COLOR=green]'On récupère la plage à copier dans un tableau[/COLOR]
Tablo = Sheets("synthese").Range("B5449:CC" & x).Value
[COLOR=green]'On colle le tablo sur la feuille de destination[/COLOR]
Sheets("budget (2)").Range("Z2").Resize([COLOR=blue]UBound[/COLOR](Tablo, 1), [COLOR=blue]UBound[/COLOR](Tablo, 2)) = Tablo[/COLOR]
[COLOR=#008000]'Message de fin de traitement [/COLOR]
[COLOR=#000000]MsgBox "Transfert terminé"[/COLOR]
[COLOR=#000000][COLOR=blue]End Sub[/COLOR][/COLOR]
- Navigue sans publicité - Accède à Cléa, notre assistante IA experte Excel... et pas que... - Profite de fonctionnalités exclusives Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel. Je deviens Supporter XLD
Assurez vous de marquer un message comme solution pour une meilleure transparence.