Macro Excel - Copier Insérer cellule pointée

Résolu/Fermé
_gfv Messages postés 14 Date d'inscription lundi 10 janvier 2011 Statut Membre Dernière intervention 24 mars 2011 - 21 mars 2011 à 08:02
_gfv Messages postés 14 Date d'inscription lundi 10 janvier 2011 Statut Membre Dernière intervention 24 mars 2011 - 21 mars 2011 à 17:01
Bonjour à tous,


Voilà, je débute en VBA Excel et me heurte à un petit soucis de code.

Je souhaite, dans un "tableau" de calcul :

- copier les lignes 8 à 16 par (exemple),
- les insérer là où j'ai pointé ma souris, donc la cellule "active",
- recopier les formules de 8 cellules, 13 lignes en dessous ma cellule pointée et à partir de 9 cellule sur la droite, car l'insertion décale la référence des formules...

Nota : les lignes à insérer contiennent des formules dans certaines cellules.

Je ne sais pas si j'ai été suffisamment clair et concis, n'hésitez pas à me harceler de questions :)


gfv

7 réponses

ccm81 Messages postés 10900 Date d'inscription lundi 18 octobre 2010 Statut Membre Dernière intervention 2 novembre 2024 2 425
Modifié par ccm81 le 21/03/2011 à 11:41
bonjour

quelque chose comme ça?

plage = "A1:B3" 
Range(plage).Copy 
Selection.Offset(13, 9).Select 
ActiveSheet.Paste


bonne suite
1
ccm81 Messages postés 10900 Date d'inscription lundi 18 octobre 2010 Statut Membre Dernière intervention 2 novembre 2024 2 425
21 mars 2011 à 16:04
re
désolé, j'ai mal compris l'énoncé ...
une autre solution, un peu différente de celle de Mike-31
Const plage = "A1:B3"
Dim li As Long, nbli As Long
nbli = Range(plage).Rows.Count
  Selection.Offset(1, 0).Select
  For li = 1 To nbli
    ActiveCell.EntireRow.Insert
  Next li
  Range(plage).Copy
  ActiveSheet.Paste


bonne suite
1
_gfv Messages postés 14 Date d'inscription lundi 10 janvier 2011 Statut Membre Dernière intervention 24 mars 2011
21 mars 2011 à 13:32
bonjour ccm81,

dans ce gout là en effet, sauf que ta macro colle et n'insert pas, elle "écrase" donc les cellules.

aurais-tu le code pour l'insertion de ces linges ainsi qu'un autre pour la recopie de formule par rapport à la cellule active lors de l'insertion ?

gfv
0
Mike-31 Messages postés 18346 Date d'inscription dimanche 17 février 2008 Statut Contributeur Dernière intervention 13 novembre 2024 5 104
21 mars 2011 à 14:30
Salut,

je ne vois pas très bien ou tu veux en venir, ce code insère 9 lignes (équivalence ligne 8 à 16), à partir de la cellule active dans lesquelles sont copié les lignes 8 à 16.

Si ce n'est pas ce que tu cherches, explique différemment tes attentes

Sub Macro1()
ActiveCell.Resize(9).EntireRow.Insert
Rows("8:16").Copy
ActiveSheet.Paste
Application.CutCopyMode = False
End Sub
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
_gfv Messages postés 14 Date d'inscription lundi 10 janvier 2011 Statut Membre Dernière intervention 24 mars 2011
21 mars 2011 à 15:37
bonjour Mike-31,

en fait la macro deccm81, colle mais n'insert pas. ce que je souhaite, c'est insérer les cellules copiées.
J'ai refait ce code :

plage = "A1:BB3" ' sélection de la plage à insérer
Range(plage).Copy ' copie de la plage
Selection.Offset(13, 9).Select ' cellule active et décalage du point d'insertion
Selection.Insert Shift:=xlDown ' insertion de la sélection
Application.CutCopyMode = False

qui fonctionne pour l'insertion bien qu'il faille que je mette l'Offset à (0,0) pour insérer depuis la cellule pointée par la souris. Je pense que ce code correspond à peu près au tiens.
Maintenant mon objectif est de coller des formules à partir de la cellule pointée et je crois pouvoir y arriver avec le code de ccm81.

Je vous tiens au courant de mon avancée, mais si quelqu'un possède un code tout près moins moche que celui réalisé avec l'enregistreur excel, je suis preneur, car ce code est à refaire 20 fois.

gfv
0
pijaku Messages postés 12263 Date d'inscription jeudi 15 mai 2008 Statut Modérateur Dernière intervention 4 janvier 2024 2 751
21 mars 2011 à 15:51
Bonjour tout le monde,
Tu peux peut être essayer ceci :
plage = "A1:BB3" ' sélection de la plage à insérer 
Range(plage).Copy ' copie de la plage 
ActiveCell.Insert Shift:=xlDown 'insère les cellules copiées
ActiveCell.PasteSpecial Paste:=xlPasteFormulasAndNumberFormats 'dans la même plage colle les formules et formats de nombre
0
_gfv Messages postés 14 Date d'inscription lundi 10 janvier 2011 Statut Membre Dernière intervention 24 mars 2011
21 mars 2011 à 16:06
bonjour pijaku,

ta macro m'a l'air bien, mais les formules à insérer ne sont pas dans la même plage, voici un exemple concret :

Sub Macro3()

ActiveCell.Resize(9).EntireRow.Insert
Rows("8:16").Copy
ActiveSheet.Paste
Application.CutCopyMode = False

plage = "J12:Q12"
Range(plage).Copy
Selection.Offset(13, 9).Select
ActiveSheet.Paste

End Sub

j'ai donc collé ces 2 codes en 1 seuls. Les 2 fonctionnent séparément, mais en 1 macro, VBA me donne une erreur à la ligne

Selection.Offset(13, 9).Select

Après l'insertion des lignes 8 à 16 sous ma cellule pointée, je cherche à coller les formules le la ligne J12 à Q12 13 à partir de 13 cellule plus bas pour 9 cellules à gauche... mais les 2 codes compilés ne fonctionnent pas, si l'un de vous a une petite idée... et encore merci pour vos réponses, cela ne doit pas être toujours facile de comprendre l'attente de quelqu'un :)


gfv
0
_gfv Messages postés 14 Date d'inscription lundi 10 janvier 2011 Statut Membre Dernière intervention 24 mars 2011
Modifié par _gfv le 22/03/2011 à 07:13
re tout le monde,

J'ai compilé la 2nd macro de ccm81 (qui est plus classe à l'action que l'autre !) avec la première de ccm81 ce qui me donne (dans mon appli) ceci :

Sub Macro4()

Const plage = "A8:BC16"
Dim li As Long, nbli As Long
nbli = Range(plage).Rows.Count
Selection.Offset(0, 0).Select
For li = 1 To nbli
ActiveCell.EntireRow.Insert
Next li
Range(plage).Copy
ActiveSheet.Paste

plage2 = "J12:U12"
Range(plage2).Copy
Selection.Offset(13, 9).Select
ActiveSheet.Paste


End Sub

à priori cela fonctionne bien, je la recopie dans mon userForm et je vous tiens au courant du fonctionnement :)

Edit : je confirme, cela fonctionne bien. Mais il me reste encore 2 petites choses afin de finaliser :

- insérer une condition du type s'il y a "XXX" dans la cellule (même ligne que la cellule pointée) de la colonne AK, il ne faut pas que la macro fonctionne,

- quel serait le code pour la suppression du même nombre de ligne insérées (avec un décalage vers le haut soit la fonction inverse de l'insertion) ?



_gfv
0