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
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
A voir également:
- Copier des cellules (formule) dans colonne vide
- Formule somme excel colonne - Guide
- Formule si et - Guide
- Déplacer une colonne excel - Guide
- Formule moyenne excel plusieurs colonnes - Guide
- Trier colonne excel - Guide
2 réponses
Patrice33740
Messages postés
8556
Date d'inscription
dimanche 13 juin 2010
Statut
Membre
Dernière intervention
2 mars 2023
1 779
12 juil. 2018 à 17:43
12 juil. 2018 à 17:43
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
Patrice33740
Messages postés
8556
Date d'inscription
dimanche 13 juin 2010
Statut
Membre
Dernière intervention
2 mars 2023
1 779
13 juil. 2018 à 18:38
13 juil. 2018 à 18:38
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
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
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?
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?
Patrice33740
Messages postés
8556
Date d'inscription
dimanche 13 juin 2010
Statut
Membre
Dernière intervention
2 mars 2023
1 779
18 juil. 2018 à 12:15
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
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
13 juil. 2018 à 11:14
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