Copier des cellules (formule) dans colonne vide

anana49 Messages postés 20 Date d'inscription   Statut Membre Dernière intervention   -  
Patrice33740 Messages postés 8400 Date d'inscription   Statut Membre Dernière intervention   -
Bonjour,
Novice en VBA et toute nouvelle sur le forum, je souhaite déplacer et copier une plage de cellules (formules) dans la colonne vide à droite et sur les mêmes lignes. Ci-dessous le code créé mais avez-vous une solution pour ne pas répéter toutes les lignes.
Merci à tous pour votre aide.... A bientôt..

Range("F8").End(xlToRight).Offset(0, 1).Formula = Range("F8").End(xlToRight).Formula
Range("F10").End(xlToRight).Offset(0, 1).Formula = Range("F10").End(xlToRight).Formula
Range("F12").End(xlToRight).Offset(0, 1).Formula = Range("F12").End(xlToRight).Formula
Range("F13").End(xlToRight).Offset(0, 1).Formula = Range("F13").End(xlToRight).Formula
Range("F15").End(xlToRight).Offset(0, 1).Formula = Range("F15").End(xlToRight).Formula
Range("F17").End(xlToRight).Offset(0, 1).Formula = Range("F17").End(xlToRight).Formula

'ET ++++++++ POUR ARRIVER A LA LIGNE 1174

2 réponses

  1. Patrice33740 Messages postés 8400 Date d'inscription   Statut Membre Dernière intervention   1 783
     
    Bonjour,

    Essaies :
    Option Explicit
    Sub test()
    Dim L As Long
      With ActiveSheet
        For L = 8 To 1174 Step 2
          .Cells(L, "F").End(xlToRight).Offset(0, 1).Formula = .Cells(L, "F").End(xlToRight).Formula
        Next L
      End With
    End Sub


    0
    1. anana49 Messages postés 20 Date d'inscription   Statut Membre Dernière intervention  
       
      Bonjour Patrice,
      Ton code fonctionne et pour ça MERCI !
      Mais comme je maitrise pas trop les boucles, j'ai besoin encore un peu de ton aide... ci-dessous le code adapté mais c'est très long à sortir, peux-tu l'optimiser ou il n'y a pas de solution ?
      Merci encore pour ton aide

      Sub CopierFormules()
      
      Dim L As Long
      Sheets("Volumes").Select
        With ActiveSheet
          For L = 8 To 293 'Step 2
            Cells(L, "F").End(xlToRight).Offset(0, 1).Formula = Cells(L, "F").End(xlToRight).Formula
          Next L
          For L = 314 To 316 'Step 2
            Cells(L, "F").End(xlToRight).Offset(0, 1).Formula = Cells(L, "F").End(xlToRight).Formula
          Next L
           For L = 344 To 449 'Step 2
            Cells(L, "F").End(xlToRight).Offset(0, 1).Formula = Cells(L, "F").End(xlToRight).Formula
          Next L
           For L = 463 To 465 'Step 2
            Cells(L, "F").End(xlToRight).Offset(0, 1).Formula = Cells(L, "F").End(xlToRight).Formula
          Next L
           For L = 491 To 594 'Step 2
            Cells(L, "F").End(xlToRight).Offset(0, 1).Formula = Cells(L, "F").End(xlToRight).Formula
          Next L
           For L = 608 To 610 'Step 2
            Cells(L, "F").End(xlToRight).Offset(0, 1).Formula = Cells(L, "F").End(xlToRight).Formula
          Next L
           For L = 852 To 955 'Step 2
            Cells(L, "F").End(xlToRight).Offset(0, 1).Formula = Cells(L, "F").End(xlToRight).Formula
          Next L
           For L = 969 To 971 'Step 2
            Cells(L, "F").End(xlToRight).Offset(0, 1).Formula = Cells(L, "F").End(xlToRight).Formula
          Next L
           For L = 1159 To 1174 'Step 2
            Cells(L, "F").End(xlToRight).Offset(0, 1).Formula = Cells(L, "F").End(xlToRight).Formula
          Next L
          
        End With
      End Sub
      
      0
  2. Patrice33740 Messages postés 8400 Date d'inscription   Statut Membre Dernière intervention   1 783
     
    Bonjour,

    Tu as mal adapté mon code !

    1) Dans ton code les lignes suivantes sont inutiles :
      With ActiveSheet
     '... 
      End With
    car tu n'y fait jamais référence !!!

    Dans mon code j'ai utilisé With pour faire référence à une feuille, et ensuite toutes cellules désignées faisait référence à cette feuille :
          .Cells(L, "F").End(xlToRight).Offset(0, 1).Formula = .Cells(L, "F").End(xlToRight).Formula
    
    grâce au point situé devant Cells(...
    En effet, dans .Cells(... le point sert à rattacher cet objet (Cells) à celui désigné par le With (ActiveSheet).
    Sans le With, il aurait fallu répéter ActiveSheet.Cells(... à chaque fois pour avoir l'équivalent.

    J'ai fait référence à la feuille active car tu n'avais pas précisé sur quelle feuille tu travaillais et car j'évite, dans un module standard, d'utiliser les références implicites, c'est-à-dire celles qui ne sont pas désignées explicitement comme par exemple un Cells(... tout seul qui ne fait pas référence à une feuille particulière.

    Dans ton code tu as omis ce point et donc tes Cells(... ne font pas référence à l'objet désigné dans le With (i.e. ActiveSheet) mais à l'objet actif. Le hasard veux que ce soit le même et donc ton code fonctionne.

    2) Dans les macro VBA, il faut absolument éviter d'employer .Select, .Activate. Il est inutile d'activer un objet (feuille, cellule, ...) pour travailler dessus, c'est même déconseillé. Au lieu d'écrire :
    Sheets("Volumes").Select
      With ActiveSheet
    
    Il vaut mieux écrire simplement :
      With Sheets("Volumes")
    


    Pour simplifier ton code, on peut utiliser Select .. Case, par exemple :
    Sub CopierFormules()
    Dim L As Long
      With Sheets("Volumes")
        For L = 8 To 1174
          Select Case L
            Case 8 To 293, 314 To 316, 344 To 349, 463 To 465, 491 To 594, 608 To 610, 852 To 955, _
                 969 To 971, 1159 To 1174
              .Cells(L, "F").End(xlToRight).Offset(0, 1).Formula = .Cells(L, "F").End(xlToRight).Formula
           End Select
        Next L
      End With
    End Sub

    Ce code est plus dense, simple à lire, et plus rapide
    0
    1. anana49 Messages postés 20 Date d'inscription   Statut Membre Dernière intervention  
       
      Bonjour Patrice,
      Je te remercie beaucoup, le code fonctionne mais je rencontre un autre problème. Dans les formules copiées, j'ai la fonction recherchev() qui se décale parfaitement, par contre ce sont les fonctions totaux qui ne se décalent pas correctement ex: =AM9+AN8 devrait se décaler pour donner AN9+AO8
      Peux-tu m'expliquer?
      0
    2. Patrice33740 Messages postés 8400 Date d'inscription   Statut Membre Dernière intervention   1 783
       
      Il est difficile d'expliquer quoi que ce soit, avec aussi peu d'informations !

      Ce code copie, pour chaque ligne, la formule située dans la dernière colonne utilisée vers la colonne suivante.
      Il me semble anormal que ta fonction recherchev() se décale (sans la formule il faudrait être devin) car ce code copie exactement la même formule donc =AM9+AN8 reste =AM9+AN8.

      Pour que les formules se "décalent" automatiquement, il faut utiliser .FormulaR1C1 à la place des deux .Formula
      0