Copier des cellules (formule) dans colonne vide

Fermé
anana49 Messages postés 20 Date d'inscription jeudi 12 juillet 2018 Statut Membre Dernière intervention 20 décembre 2018 - 12 juil. 2018 à 16:37
Patrice33740 Messages postés 8556 Date d'inscription dimanche 13 juin 2010 Statut Membre Dernière intervention 2 mars 2023 - 18 juil. 2018 à 12:15
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
A voir également:

2 réponses

Patrice33740 Messages postés 8556 Date d'inscription dimanche 13 juin 2010 Statut Membre Dernière intervention 2 mars 2023 1 775
12 juil. 2018 à 17:43
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
anana49 Messages postés 20 Date d'inscription jeudi 12 juillet 2018 Statut Membre Dernière intervention 20 décembre 2018
13 juil. 2018 à 11:14
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
Patrice33740 Messages postés 8556 Date d'inscription dimanche 13 juin 2010 Statut Membre Dernière intervention 2 mars 2023 1 775
13 juil. 2018 à 18:38
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
anana49 Messages postés 20 Date d'inscription jeudi 12 juillet 2018 Statut Membre Dernière intervention 20 décembre 2018
18 juil. 2018 à 09:26
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
Patrice33740 Messages postés 8556 Date d'inscription dimanche 13 juin 2010 Statut Membre Dernière intervention 2 mars 2023 1 775
18 juil. 2018 à 12:15
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