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.../
De quel chiffre tu parles ? Ce que je veux dire, c'est que la fusion de cellule ne s'appliquera pas à la colonne insérée après la colonne D. Il faudra éventuellement rajouter un bout de code.
j-p
De quel chiffre tu parles ?
Ce que je veux dire, c'est que la fusion de cellule ne s'appliquera pas à la colonne
insérée après la colonne D. Il faudra éventuellement rajouter un bout de code.
De quel chiffre tu parles ? Ce que je veux dire, c'est que la fusion de cellule ne s'appliquera pas à la colonne insérée après la colonne D. Il faudra éventuellement rajouter un bout de code.
j-p
géjoun
Dans le 2ème exemple que j'ai mis en ligne, en cellule D3 de la feuille 1, il y a le chiffre 2, et je voulais savoir si par une deuxième macro, il y aurait quand même la possibilité en se positionnant dans une des cellules de la colonne D d'insérer une nouvelle colonne (copier de la colonne A) entre D et E (aprés E), de façon à ce que la nouvelle colonne apparaisse aprés le chiffre 2, et que la nouvelle cellule E2 soit quand même fusionnée avec celles déja fusionnée (C et D).
Parce que j'arrive pas à voir la démarche qu'il faudrait que je fasse avec l'enregistreur de macro pour arriver à ça.
Est-ce plus clair? :-?
-- géjoun
/Enlever l''année pour m''écrire.../
De quel chiffre tu parles ? Ce que je veux dire, c'est que la fusion de cellule ne s'appliquera pas à la colonne insérée après la colonne D. Il faudra éventuellement rajouter un bout de code.
j-p
Dans le 2ème exemple que j'ai mis en ligne, en cellule D3 de la feuille 1, il
y a le chiffre 2, et je voulais savoir si par une deuxième macro, il y aurait
quand même la possibilité en se positionnant dans une des cellules de la
colonne D d'insérer une nouvelle colonne (copier de la colonne A) entre D et
E (aprés E), de façon à ce que la nouvelle colonne apparaisse aprés le
chiffre 2, et que la nouvelle cellule E2 soit quand même fusionnée avec
celles déja fusionnée (C et D).
Parce que j'arrive pas à voir la démarche qu'il faudrait que je fasse avec
l'enregistreur de macro pour arriver à ça.
Est-ce plus clair? :-?
--
géjoun
dam-mail2006@ifrance.com
/Enlever l''année pour m''écrire.../
De quel chiffre tu parles ?
Ce que je veux dire, c'est que la fusion de cellule ne s'appliquera pas à la colonne
insérée après la colonne D. Il faudra éventuellement rajouter un bout de code.
Dans le 2ème exemple que j'ai mis en ligne, en cellule D3 de la feuille 1, il y a le chiffre 2, et je voulais savoir si par une deuxième macro, il y aurait quand même la possibilité en se positionnant dans une des cellules de la colonne D d'insérer une nouvelle colonne (copier de la colonne A) entre D et E (aprés E), de façon à ce que la nouvelle colonne apparaisse aprés le chiffre 2, et que la nouvelle cellule E2 soit quand même fusionnée avec celles déja fusionnée (C et D).
Parce que j'arrive pas à voir la démarche qu'il faudrait que je fasse avec l'enregistreur de macro pour arriver à ça.
Est-ce plus clair? :-?
-- géjoun
/Enlever l''année pour m''écrire.../
De quel chiffre tu parles ? Ce que je veux dire, c'est que la fusion de cellule ne s'appliquera pas à la colonne insérée après la colonne D. Il faudra éventuellement rajouter un bout de code.
j-p
géjoun
Bonjour,
Ca y est, je pense avoir trouvé une méthode pour arriver à insérer une colonne sur la droite tel que je le souhaite. Voici ce que me donne la macro avec l'enregistreur de macro :
Sub Insertion() Columns("N:N").Select Selection.Insert Shift:=xlToRight Range("O3:O44").Select Selection.Cut Range("N3").Select ActiveSheet.Paste Columns("A:A").Select Selection.Copy Columns("O:O").Select ActiveSheet.Paste End Sub
Sauf que bien entendu, avec l'enregistreur, je me retrouve avec une macro qui est faite pour un cas bien précis, et moi, je voudrais l'adapter pour que ça fonctionne avec toutes les colonnes. Donc en fait, voici ce que je voudrais :
Sub Insertion() Columns("N:N").Select ' Là, je sélectionne la colonne aprés laquelle je souhaite en insérer une nouvelle Selection.Insert Shift:=xlToRight ' J'iinsère une nouvelle colonne ce qui me décale celle dans laquelle j'étais sur la droite Range("O3:O44").Select ' Je sélectionne la plage de la colonne décalée sur la droite, et qui va de la ligne 3 à la ligne 44 Selection.Cut ' Je coupe cette sélection Range("N3").Select ' Je me repositionne dans la colonne vierge qui vient d'être insérée (et qui ne possède pas de formules) ActiveSheet.Paste ' Je colle ma sélection de façon à ramener les données à la suite des autres Columns("A:A").Select ' Je sélectionne la colonne A qui contient toutes les formules Selection.Copy ' Je la copie Columns("O:O").Select 'Je me positonne sur la colonne où j'ai coupé les données tout à l'heure et qui ne contient plus de formule ActiveSheet.Paste ' J'y recolle les formules End Sub
Je ne sais pas si ça aide à comprendre ce que je veux faire; mais je cherche à adapter cette macro de façon à pourvoir obtenir ces différentes opérations pour n'importe quelle colonne dans laquelle je l'exécuterai, et non pas seulement pour la colonnne N et O.
Quelqu'un peut-il m'aider?
Merci!
-- géjoun
/Enlever l''année pour m''écrire.../
Dans le 2ème exemple que j'ai mis en ligne, en cellule D3 de la feuille 1, il y a le chiffre 2, et je voulais savoir si par une deuxième macro, il y aurait quand même la possibilité en se positionnant dans une des cellules de la colonne D d'insérer une nouvelle colonne (copier de la colonne A) entre D et E (aprés E), de façon à ce que la nouvelle colonne apparaisse aprés le chiffre 2, et que la nouvelle cellule E2 soit quand même fusionnée avec celles déja fusionnée (C et D).
Parce que j'arrive pas à voir la démarche qu'il faudrait que je fasse avec l'enregistreur de macro pour arriver à ça.
Est-ce plus clair? :-?
-- géjoun
/Enlever l''année pour m''écrire.../
De quel chiffre tu parles ? Ce que je veux dire, c'est que la fusion de cellule ne s'appliquera pas à la colonne insérée après la colonne D. Il faudra éventuellement rajouter un bout de code.
j-p
Bonjour,
Ca y est, je pense avoir trouvé une méthode pour arriver à insérer une
colonne sur la droite tel que je le souhaite. Voici ce que me donne la macro
avec l'enregistreur de macro :
Sub Insertion()
Columns("N:N").Select
Selection.Insert Shift:=xlToRight
Range("O3:O44").Select
Selection.Cut
Range("N3").Select
ActiveSheet.Paste
Columns("A:A").Select
Selection.Copy
Columns("O:O").Select
ActiveSheet.Paste
End Sub
Sauf que bien entendu, avec l'enregistreur, je me retrouve avec une macro
qui est faite pour un cas bien précis, et moi, je voudrais l'adapter pour que
ça fonctionne avec toutes les colonnes.
Donc en fait, voici ce que je voudrais :
Sub Insertion()
Columns("N:N").Select ' Là, je sélectionne la colonne aprés laquelle je
souhaite en insérer une nouvelle
Selection.Insert Shift:=xlToRight ' J'iinsère une nouvelle colonne ce
qui me décale celle dans laquelle j'étais sur la droite
Range("O3:O44").Select ' Je sélectionne la plage de la colonne décalée
sur la droite, et qui va de la ligne 3 à la ligne 44
Selection.Cut ' Je coupe cette sélection
Range("N3").Select ' Je me repositionne dans la colonne vierge qui vient
d'être insérée (et qui ne possède pas de formules)
ActiveSheet.Paste ' Je colle ma sélection de façon à ramener les données
à la suite des autres
Columns("A:A").Select ' Je sélectionne la colonne A qui contient toutes
les formules
Selection.Copy ' Je la copie
Columns("O:O").Select 'Je me positonne sur la colonne où j'ai coupé les
données tout à l'heure et qui ne contient plus de formule
ActiveSheet.Paste ' J'y recolle les formules
End Sub
Je ne sais pas si ça aide à comprendre ce que je veux faire; mais je cherche
à adapter cette macro de façon à pourvoir obtenir ces différentes opérations
pour n'importe quelle colonne dans laquelle je l'exécuterai, et non pas
seulement pour la colonnne N et O.
Quelqu'un peut-il m'aider?
Merci!
--
géjoun
dam-mail2006@ifrance.com
/Enlever l''année pour m''écrire.../
Dans le 2ème exemple que j'ai mis en ligne, en cellule D3 de la feuille 1, il
y a le chiffre 2, et je voulais savoir si par une deuxième macro, il y aurait
quand même la possibilité en se positionnant dans une des cellules de la
colonne D d'insérer une nouvelle colonne (copier de la colonne A) entre D et
E (aprés E), de façon à ce que la nouvelle colonne apparaisse aprés le
chiffre 2, et que la nouvelle cellule E2 soit quand même fusionnée avec
celles déja fusionnée (C et D).
Parce que j'arrive pas à voir la démarche qu'il faudrait que je fasse avec
l'enregistreur de macro pour arriver à ça.
Est-ce plus clair? :-?
--
géjoun
dam-mail2006@ifrance.com
/Enlever l''année pour m''écrire.../
De quel chiffre tu parles ?
Ce que je veux dire, c'est que la fusion de cellule ne s'appliquera pas à la colonne
insérée après la colonne D. Il faudra éventuellement rajouter un bout de code.
Ca y est, je pense avoir trouvé une méthode pour arriver à insérer une colonne sur la droite tel que je le souhaite. Voici ce que me donne la macro avec l'enregistreur de macro :
Sub Insertion() Columns("N:N").Select Selection.Insert Shift:=xlToRight Range("O3:O44").Select Selection.Cut Range("N3").Select ActiveSheet.Paste Columns("A:A").Select Selection.Copy Columns("O:O").Select ActiveSheet.Paste End Sub
Sauf que bien entendu, avec l'enregistreur, je me retrouve avec une macro qui est faite pour un cas bien précis, et moi, je voudrais l'adapter pour que ça fonctionne avec toutes les colonnes. Donc en fait, voici ce que je voudrais :
Sub Insertion() Columns("N:N").Select ' Là, je sélectionne la colonne aprés laquelle je souhaite en insérer une nouvelle Selection.Insert Shift:=xlToRight ' J'iinsère une nouvelle colonne ce qui me décale celle dans laquelle j'étais sur la droite Range("O3:O44").Select ' Je sélectionne la plage de la colonne décalée sur la droite, et qui va de la ligne 3 à la ligne 44 Selection.Cut ' Je coupe cette sélection Range("N3").Select ' Je me repositionne dans la colonne vierge qui vient d'être insérée (et qui ne possède pas de formules) ActiveSheet.Paste ' Je colle ma sélection de façon à ramener les données à la suite des autres Columns("A:A").Select ' Je sélectionne la colonne A qui contient toutes les formules Selection.Copy ' Je la copie Columns("O:O").Select 'Je me positonne sur la colonne où j'ai coupé les données tout à l'heure et qui ne contient plus de formule ActiveSheet.Paste ' J'y recolle les formules End Sub
Je ne sais pas si ça aide à comprendre ce que je veux faire; mais je cherche à adapter cette macro de façon à pourvoir obtenir ces différentes opérations pour n'importe quelle colonne dans laquelle je l'exécuterai, et non pas seulement pour la colonnne N et O.
Quelqu'un peut-il m'aider?
Merci!
-- géjoun
/Enlever l''année pour m''écrire.../
Dans le 2ème exemple que j'ai mis en ligne, en cellule D3 de la feuille 1, il y a le chiffre 2, et je voulais savoir si par une deuxième macro, il y aurait quand même la possibilité en se positionnant dans une des cellules de la colonne D d'insérer une nouvelle colonne (copier de la colonne A) entre D et E (aprés E), de façon à ce que la nouvelle colonne apparaisse aprés le chiffre 2, et que la nouvelle cellule E2 soit quand même fusionnée avec celles déja fusionnée (C et D).
Parce que j'arrive pas à voir la démarche qu'il faudrait que je fasse avec l'enregistreur de macro pour arriver à ça.
Est-ce plus clair? :-?
-- géjoun
/Enlever l''année pour m''écrire.../
De quel chiffre tu parles ? Ce que je veux dire, c'est que la fusion de cellule ne s'appliquera pas à la colonne insérée après la colonne D. Il faudra éventuellement rajouter un bout de code.
j-p
JpPradier
Bonjour géjoun
Je m'aperçois que je t'ai répondu en bal perso. C'est une erreur de bouton, désolé. Ci-dessous la copie de mon message :
--------------- Bonsoir géjoun
Si ta plage fusionnée commence toujours en C2, alors tu peux rajouter ceci en fin de macro :
Range("C2").Resize(1,x-1).Merge
j-p
--------------
j-p
Bonjour géjoun
Je m'aperçois que je t'ai répondu en bal perso. C'est une erreur de bouton, désolé.
Ci-dessous la copie de mon message :
---------------
Bonsoir géjoun
Si ta plage fusionnée commence toujours en C2, alors tu peux rajouter ceci
en fin de macro :
Je m'aperçois que je t'ai répondu en bal perso. C'est une erreur de bouton, désolé. Ci-dessous la copie de mon message :
--------------- Bonsoir géjoun
Si ta plage fusionnée commence toujours en C2, alors tu peux rajouter ceci en fin de macro :
Range("C2").Resize(1,x-1).Merge
j-p
--------------
j-p
géjoun
Bonjour,
Le code que tu me proposes ne va pas pour mon tableau, car le départ des cellules fusionnées change suivant le nombre de colonnes que comporte mon tableau (il y a plusieurs cellules fusionnées sur la même ligne, et chaque cellules fusionnées ne comporte pas forcément le même nombre de cellules.
Donc, à force de bidouiller, je suis arrivé à adapter le 1er code que tu m'as donné pour faire ce que je souhaite, mais est-ce que tu pourrais quand même regarder si il n'est pas possible de simplifier?
Voici le code original que tu m'as fourni pour insérer une colonne à droite de l'actuelle, mais au départ du tableau :
Sub Gauche() x = ActiveCell.Column Columns("A:A").Copy Cells(1, x + 1).Insert Shift:=xlToRight Application.CutCopyMode = False Columns(x + 1).ColumnWidth = 10 End Sub
Et voici le code que j'ai bricolé pour insérer une colonne toujours à droite de l'actuelle, mais en fin de tableau :
Sub Droite() x = ActiveCell.Column Columns("A:A").Copy Cells(1, x).Insert Shift:=xlToLeft Range(Cells(3, x + 1), Cells(44, x + 1)).Cut Cells(3, x).Select ActiveSheet.Paste Columns("A:A").Copy Cells(1, x + 1).Select ActiveSheet.Paste Columns(x).ColumnWidth = 10 Columns(x + 1).ColumnWidth = 10 Application.CutCopyMode = False End Sub
Je t'envoie sur ta BAL un exemple du fichier dans lequel j'ai inséré le code pour mieux comprendre la finalité du bouzin, si t'as 3 sec pour y jeter un oeil...
Et une dernière question, j'ai eu beau faire des essais pour voir la différence entre les 2, je ne vois pas ce que ça change à "Insert Shift:=xlToLeft" de mettre "Left" ou "Right" à la fin (c'est pourtant bien ça qui définit de quel côté insérer la nouvelle colonne non?).
Merci!
-- géjoun
/Enlever l''année pour m''écrire.../
Bonjour géjoun
Je m'aperçois que je t'ai répondu en bal perso. C'est une erreur de bouton, désolé. Ci-dessous la copie de mon message :
--------------- Bonsoir géjoun
Si ta plage fusionnée commence toujours en C2, alors tu peux rajouter ceci en fin de macro :
Range("C2").Resize(1,x-1).Merge
j-p
--------------
j-p
Bonjour,
Le code que tu me proposes ne va pas pour mon tableau, car le départ des
cellules fusionnées change suivant le nombre de colonnes que comporte mon
tableau (il y a plusieurs cellules fusionnées sur la même ligne, et chaque
cellules fusionnées ne comporte pas forcément le même nombre de cellules.
Donc, à force de bidouiller, je suis arrivé à adapter le 1er code que tu
m'as donné pour faire ce que je souhaite, mais est-ce que tu pourrais quand
même regarder si il n'est pas possible de simplifier?
Voici le code original que tu m'as fourni pour insérer une colonne à droite
de l'actuelle, mais au départ du tableau :
Sub Gauche()
x = ActiveCell.Column
Columns("A:A").Copy
Cells(1, x + 1).Insert Shift:=xlToRight
Application.CutCopyMode = False
Columns(x + 1).ColumnWidth = 10
End Sub
Et voici le code que j'ai bricolé pour insérer une colonne toujours à droite
de l'actuelle, mais en fin de tableau :
Sub Droite()
x = ActiveCell.Column
Columns("A:A").Copy
Cells(1, x).Insert Shift:=xlToLeft
Range(Cells(3, x + 1), Cells(44, x + 1)).Cut
Cells(3, x).Select
ActiveSheet.Paste
Columns("A:A").Copy
Cells(1, x + 1).Select
ActiveSheet.Paste
Columns(x).ColumnWidth = 10
Columns(x + 1).ColumnWidth = 10
Application.CutCopyMode = False
End Sub
Je t'envoie sur ta BAL un exemple du fichier dans lequel j'ai inséré le code
pour mieux comprendre la finalité du bouzin, si t'as 3 sec pour y jeter un
oeil...
Et une dernière question, j'ai eu beau faire des essais pour voir la
différence entre les 2, je ne vois pas ce que ça change à "Insert
Shift:=xlToLeft" de mettre "Left" ou "Right" à la fin (c'est pourtant bien ça
qui définit de quel côté insérer la nouvelle colonne non?).
Merci!
--
géjoun
dam-mail2006@ifrance.com
/Enlever l''année pour m''écrire.../
Bonjour géjoun
Je m'aperçois que je t'ai répondu en bal perso. C'est une erreur de bouton, désolé.
Ci-dessous la copie de mon message :
---------------
Bonsoir géjoun
Si ta plage fusionnée commence toujours en C2, alors tu peux rajouter ceci
en fin de macro :
Le code que tu me proposes ne va pas pour mon tableau, car le départ des cellules fusionnées change suivant le nombre de colonnes que comporte mon tableau (il y a plusieurs cellules fusionnées sur la même ligne, et chaque cellules fusionnées ne comporte pas forcément le même nombre de cellules.
Donc, à force de bidouiller, je suis arrivé à adapter le 1er code que tu m'as donné pour faire ce que je souhaite, mais est-ce que tu pourrais quand même regarder si il n'est pas possible de simplifier?
Voici le code original que tu m'as fourni pour insérer une colonne à droite de l'actuelle, mais au départ du tableau :
Sub Gauche() x = ActiveCell.Column Columns("A:A").Copy Cells(1, x + 1).Insert Shift:=xlToRight Application.CutCopyMode = False Columns(x + 1).ColumnWidth = 10 End Sub
Et voici le code que j'ai bricolé pour insérer une colonne toujours à droite de l'actuelle, mais en fin de tableau :
Sub Droite() x = ActiveCell.Column Columns("A:A").Copy Cells(1, x).Insert Shift:=xlToLeft Range(Cells(3, x + 1), Cells(44, x + 1)).Cut Cells(3, x).Select ActiveSheet.Paste Columns("A:A").Copy Cells(1, x + 1).Select ActiveSheet.Paste Columns(x).ColumnWidth = 10 Columns(x + 1).ColumnWidth = 10 Application.CutCopyMode = False End Sub
Je t'envoie sur ta BAL un exemple du fichier dans lequel j'ai inséré le code pour mieux comprendre la finalité du bouzin, si t'as 3 sec pour y jeter un oeil...
Et une dernière question, j'ai eu beau faire des essais pour voir la différence entre les 2, je ne vois pas ce que ça change à "Insert Shift:=xlToLeft" de mettre "Left" ou "Right" à la fin (c'est pourtant bien ça qui définit de quel côté insérer la nouvelle colonne non?).
Merci!
-- géjoun
/Enlever l''année pour m''écrire.../
Bonjour géjoun
Je m'aperçois que je t'ai répondu en bal perso. C'est une erreur de bouton, désolé. Ci-dessous la copie de mon message :
--------------- Bonsoir géjoun
Si ta plage fusionnée commence toujours en C2, alors tu peux rajouter ceci en fin de macro :
Range("C2").Resize(1,x-1).Merge
j-p
--------------
j-p
JpPradier
Bonsoir géjoun
Je suis arrivé à faire quelque chose qui a l'air de rouler, mais c'est un peu usine à gaz.
j-p
Sub GaucheDroite()
x = ActiveCell.Column Columns("A:A").Copy Cells(1, x + 1).Insert Shift:=xlToRight Application.CutCopyMode = False Columns(x + 1).ColumnWidth = 12.57 If Cells(2, x + 1).MergeCells Then para = 0 Else para = 1 End If debu = Cells(2, x).MergeArea.Address fin = Cells(2, x + para).Address With Range(debu, fin) .Merge .Borders(xlEdgeLeft).LineStyle = xlContinuous .Borders(xlEdgeTop).LineStyle = xlContinuous .Borders(xlEdgeBottom).LineStyle = xlContinuous .Borders(xlEdgeRight).LineStyle = xlContinuous End With
End Sub
Bonsoir géjoun
Je suis arrivé à faire quelque chose qui a l'air de rouler, mais c'est un peu usine à gaz.
j-p
Sub GaucheDroite()
x = ActiveCell.Column
Columns("A:A").Copy
Cells(1, x + 1).Insert Shift:=xlToRight
Application.CutCopyMode = False
Columns(x + 1).ColumnWidth = 12.57
If Cells(2, x + 1).MergeCells Then
para = 0
Else
para = 1
End If
debu = Cells(2, x).MergeArea.Address
fin = Cells(2, x + para).Address
With Range(debu, fin)
.Merge
.Borders(xlEdgeLeft).LineStyle = xlContinuous
.Borders(xlEdgeTop).LineStyle = xlContinuous
.Borders(xlEdgeBottom).LineStyle = xlContinuous
.Borders(xlEdgeRight).LineStyle = xlContinuous
End With
Je suis arrivé à faire quelque chose qui a l'air de rouler, mais c'est un peu usine à gaz.
j-p
Sub GaucheDroite()
x = ActiveCell.Column Columns("A:A").Copy Cells(1, x + 1).Insert Shift:=xlToRight Application.CutCopyMode = False Columns(x + 1).ColumnWidth = 12.57 If Cells(2, x + 1).MergeCells Then para = 0 Else para = 1 End If debu = Cells(2, x).MergeArea.Address fin = Cells(2, x + para).Address With Range(debu, fin) .Merge .Borders(xlEdgeLeft).LineStyle = xlContinuous .Borders(xlEdgeTop).LineStyle = xlContinuous .Borders(xlEdgeBottom).LineStyle = xlContinuous .Borders(xlEdgeRight).LineStyle = xlContinuous End With
End Sub
géjoun
Bonjour,
Je viens de regarder ta macro, et bien entendu... ça me va à moitié... :-( (je suis un peu chiant...)
Effectivement, elle fonctionne bien pour insérer des colonnes au début et en fin du tableau, sauf qu'en fin de tableau, elle m'insère des cellules non fusionnées (à partir de la ligne 46, et toutes celles qui sont en dessous).
Mais bon, comme tu dis, je saisis pas encore toutes les subtilités de ton code, mais si je comprends à peu près le principe, c'est vrai que ça tourne à l'usine à gaz.
Et en plus de ce problème de cellules fusionnées, il y a un autre truc auquel j'avais pas fait attention, et qui merdoie, c'est qu'à la ligne 42, pour chaque groupe de colonnes, j'ai (normalement) une plage nommée (par exemple de E42 à H42; puis de J42 à H 42, puis M42 à N42...etc...); et ces plages me servent ensuite à la ligne 46 pour la somme des cellules qui les composent; et j'ai remarqué que lorsque j'insère une colonne en début de tableau, ça ne pose pas de soucis, la plage s'adapte automatiquement au nouveau nombre de cellules, mais lorsque j'insère en fin de tableau, la, la plage reste figée et ignore la nouvelle cellule insérée; donc ça aussi ça me convient pas :-( .
Je repars dans mes essais pour voir si j'arrive à quelque chose.
Merci quand même! -- géjoun
/Enlever l''année pour m''écrire.../
Bonsoir géjoun
Je suis arrivé à faire quelque chose qui a l'air de rouler, mais c'est un peu usine à gaz.
j-p
Sub GaucheDroite()
x = ActiveCell.Column Columns("A:A").Copy Cells(1, x + 1).Insert Shift:=xlToRight Application.CutCopyMode = False Columns(x + 1).ColumnWidth = 12.57 If Cells(2, x + 1).MergeCells Then para = 0 Else para = 1 End If debu = Cells(2, x).MergeArea.Address fin = Cells(2, x + para).Address With Range(debu, fin) .Merge .Borders(xlEdgeLeft).LineStyle = xlContinuous .Borders(xlEdgeTop).LineStyle = xlContinuous .Borders(xlEdgeBottom).LineStyle = xlContinuous .Borders(xlEdgeRight).LineStyle = xlContinuous End With
End Sub
Bonjour,
Je viens de regarder ta macro, et bien entendu... ça me va à moitié... :-(
(je suis un peu chiant...)
Effectivement, elle fonctionne bien pour insérer des colonnes au début et en
fin du tableau, sauf qu'en fin de tableau, elle m'insère des cellules non
fusionnées (à partir de la ligne 46, et toutes celles qui sont en dessous).
Mais bon, comme tu dis, je saisis pas encore toutes les subtilités de ton
code, mais si je comprends à peu près le principe, c'est vrai que ça tourne à
l'usine à gaz.
Et en plus de ce problème de cellules fusionnées, il y a un autre truc
auquel j'avais pas fait attention, et qui merdoie, c'est qu'à la ligne 42,
pour chaque groupe de colonnes, j'ai (normalement) une plage nommée (par
exemple de E42 à H42; puis de J42 à H 42, puis M42 à N42...etc...); et ces
plages me servent ensuite à la ligne 46 pour la somme des cellules qui les
composent; et j'ai remarqué que lorsque j'insère une colonne en début de
tableau, ça ne pose pas de soucis, la plage s'adapte automatiquement au
nouveau nombre de cellules, mais lorsque j'insère en fin de tableau, la, la
plage reste figée et ignore la nouvelle cellule insérée; donc ça aussi ça me
convient pas :-( .
Je repars dans mes essais pour voir si j'arrive à quelque chose.
Merci quand même!
--
géjoun
dam-mail2006@ifrance.com
/Enlever l''année pour m''écrire.../
Bonsoir géjoun
Je suis arrivé à faire quelque chose qui a l'air de rouler, mais c'est un peu usine à gaz.
j-p
Sub GaucheDroite()
x = ActiveCell.Column
Columns("A:A").Copy
Cells(1, x + 1).Insert Shift:=xlToRight
Application.CutCopyMode = False
Columns(x + 1).ColumnWidth = 12.57
If Cells(2, x + 1).MergeCells Then
para = 0
Else
para = 1
End If
debu = Cells(2, x).MergeArea.Address
fin = Cells(2, x + para).Address
With Range(debu, fin)
.Merge
.Borders(xlEdgeLeft).LineStyle = xlContinuous
.Borders(xlEdgeTop).LineStyle = xlContinuous
.Borders(xlEdgeBottom).LineStyle = xlContinuous
.Borders(xlEdgeRight).LineStyle = xlContinuous
End With
Je viens de regarder ta macro, et bien entendu... ça me va à moitié... :-( (je suis un peu chiant...)
Effectivement, elle fonctionne bien pour insérer des colonnes au début et en fin du tableau, sauf qu'en fin de tableau, elle m'insère des cellules non fusionnées (à partir de la ligne 46, et toutes celles qui sont en dessous).
Mais bon, comme tu dis, je saisis pas encore toutes les subtilités de ton code, mais si je comprends à peu près le principe, c'est vrai que ça tourne à l'usine à gaz.
Et en plus de ce problème de cellules fusionnées, il y a un autre truc auquel j'avais pas fait attention, et qui merdoie, c'est qu'à la ligne 42, pour chaque groupe de colonnes, j'ai (normalement) une plage nommée (par exemple de E42 à H42; puis de J42 à H 42, puis M42 à N42...etc...); et ces plages me servent ensuite à la ligne 46 pour la somme des cellules qui les composent; et j'ai remarqué que lorsque j'insère une colonne en début de tableau, ça ne pose pas de soucis, la plage s'adapte automatiquement au nouveau nombre de cellules, mais lorsque j'insère en fin de tableau, la, la plage reste figée et ignore la nouvelle cellule insérée; donc ça aussi ça me convient pas :-( .
Je repars dans mes essais pour voir si j'arrive à quelque chose.
Merci quand même! -- géjoun
/Enlever l''année pour m''écrire.../
Bonsoir géjoun
Je suis arrivé à faire quelque chose qui a l'air de rouler, mais c'est un peu usine à gaz.
j-p
Sub GaucheDroite()
x = ActiveCell.Column Columns("A:A").Copy Cells(1, x + 1).Insert Shift:=xlToRight Application.CutCopyMode = False Columns(x + 1).ColumnWidth = 12.57 If Cells(2, x + 1).MergeCells Then para = 0 Else para = 1 End If debu = Cells(2, x).MergeArea.Address fin = Cells(2, x + para).Address With Range(debu, fin) .Merge .Borders(xlEdgeLeft).LineStyle = xlContinuous .Borders(xlEdgeTop).LineStyle = xlContinuous .Borders(xlEdgeBottom).LineStyle = xlContinuous .Borders(xlEdgeRight).LineStyle = xlContinuous End With
End Sub
géjoun
Re,
Aprés avoir usé encore et encore l'enregistreur de macros, et des recherches dans les archives du forum, je suis arrivé à pondre un truc qui fonctionne pas trop mal, mais par contre, je vais avoir une macro pour l'insertion des colonnes au début, et une pour la fin du tableau. Voici la chose :
Sub COLONNE2FIN() x = ActiveCell.Column Columns(x).Insert Shift:=xlToRight Range(Cells(3, x + 1), Cells(44, x + 1)).AutoFill Destination:=Range(Cells(3, x), Cells(44, x + 1)), Type:=xlFillCopy Union(Range(Cells(3, x + 1), Cells(34, x + 1)), Cells(40, x + 1)).ClearContents End Sub
Qu'en penses-tu? On peut encore la simplifier?
-- géjoun
/Enlever l''année pour m''écrire.../
Bonjour,
Je viens de regarder ta macro, et bien entendu... ça me va à moitié... :-( (je suis un peu chiant...)
Effectivement, elle fonctionne bien pour insérer des colonnes au début et en fin du tableau, sauf qu'en fin de tableau, elle m'insère des cellules non fusionnées (à partir de la ligne 46, et toutes celles qui sont en dessous).
Mais bon, comme tu dis, je saisis pas encore toutes les subtilités de ton code, mais si je comprends à peu près le principe, c'est vrai que ça tourne à l'usine à gaz.
Et en plus de ce problème de cellules fusionnées, il y a un autre truc auquel j'avais pas fait attention, et qui merdoie, c'est qu'à la ligne 42, pour chaque groupe de colonnes, j'ai (normalement) une plage nommée (par exemple de E42 à H42; puis de J42 à H 42, puis M42 à N42...etc...); et ces plages me servent ensuite à la ligne 46 pour la somme des cellules qui les composent; et j'ai remarqué que lorsque j'insère une colonne en début de tableau, ça ne pose pas de soucis, la plage s'adapte automatiquement au nouveau nombre de cellules, mais lorsque j'insère en fin de tableau, la, la plage reste figée et ignore la nouvelle cellule insérée; donc ça aussi ça me convient pas :-( .
Je repars dans mes essais pour voir si j'arrive à quelque chose.
Merci quand même! -- géjoun
/Enlever l''année pour m''écrire.../
Bonsoir géjoun
Je suis arrivé à faire quelque chose qui a l'air de rouler, mais c'est un peu usine à gaz.
j-p
Sub GaucheDroite()
x = ActiveCell.Column Columns("A:A").Copy Cells(1, x + 1).Insert Shift:=xlToRight Application.CutCopyMode = False Columns(x + 1).ColumnWidth = 12.57 If Cells(2, x + 1).MergeCells Then para = 0 Else para = 1 End If debu = Cells(2, x).MergeArea.Address fin = Cells(2, x + para).Address With Range(debu, fin) .Merge .Borders(xlEdgeLeft).LineStyle = xlContinuous .Borders(xlEdgeTop).LineStyle = xlContinuous .Borders(xlEdgeBottom).LineStyle = xlContinuous .Borders(xlEdgeRight).LineStyle = xlContinuous End With
End Sub
Re,
Aprés avoir usé encore et encore l'enregistreur de macros, et des recherches
dans les archives du forum, je suis arrivé à pondre un truc qui fonctionne
pas trop mal, mais par contre, je vais avoir une macro pour l'insertion des
colonnes au début, et une pour la fin du tableau.
Voici la chose :
Sub COLONNE2FIN()
x = ActiveCell.Column
Columns(x).Insert Shift:=xlToRight
Range(Cells(3, x + 1), Cells(44, x + 1)).AutoFill
Destination:=Range(Cells(3, x), Cells(44, x + 1)), Type:=xlFillCopy
Union(Range(Cells(3, x + 1), Cells(34, x + 1)), Cells(40, x +
1)).ClearContents
End Sub
Qu'en penses-tu?
On peut encore la simplifier?
--
géjoun
dam-mail2006@ifrance.com
/Enlever l''année pour m''écrire.../
Bonjour,
Je viens de regarder ta macro, et bien entendu... ça me va à moitié... :-(
(je suis un peu chiant...)
Effectivement, elle fonctionne bien pour insérer des colonnes au début et en
fin du tableau, sauf qu'en fin de tableau, elle m'insère des cellules non
fusionnées (à partir de la ligne 46, et toutes celles qui sont en dessous).
Mais bon, comme tu dis, je saisis pas encore toutes les subtilités de ton
code, mais si je comprends à peu près le principe, c'est vrai que ça tourne à
l'usine à gaz.
Et en plus de ce problème de cellules fusionnées, il y a un autre truc
auquel j'avais pas fait attention, et qui merdoie, c'est qu'à la ligne 42,
pour chaque groupe de colonnes, j'ai (normalement) une plage nommée (par
exemple de E42 à H42; puis de J42 à H 42, puis M42 à N42...etc...); et ces
plages me servent ensuite à la ligne 46 pour la somme des cellules qui les
composent; et j'ai remarqué que lorsque j'insère une colonne en début de
tableau, ça ne pose pas de soucis, la plage s'adapte automatiquement au
nouveau nombre de cellules, mais lorsque j'insère en fin de tableau, la, la
plage reste figée et ignore la nouvelle cellule insérée; donc ça aussi ça me
convient pas :-( .
Je repars dans mes essais pour voir si j'arrive à quelque chose.
Merci quand même!
--
géjoun
dam-mail2006@ifrance.com
/Enlever l''année pour m''écrire.../
Bonsoir géjoun
Je suis arrivé à faire quelque chose qui a l'air de rouler, mais c'est un peu usine à gaz.
j-p
Sub GaucheDroite()
x = ActiveCell.Column
Columns("A:A").Copy
Cells(1, x + 1).Insert Shift:=xlToRight
Application.CutCopyMode = False
Columns(x + 1).ColumnWidth = 12.57
If Cells(2, x + 1).MergeCells Then
para = 0
Else
para = 1
End If
debu = Cells(2, x).MergeArea.Address
fin = Cells(2, x + para).Address
With Range(debu, fin)
.Merge
.Borders(xlEdgeLeft).LineStyle = xlContinuous
.Borders(xlEdgeTop).LineStyle = xlContinuous
.Borders(xlEdgeBottom).LineStyle = xlContinuous
.Borders(xlEdgeRight).LineStyle = xlContinuous
End With
Aprés avoir usé encore et encore l'enregistreur de macros, et des recherches dans les archives du forum, je suis arrivé à pondre un truc qui fonctionne pas trop mal, mais par contre, je vais avoir une macro pour l'insertion des colonnes au début, et une pour la fin du tableau. Voici la chose :
Sub COLONNE2FIN() x = ActiveCell.Column Columns(x).Insert Shift:=xlToRight Range(Cells(3, x + 1), Cells(44, x + 1)).AutoFill Destination:=Range(Cells(3, x), Cells(44, x + 1)), Type:=xlFillCopy Union(Range(Cells(3, x + 1), Cells(34, x + 1)), Cells(40, x + 1)).ClearContents End Sub
Qu'en penses-tu? On peut encore la simplifier?
-- géjoun
/Enlever l''année pour m''écrire.../
Bonjour,
Je viens de regarder ta macro, et bien entendu... ça me va à moitié... :-( (je suis un peu chiant...)
Effectivement, elle fonctionne bien pour insérer des colonnes au début et en fin du tableau, sauf qu'en fin de tableau, elle m'insère des cellules non fusionnées (à partir de la ligne 46, et toutes celles qui sont en dessous).
Mais bon, comme tu dis, je saisis pas encore toutes les subtilités de ton code, mais si je comprends à peu près le principe, c'est vrai que ça tourne à l'usine à gaz.
Et en plus de ce problème de cellules fusionnées, il y a un autre truc auquel j'avais pas fait attention, et qui merdoie, c'est qu'à la ligne 42, pour chaque groupe de colonnes, j'ai (normalement) une plage nommée (par exemple de E42 à H42; puis de J42 à H 42, puis M42 à N42...etc...); et ces plages me servent ensuite à la ligne 46 pour la somme des cellules qui les composent; et j'ai remarqué que lorsque j'insère une colonne en début de tableau, ça ne pose pas de soucis, la plage s'adapte automatiquement au nouveau nombre de cellules, mais lorsque j'insère en fin de tableau, la, la plage reste figée et ignore la nouvelle cellule insérée; donc ça aussi ça me convient pas :-( .
Je repars dans mes essais pour voir si j'arrive à quelque chose.
Merci quand même! -- géjoun
/Enlever l''année pour m''écrire.../
Bonsoir géjoun
Je suis arrivé à faire quelque chose qui a l'air de rouler, mais c'est un peu usine à gaz.
j-p
Sub GaucheDroite()
x = ActiveCell.Column Columns("A:A").Copy Cells(1, x + 1).Insert Shift:=xlToRight Application.CutCopyMode = False Columns(x + 1).ColumnWidth = 12.57 If Cells(2, x + 1).MergeCells Then para = 0 Else para = 1 End If debu = Cells(2, x).MergeArea.Address fin = Cells(2, x + para).Address With Range(debu, fin) .Merge .Borders(xlEdgeLeft).LineStyle = xlContinuous .Borders(xlEdgeTop).LineStyle = xlContinuous .Borders(xlEdgeBottom).LineStyle = xlContinuous .Borders(xlEdgeRight).LineStyle = xlContinuous End With