Superposition de deux colones dans Excel

korni184 -  
pijaku Messages postés 13513 Date d'inscription   Statut Modérateur Dernière intervention   -
Bonjour,

je suis entrain de réaliser une macro simple pour comprendre le fonctionnement de superposition de colonnes:

J'ai un tableau à 4 colonnes (numéro,objet et numéro,objet) se sont effectivement deux colonnes qui doivent se suivre,

j'ai donc commencer ma macro comme ceci:


---------------------------------------------------------------------------------------------


Sub Macro1()
'
' Superposition de deux colonnes
' Macro recorded 30.03.2010 by fd151
'
Range ("A2).Select

Do While ActiveCell.offset(0,0).value <>""
Activecell.offset(1,0).select

Loop
End Sub




---------------------------------------------------------------------------------------------



j'ai donc de A2 à A17 des intitulés
de B2 à B17 des montants

et de C2 à C16 la 'même chose, et idem pour d2 à d17

J'aimerai savoir si c'est possible, qu'après qu'il est fait sa boucle, donc lorsqu'il s'arrête sur la ligne en A18 (la cellule vide) qu'il puisse venir copier la suite des colonnes qui se trouvent à partir de C2 ET D2 (sans prendre les intitulés car c'est les même) et donc obtenir deux colonnes uniques:

Merci d'avance












A voir également:

1 réponse

pijaku Messages postés 13513 Date d'inscription   Statut Modérateur Dernière intervention   2 765
 
Salut,
Avant toutes choses, en VBA il convient d'éviter les ".Select". La macro s'en trouve alourdit et très ralentie. Cela ne se voit pas dans ton cas, car tu ne boucle que sur 16 lignes, mais n'oublies pas qu'excel (<2007) comprends 65536 lignes...
Si tu tiens à sélectionner la première ligne ou A est vide :
Range("A65536").End(xlUp).Offset(1, 0).Select


Dans ton cas, tu souhaites, si je ne m'abuse, coller après A17 le contenu de la plage ("C2:C17"). Si cette plage (C2:C17) est fixe alors :
Range("C2:C17").Copy Range("A18") 'l'espace entre copy et Range lui indique que A18 est la destination ou on doit "coller"

(range source.copy vers range destination)
Maintenant si les plages en colonne A & C sont variables, il faut en connaitre les "bornes"
1ère ligne : facile, il s'agit de A2 ou de C2.
dernière ligne remplie :
Range("A65536").End(xlUp).Row
et
Range("C65536").End(xlUp).Row

Pour copier la plage C2:Cfin :
'déclaration de la variable dans laquelle nous allons stocker le numéro de la dernière ligne
Dim derniereligne As Integer
derniereligne = Range("C65536").End(xlUp).Row
'copie de la plage :
Range("C2:C" & derniereligne).Copy

pour le copier/coller "derrière" la dernière cellule non vide de la colonne A :
Dim derniereligne As Integer
derniereligne = Range("C65536").End(xlUp).Row
'copie de la plage et colle derrière Afin:
Range("C2:C" & derniereligne).Copy Range("A65536").End(xlUp).Offset(1, 0)
'ici le Offset(1, 0) "descends" d'une ligne, ce qui permet de "sélectionner" la première ligne vide au lieu de la dernière remplie...


J'espère ne pas avoir été trop confus...
0
Alex.wam Messages postés 21 Statut Membre 1
 
La discussion date un peu, mais qui sait...
J'ai exactement la même problématique que korni 184, et en suivant ton script, je n'arrive pas à mes fins. Si je te passe mon script, as-tu un moyen de le corriger?
0
pijaku Messages postés 13513 Date d'inscription   Statut Modérateur Dernière intervention   2 765
 
bonjour,

on peux essayer... Envoie!
0