Inserer 2 cellules d'une ligne

Bonjour a tous, je ne trouve pas tout a fait. Je désire inserer les 2 cellules d'une ligne colonne 8 et 9 de la feuille ASS au meme endroit sur la feuille ASS2.

J'ai essayé pour colonne 9:

 Sheets("ASS").Cells(i + 2, 9).Copy
        Sheets("ASS2").Cells(i + 2, 9).Insert
        Sheets("ASS2").Cells(i + 2, 9).Paste

Bonjour,

Yen a qu'une !

        Sheets("ASS").Cells(i + 2, 9).Copy
        Sheets("ASS2").Cells(i + 2, 9).Insert xlShiftDown

Mes respects du soir, MFerrand,

Salut Capucin,

une petite fantaisie VB pour copier tes lignes.

Tu cliques n'importe où dans les colonnes AZ et une sélection de deux cellules contigües se recopient dans l'autre feuille!

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
'
If Not Application.Intersect(Target, Range("A:Z")) Is Nothing Then
    iCol = Target.Column
    iRow = Target.Row
    Worksheets("Feuil1").Range(Cells(iRow, iCol), Cells(iRow, iCol + 1)).Copy
    Worksheets("Feuil2").Cells(iRow, iCol).Insert shift:=xlDown
    Application.CutCopyMode = False
End If
'
End Sub

A+

Salut a vous deux! En adaptant pour copier 2 cellules contigües, est-ce que ceci est bon:

Sheets("ASS").range(Cells(i + 2, 9),Cells(i + 2, 10)).Copy
 Sheets("ASS2").Cells(i + 2, 9).Insert xlShiftDown

Salut Capucin,

selon une expérience où je me suis arraché les cheveux, tu devras être prudent sur cette ligne-ci, si tu appelles cette instruction depuis une feuille autre que "ASS".

Sheets("ASS").range(Cells(i + 2, 9),Cells(i + 2, 10)).Copy

Dans ce cas, il faudra très certainement écrire alors :

WorkSheets("ASS").range(WorkSheets("ASS").Cells(i + 2, 9),WorkSheets("ASS").Cells(i + 2, 10)).Copy

Histoire qu'Excel affecte bien l'adresse des Cells(...) à "ASS"

A+

En fait, je l'apelle depuis un UserFOrm.

De mon coté, je venais d'essayer cecei mais j'ai eu une erreur.

Sheets("ASS").Range(Cells(i + 2, 8), Cells(i + 2, 9)).Copy

Sheets("ASS2").Range(Cells(i + 2, 8), Cells(i + 2, 9)).Insert

Sheets("ASS2").Range(Cells(i + 2, 8), Cells(i + 2, 9)).Copy

Apres mur reflexion, il faudrait que je prenne le contenu des cellules des colonnes 1 a 9 de la ligne courante de ASS et que j' insére ses cellules dans ASS2, donc ces cellules doivent décaler les autres vers le bas.

Quelque chose comme ça, donc...

'
iRow = 6
Worksheets("Feuil1").Range("A" & iRow, Range("I" & iRow)).Copy
Worksheets("Feuil2").Range("A" & iRow).Insert shift:=xlDown
Application.CutCopyMode = False
'

Avec iRow comme ligne variable.

A+

En adaptant ton code, j'obtient ce que je voulais. Par contre j'ai une petite erreur "erreur définie par l'application ou par l'objet" si la fenetre active est ASS2 au lieu de ASS, sais-tu pourquoi?

 Worksheets("ASS").Range("A" & i + 2, Range("J" & i + 2)).Copy
         Worksheets("ASS2").Range("A" & i + 2).Insert Shift:=xlDown
         Application.CutCopyMode = False

Mais qu'est-ce que j'ai écrit là...

Il se fait tard, je fatigue...

 Worksheets("ASS").Range("A" & i + 2 & ":J" & i + 2)).Copy

J'espère qu'un as ne verra pas ça... il rigole encore demain soir...

A+


Et une parenthèse de moins, ça le fera aussi... Pfffffffffffffffffffffff...

Worksheets("ASS").Range("A" & i + 2 & ":J" & i + 2[color=#FF0000])[/color].Copy

T'en fait pas, j'en fait des jolis aussi.

En parlant de ca, ton code ne marche plus, peut etre quelque chose du coté de i qui est une variable, (ce que j'utilise).

Worksheets("ASS").Range("A" & i + 2 & ":J" & i + 2)).Copy

Non, il y a une parenthèse de trop!

 & ":J" & i + 2)).Copy

Je viens juste de m'en apercevoir. Ton code marche parfaitement!

Je te laisse te reposer!

Capucin

Beaucoup de rattrapage ! Vous avez des ressources nocturnes ! (il est vrai qu'on était rendu au matin chez moi, et le le matin je dors...)

Lu en diagonale, mais :

  • L'insertion doit être de même taille que la copie...
  • Si l'insertion ne concerne pas une ligne entière ou une colonne entière, le paramètre shift doit toujours être indiqué :
xlShiftDown ou xlShiftToTight (même valeur que xlDown que continue à mettre l'enregistreur, Microsoft a revu et augmenté les énumérations de constantes en gardant les anciennes pour compatibilité...)

Inutile de nommer les arguments, surtout quand c'est le premier : de façon générale, ne pas les nommer est plus pratique et raccourcit les commande, ils doivent être indiqués dans l'ordre, en n'omettant pas l'emplacement vide de ceux que l'on omet ; les nommer est utile quand il y en a beaucoup et qu'on ne les utilise jamais tous ou dans le désordre ou qu'il y aurait ambiguïté à la lecture (cas pour le Tri, le Filtrage, ou pour before/after lors d'une insertion ou copie de feuille...)

-CutCopyMode n'est jamais nécessaire (sauf dans 2 cas) : cette commande (avec =False) a pour effet de vider le presse-papier, or dans le cas d'un copier-coller ordinaire la première action qui suit a pour effet de le vider automatiquement (ce qui explique qu'on le retrouve presque toujours dans le code enregistré, car sans le vouloir ni le savoir l'utilisateur l'a fait) ; l'utilité est lorsqu'il n'y a pas d'action qui le vide, pour éliminer le scintillement de la zone copiée si elle reste en vue d'une part, et d'autre part si fermeture du classeur à la suite, éviter le message demandant si on veut ou pas le vider). En fait, lorsqu'on trouve cette commande dans du code enregistré, c'est qu'on n'en a pas besoin ; si elle n'y est pas, c'est qu'il est possible qu'elle soit utile !

Effectivement, la non qualification de Cells dans la désignation d'une plage peut amener l'interpréteur à ne pas savoir décider de quelle plage il s'agit.

Mais on ne peut pas écrire : Sheets("ASS").Range(.Cells(...), .Cells(...)) car le point devant Cells ne réfère à rien. Soit on passe à une désignation style A1, soit on utilise With :

With Sheets("ASS")

.Range(.Cells(...), .Cells(...))

End With

Bonne journée.

Rechercher des sujets similaires à "inserer ligne"