Insérer une ligne en dessous et copier en autofill

Résolu
eltchico -  
michel_m Messages postés 16602 Date d'inscription   Statut Contributeur Dernière intervention   -
Bonjour,

Je consulte très régulièrement votre forum et y trouve énormément de réponse, et pour ça merci mais là je tourne en "boucle" si je peux me permettre.
Voici mon besoin :
Je veux insérer une ligne en dessous de la sélection, pour ça j'y arrive
ActiveCell.Range("A2").EntireRow.Insert Shift:=xlDown

A partir de là par contre débute mon problème, je voudrais faire un copier coller (façon glissé donc autofill) uniquement des cellules de la ligne active des colonnes C à I
J'ai donc essayé d'écrire
ActiveCell.Range("A2").EntireRow.Insert Shift:=xlDown
ActiveCell.Range("C1:I1").Select
Selection.AutoFill Destination:=ActiveCell.Range("C1:I2"), Type:=xlFillDefault
ActiveCell.Range("C1:I2").Select

Problème
1/ ActiveCell.Range("C1:I1").Select sélectionne de la 3ème à la 9ème colonne depuis la cellule active qui est ma référence (activeCell) donc si je ne suis pas dans la colonne A pour ActiveCell ça ne marche pas (exemple, si ma cellule active est en colonne C alors activecell.range("C1:I1) me sélectionne les colonnes E à K au lieu de C à I comme je voudrais

2/ Selection.AutoFill Destination:=ActiveCell.Range("C1:I2"), Type:=xlFillDefault
La méthode autofill de la classe range a échoué

Auriez vous donc s'il vous plaît une petite aide à m'apporter pour que peut importe la cellule active cela me sélectionne bien les cellules des colonnes C à I de cette ligne active pour faire un copier/glisser vers le bas dans la ligne nouvellement inséré

L'objectif étant de garder des incrémentation automatique du type lundi mardi... ou 1.1 deviendrais 1.2 etc...

Par avance merci.


4 réponses

ccm81 Messages postés 10909 Date d'inscription   Statut Membre Dernière intervention   2 433
 
Bonjour

essaies ceci

Range("A2").EntireRow.Insert Shift:=xlDown
Range("C1:I1").Select
Selection.AutoFill Destination:=Range("C1:I2"), Type:=xlFillDefault
Range("C1:I2").Select


Cdlmnt
0
eltchico26 Messages postés 3 Date d'inscription   Statut Membre Dernière intervention  
 
Bonjour,

Je n'ai pas le même pseudo car j'ai dû créé un compte membre pour pouvoir répondre mais c'est bien moi.

Merci pour la réponse, cependant, le fait d'écrire Range("A2") cela va systématiquement m'insérer une ligne par rapport à la cellule A2 de ma feuille, or je souhaite insérer une ligne en dessous de la ligne active

Si par exemple je me trouve sur la ligne 9 je veux insérer une ligne en dessous de la ligne 9 voilà pourquoi j'avais écrit ActiveCell.Range("A2")

Le souci est que si c'est une case en colonne D qui est sélectionné alors VBA comprend que ma référence activecell est la 1ère colonne.

J'essaye de trouver un équivalent à activecell du type activerow mais à priori cela n'existe pas

Merci quand même d'avoir essayé, s'il y a d'autres propositions...
0
michel_m Messages postés 16602 Date d'inscription   Statut Contributeur Dernière intervention   3 313
 
Bonjour Eltchico, CCM

a quoi sert range("A2") ?

parce que
ActiveCell.EntireRow.Insert Shift:=xlDown
insert une ligne en dessous de la ligne de la cellule active qqsoit sa colonne

tu peux aussi écrire
Rows(ActiveCell.Row + 1).Insert

Pour C1:I1
tu peux utiliser la fonction offset
Dim ligne As Byte
ligne = ActiveCell.Row
Rows(ligne + 1).Insert
Range(Cells(ligne, "C"), Cells(ligne, "I")).Copy ActiveCell.Offset(1, 0)

 Michel
0
eltchico26 Messages postés 3 Date d'inscription   Statut Membre Dernière intervention  
 
RE,

Tout d'abord merci pour vos réponses rapides
Michel_m, j'ai réussi à me dépatouiller entre ce que tu m'as proposé et mon code de base pour finalement arriver à cela :

Public Sub insertionligneCCM2()
Dim ligne As Byte
ligne = ActiveCell.Row
Rows(ligne + 1).Insert
Range(Cells(ligne, "C"), Cells(ligne, "I")).Select
Selection.AutoFill Destination:=Range(Cells(ligne, "C"), Cells(ligne + 1, "I")), Type:=xlFillDefault
End Sub

Et là je retrouve tout ce que je veux.
Peut importe la cellule sélectionnée dans la ligne active il me fait bien une insertion ligne en dessous puis me fait un copier/glisser (Autofill) des cellules C à I de la ligne active dans la ligne active +1.

Attention michel_m, activeCell.EntireRow.Insert Shift:=xlDown insère une ligne au-dessus de la ligne active et pas en dessous.


Sinon pour répondre à ta question, mon Range("A2") me servait de référence pour dire justement d'insérer une ligne en dessous de A1 (référence de ma ligne active) mais je suis assez novice en vba donc on fait comme on peut au début...

Avec ces aides encore merci.
Pour moi sujet clos.
En espérant qu'il soit utile à d'autres.
0
michel_m Messages postés 16602 Date d'inscription   Statut Contributeur Dernière intervention   3 313
 
Attention michel_m, activeCell.EntireRow.Insert Shift:=xlDown insère une ligne au-dessus de la ligne active et pas en dessous.

N'importe quoi!!!

En espérant qu'il soit utile à d'autres
Surtout pas ! Très mauvais code
 Michel
0
eltchico26 Messages postés 3 Date d'inscription   Statut Membre Dernière intervention  
 
Bonjour

désolé michel_m mais quand je test activecell.entirerow.insert etc... cela m'insère une ligne au dessus et pas en dessous.

Par contre si tu penses que c'est un très mauvais code alors
1/ j'aimerais comprendre pourquoi afin de m'améliorer
2/ je suis preneur pour l'améliorer d'avantage si tu veux bien.
0
michel_m Messages postés 16602 Date d'inscription   Statut Contributeur Dernière intervention   3 313 > eltchico26 Messages postés 3 Date d'inscription   Statut Membre Dernière intervention  
 
bonjour
J'ai écris
ligne = ActiveCell.Row
Rows(ligne + 1).Insert


et non
activecell.entirerow.insert ....


autrement dit , ca ne sert à rien de t'aider ?
0