Macro Excel - Copier Insérer cellule pointée

Résolu
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

  1. 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
    1. 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
      1. 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
        1. 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
          1. Modérateur
            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
        2. 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
          1. 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
            1. bonjour

              quelque chose comme ça?

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


              bonne suite
              1