VBA : Range dynamique

SuperTonic Messages postés 53 Date d'inscription mercredi 24 juillet 2002 Statut Membre Dernière intervention 16 mars 2011 - 16 mars 2011 à 11:12
SuperTonic Messages postés 53 Date d'inscription mercredi 24 juillet 2002 Statut Membre Dernière intervention 16 mars 2011 - 16 mars 2011 à 13:00
Bonjour à tous.

Je suis sous Excel, en train de faire une macro. (VBA)
J'ai un petit prob de connaissance. (ça arrive hein...)

Mon prob se situe au niveau de recopie
(recopie n'est pas une fonction, j'ai simplement extrait le code pour une meilleure visibilité de ce qui fonctionne et non)

J'ai arrêté de saisir la macro en cours car c'était de pire en pire....
J'espère que je suis assez explicite et que vous parviendrez à me filer un coup de main sur cette recopie de valeur.


J'ai donc ce code très simple :

----------------------------------------------
Range("A1").Select
While ActiveCell.Offset(1, 0) <> ""
'Tant que la cel du dessous n'est pas vide, je descend d'une ligne
ActiveCell.Offset(1, 0).Select

'Après être descendu si la cel du dessous est vide :
If ActiveCell.Offset(1, 0) = "" Then
'Je regarde si j'ai un horaire en col J
If ActiveCell.Offset(1, 9) <> "" Then
'Si oui alors je duplique la ligne (sauf les horaires)
' pour combler le vide avant de rependre ma boucle
-- ICI CODE "RECOPIE" ---
End If
End If
wend
-----------------------------------------

--- RECOPIE ---
'On est en ligne 21 pour le premier stop d'exemple
Dim Plage
Plage = "A" + ActiveCell.Row + ":I" + ActiveCell.Row
'plage correspondrai à un Range("A21:I21").Select
Selection.Copy

dim LIGNEsub
LIGNEsub="A" + ActiveCell.Row+1
Range(LIGNEsub).Select 'LIGNEsub = A22

ActiveSheet.Paste
Application.CutCopyMode = False

Plage = "L" + ActiveCell.Row + ":M" + ActiveCell.Row
'plage correspond à un Range("L21:M21").Select
Selection.Copy

Range("L22").Select
ActiveSheet.Paste
Application.CutCopyMode = False
Range("A22").Select


En fait pour faire simple ma macro :
Range("A21:I21").Select
Selection.Copy
Range("A22").Select
ActiveSheet.Paste
Application.CutCopyMode = False
Range("L21:M21").Select
Selection.Copy
Range("L22").Select
ActiveSheet.Paste
Application.CutCopyMode = False
Range("A22").Select

Doit être automatique au niveau des num de ligne en fonction de là où s'est stoppée la boucle.


Merci à tous de votre aide !!




Qui a peur de poser des questions a honte d'apprendre. (Proverbe danois)Ce sont rarement les réponses qui apportent la vérité, mais l'enchaînement des questions. (Daniel Penn

1 réponse

SuperTonic Messages postés 53 Date d'inscription mercredi 24 juillet 2002 Statut Membre Dernière intervention 16 mars 2011
16 mars 2011 à 13:00
Hello tout le monde.
Bon en fait j'ai finalement trouvé la solution ...

Je vous mets ci dessous le code qui correspond à la partie "RECOPIE" qui fonctionne parfaitement.

CELLULE = ActiveCell.Address
Range(Cells(ActiveCell.Row, 1), Cells(ActiveCell.Row, 9)).Select
Selection.Copy
Range(Cells(ActiveCell.Row + 1, 1), Cells(ActiveCell.Row + 1, 9)).Select
ActiveSheet.Paste
Application.CutCopyMode = False
Range(CELLULE).Select
Range(Cells(ActiveCell.Row, 12), Cells(ActiveCell.Row, 13)).Select
Selection.Copy
Range(Cells(ActiveCell.Row + 1, 12), Cells(ActiveCell.Row + 1, 13)).Select
ActiveSheet.Paste
Application.CutCopyMode = False
Range(CELLULE).Select


@++


Qui a peur de poser des questions a honte d'apprendre. (Proverbe danois)
Ce sont rarement les réponses qui apportent la vérité, mais l'enchaînement des questions. (Daniel Penn
0
Rejoignez-nous