Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

Insertion de colonnes par rapport à une cellule

20 réponses
Avatar
géjoun
Bonjour,

J'ai essayé de me créer une petite macro avec l'enregistreur pour insérer
des colonnes ou je le souhaite, mais ça ne fonctionne pas comme je voudrais.

De A1 à A160, j'ai une colonne 'type' qui est masquée dans ma feuille, et je
veux la copier, pour aller l'insérer ou je veux dans mon tableau; et qu'elle
s'insère à droite de la colonne dans laquelle se trouve la cellule active,
sans tenir compte de la position de la cellule active dans cette colonne.

Par exemple, avant de lancer la macro associée à un bouton, je me positionne
dans une des cellules de la colonne par rapport à laquelle je souhaite
insérer ma nouvelle colonne, puis je lance la macro :

1 - Elle copie la colonne type de A1 à A160
2 - Elle la colle en l'insérant à droite de la cellule active, sans tenir
compte du positionnement de la cellule active (que je me positionne en P1 ou
en P46, la colonne copiée sera toujours insérée à droite, mais comme si je
cliquais sur l'en-tête de la colonne pour insérer).

J'espère que j'ai été assez clair...

Merci!

--
géjoun
dam-mail2006@ifrance.com
/Enlever l''année pour m''écrire.../

10 réponses

1 2
Avatar
géjoun
En fait, je suis arrivé à faire ça par rapport à une macro qu'on m'avait
donné ici il y a quelques temps, qui servait à la même chose, mais pour des
lignes, donc j'ai essayé de l'adapter à des colonnes, mais ça bloque sur la
ligne que je repère ci-dessous :

Sub Macro1()
x = ActiveCell.Columns
Range("A1:A160").Copy
Range("A" & x).Insert Shift:=xlToRight <<< Ca bloque ici (ci on pouvait
m'expliquer le "A"&x aussi...)
Application.CutCopyMode = False
Columns(x).ColumnWidth = 5
End Sub

Merci!

--
géjoun

/Enlever l''année pour m''écrire.../
Avatar
Eric Mermin
il faut déclarer ta variable x
peut être aussi remplacer "columns" par "column"
en fait , en écrivant "A" & x, tu essaies de concaténer deux chaines
pour donner par exemple A4 si t'as cellule active est dans la colonne D
eric vraiment non specialiste
t'inquietes, ya des bons qui vont venir te sauver
En fait, je suis arrivé à faire ça par rapport à une macro qu'on m'avait
donné ici il y a quelques temps, qui servait à la même chose, mais pour des
lignes, donc j'ai essayé de l'adapter à des colonnes, mais ça bloque sur la
ligne que je repère ci-dessous :

Sub Macro1()
x = ActiveCell.Columns
Range("A1:A160").Copy
Range("A" & x).Insert Shift:=xlToRight <<< Ca bloque ici (ci on pouvait
m'expliquer le "A"&x aussi...)
Application.CutCopyMode = False
Columns(x).ColumnWidth = 5
End Sub

Merci!



Avatar
Ardus Petus
x = ActiveCell.Column (sans s à Column)

Cordialement,
--
AP

"géjoun" a écrit dans le message de
news:
En fait, je suis arrivé à faire ça par rapport à une macro qu'on m'avait
donné ici il y a quelques temps, qui servait à la même chose, mais pour
des

lignes, donc j'ai essayé de l'adapter à des colonnes, mais ça bloque sur
la

ligne que je repère ci-dessous :

Sub Macro1()
x = ActiveCell.Columns
Range("A1:A160").Copy
Range("A" & x).Insert Shift:=xlToRight <<< Ca bloque ici (ci on pouvait
m'expliquer le "A"&x aussi...)
Application.CutCopyMode = False
Columns(x).ColumnWidth = 5
End Sub

Merci!

--
géjoun

/Enlever l''année pour m''écrire.../



Avatar
géjoun
Ardus Petus nous expliquait:

x = ActiveCell.Column (sans s à Column)


Bonsoir,

J'ai essayé dans la journée, mais ça ne fonctionne pas mieux pour autant...
Personne n'a une d'idée du code à employer? Ou j'ai mal expliqué ce que je
souhaitais?

Merci!
--
géjoun

/Enlever l'année pour répondre.../

Avatar
JpPradier
Bonsoir géjoun

Essaye comme ça :

Sub Macro1()
x = ActiveCell.Column
Range("A1:A160").Copy
Cells(1, x).Insert Shift:=xlToRight
Application.CutCopyMode = False
Columns(x).ColumnWidth = 5
End Sub


j-p
Avatar
géjoun
Bonjour Jp,

Justement, c'était toi qui m'avait donné il y a un moment de ça la macro que
j'ai repris et essayé d'adapter.

Par rapport au code que tu m'as donné, je l'ai légèrement modifié car ça ne
fonctionnait pas comme je voulais exactement en insérant juste une plage, il
faut insérer à chaque fois toute la colonne, donc voici ce que ça donne :

Sub Macro1()
x = ActiveCell.Column
Range("A:A").Copy
Cells(1, x).Insert Shift:=xlToRight
Application.CutCopyMode = False
Columns(x).ColumnWidth = 10
End Sub

Là, ça fonctionne, mais ça ne donne pas ce que je pensais.

Déja, au niveau de la macro, est-ce que c'est pas plus 'contraignant' de
copier toute une colonne alors qu'une simple plage suffirait?

Ensuite, j'ai essayé de changer "Range("A:A").Copy" par
"Columns("A:A").Copy"; et les deux fonctionnent. Est-ce qu'il y en a un plus
que l'autre à employer?
Est-ce qu'on emploie forcément Columns lors d'une colonne, ou on peut quand
même employer Range ?

Ensuite, j'ai essayé de modifier "Cells(1, x).Insert Shift:=xlToRight" en
changeant le "toRight" par "ToLeft", mais j'obtiens toujours pas ce que je
souhaite.

Pour être plus simple dans mes explications, dans le fichier ci-joint
http://cjoint.com/?efmyW2iCzd , lorsque je me positionne dans la colonne C,
et que j'exécute la macro, je voudrais que la colonne insérée se retrouve en
D (que ça me l'insère aprés le chiffre 1, et non avant de façon à ne pas
avoir à ensuite fusionner la cellule C2 et D2 pour obtenir une seule grande
cellule); et lorsque je me positionne dans la colonne I, j'exécute la macro,
et la colonne insérée se retrouve en J et non en I, et ne me décale pas le
chiffre 7 de sa position initiale.

Et là, j'arrive pas à voir de solutions, parce qu'autant pour la colonne C,
ça revient à insérer une colonne juste aprés, puis copier-coller la colonne A
sur la colonne vierge insérée, mais pour la I, je vois pas comment faire.

Y a t'il une solution?

Merci!

--
géjoun

/Enlever l''année pour m''écrire.../





Bonsoir géjoun

Essaye comme ça :

Sub Macro1()
x = ActiveCell.Column
Range("A1:A160").Copy
Cells(1, x).Insert Shift:=xlToRight
Application.CutCopyMode = False
Columns(x).ColumnWidth = 5
End Sub


j-p




Avatar
JpPradier
Bonjour géjoun

Pour la différence entre "Range("A:A").Copy" et "Columns("A:A").Copy", c'est kif-kif la
bourrique à mon avis. L'avantage de Columns est d'etre plus clair à la relecture.
Pour la macro que je t'ai donné, si j'ai compris, elle fonctionne bien mais elle n'insere
pas la plage du bon coté de la colonne selectionnée ?

j-p
Avatar
géjoun
Re,

Pour la différence entre Columns et Range, j'ai compris, et pour ma macro,
en fait, c'est bien qu'elle n'insère pas du bon coté, mais aussi qu'une fois
la colonne C insérée, je me retrouve avec une cellule en C2 qui n'est plus
fusionnée avec les autres (la feuille 2 sur le fichier joint); et pour la
colonne D, une fois insérée, le chiffre 2 se décale vers la droite au lieu de
rester à sa place initiale (mais ça, effectivement, c'est juste que la
colonne s'insère du mauvais côté).

J'espère avoir été plus clair...

Le fichier d'exemple : http://cjoint.com/?efoPlH7IuY

Merci! ;-)
--
géjoun

/Enlever l''année pour m''écrire.../





Bonjour géjoun

Pour la différence entre "Range("A:A").Copy" et "Columns("A:A").Copy", c'est kif-kif la
bourrique à mon avis. L'avantage de Columns est d'etre plus clair à la relecture.
Pour la macro que je t'ai donné, si j'ai compris, elle fonctionne bien mais elle n'insere
pas la plage du bon coté de la colonne selectionnée ?

j-p




Avatar
JpPradier
Ok, vu le problème :
Pour le contourner, remplace :
Cells(1, x).Insert Shift:=xlToRight
par :
Cells(1, x+1).Insert Shift:=xlToRight
Mais ça ne marchera que quand tu insères au milieu des 2 cellules fusionnées (entre C et D
de la feuille de départ) et pas entre D et E.

j-p
Avatar
géjoun
Bonjour,

Bon, ça marche mieux comme ça pour la colone du début :-) .
Et pour la colonne de fin (la D), ce n'est tout simplement pas possible
d'éviter le décalage du chiffre, et que la colonne s'insère quand même sur la
droite?, ou ce n'est pas possible avec la même macro? car dans ce cas, je
pourrais créer 2 boutons dans ma feuille, 1 pour insérer du côté gauche, et
un pour le côté droit.

--
géjoun

/Enlever l''année pour m''écrire.../



Ok, vu le problème :
Pour le contourner, remplace :
Cells(1, x).Insert Shift:=xlToRight
par :
Cells(1, x+1).Insert Shift:=xlToRight
Mais ça ne marchera que quand tu insères au milieu des 2 cellules fusionnées (entre C et D
de la feuille de départ) et pas entre D et E.

j-p


1 2