A voir également:
- Copier des cellules (formule) dans colonne vide
- Formule somme excel colonne - Guide
- Formule moyenne excel plusieurs colonnes - Guide
- Déplacer colonne excel - Guide
- Formule si et - Guide
- Trier colonne excel - Guide
2 réponses
Bonjour,
Essaies :
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
Bonjour,
Tu as mal adapté mon code !
1) Dans ton code les lignes suivantes sont inutiles :
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 :
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 :
Pour simplifier ton code, on peut utiliser Select .. Case, par exemple :
Ce code est plus dense, simple à lire, et plus rapide
Tu as mal adapté mon code !
1) Dans ton code les lignes suivantes sont inutiles :
With ActiveSheet '... End Withcar 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).Formulagrâ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 ActiveSheetIl 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
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?
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?
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
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
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