Probleme sur une boucle

  • Initiateur de la discussion Initiateur de la discussion gwenou17
  • Date de début Date de début

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 !

G

gwenou17

Guest
Bonjour à tous,

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

Sub pack()

Application.ScreenUpdating = False

Sheets("budget (2)").Select
Range("G2:O2").Select
Selection.Copy
Sheets("synthese").Select
Range("AP2:AX2").Select
ActiveSheet.Paste


Sheets("synthese").Select
Range("B5449:CC5449").Select
Application.CutCopyMode = False
Selection.Copy
Sheets("budget (2)").Select
Range("Z2:CZ2").Select
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False


End Sub
 
Re : Probleme sur une boucle

Bonjour gwenou17 et bienvenue,

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:
Code:
Sheets("budget (2)").Range("G2:O2").Copy
Remplace les trois autres:
Code:
Sheets("budget (2)").Select
Range("G2:O2").Select
Selection.Copy

Pour ta variable, tu peux écrire:
Code:
Sheets("budget (2)").Range("G" & n & ":O" & n).Copy

Teste déjà ça et dis-nous ce qu'il en est. Pour le reste, il faudrait voir ce que tu veux précisément faire.

Bon amusement
 
Re : Probleme sur une boucle

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.
Code:
Sheets("budget (2)").Select
Range("G2:O2").Select
Selection.Copy
Sheets("synthese").Select
Range("AP2:AX2").Select
ActiveSheet.Paste
Déjà que ça ralentit le fonctionnement, ça peut créer des problèmes
Code:
Sheets("budget (2)").Range("G2:O2").Copy Sheets("synthese").Range("AP2")
Un peu plus court et mieux, non 😛 ?
Code:
.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
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+
 
Re : Probleme sur une boucle

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]

Cordialement

EDIT Ajout de la MsgBox
 
Dernière édition:
- 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.

Discussions similaires

Réponses
2
Affichages
397
Retour