Je souhaiterais remplacer la formule presente dans la cellule A1 (par exemple =B1/B2) par une formule du type :
Etant donné que j'ai un gd nombre de cellules de ce type à modifier, est il possible de le faire par VBA ?Code:=SI (C1<>"";C1;=B1/B2)
Version imprimable
Je souhaiterais remplacer la formule presente dans la cellule A1 (par exemple =B1/B2) par une formule du type :
Etant donné que j'ai un gd nombre de cellules de ce type à modifier, est il possible de le faire par VBA ?Code:=SI (C1<>"";C1;=B1/B2)
Salut le forum
A adapter
Mytå_QcCode:Range("A5").Formula = "=IF(C1<>"""",C1,B1/B2)"
Désolé, je me suis mal exprimé.
Les cellules de la colonne A contiennent, toutes des formules DIFFERENTES.
Je souhaite qu'à ces cellules soit appliqué leur formule initiale seulement si la cellule adjacente en colonne B est vide, sinon je retiens pour ces cellules la valeur de la cellule adjacente :
Contenu initial de la cellule :
Contenu souhaité :Code:=maformule
Code:=SI (cellule adjacente<>"";cellule adjacente;=maformule)
Bonjour, et bienvenue sur les forums de DVP
Dans ce cas, on peut analyser le problème en disant:
Si la cellule adjacente n'est pas vide, on met la valeur de la cellule adjacente, sinon, on ne touche à rien.
en adaptant la plage sur laquelle boucler.Code:
1
2
3
4
5
6
7 Sub Boucle() Dim Cellule As Range For Each Cellule In Range("a1:a3") If Cellule(1, 2) <> "" Then Cellule.Value = Cellule(1, 2).Value Next Cellule End Sub
Ok?
Non, ca ne va pas.
les cellules en colonne B me servent à forcer TEMPORAIREMENT la valeur de la cellule adjacente en colonne A.
Je souhaite donc qu'en effacant le contenu de la cellule en colonne B, la cellule en colonne A retrouve sa formule initiale.
Tu ne peux forcément pas avoir en A une formule qui pointe sur A. Cela s'appelle une référence circulaire. En clair, tu ne peux pas avoir en A1
. Or, c'est ce que tu te proposes d'essayer de mettre en place avec une macro.Code:=SI(b1<>"";B1;A1)
Donc, tu dois stocker les contenus de A dans une autre feuille avant de les remplacer par les valeurs de B, pour pouvoir aller les rechercher lorsque tu vides B. Il te faut donc une feuille supplémentaire où stocker les valeurs de A.
Après, il faudra jouer avec l'évènement CHANGE pour tester que l'on vide ou que l'on remplit B et stocker la valeur de A dans la feuille supplémentaire ou rapatrier l'ancienne valeur de A sauvegardée sur la feuille supplémentaire.
Il n'y a pas d'autre solution que celle-là, à mon avis.
Je pense que je ne m'exprime pas clairement :
les formules actuelles en colonne A ne comportent pas de ref circulaires.
je veux simplement dorénavant que ces formules ne soient appliquées que si la cellule adjacente est vide.
Je souhaite donc modifier les formules des cellules en A :
pour :Code:=maformule
par exemple un code VBA du style :Code:=SI (cellule adjacente<>"";cellule adjacente;=maformule)
Ce code marche mais j'ai du mal à l'adapter à la formule que je souhaite (syntaxe)Code:
1
2
3
4
5
6
7
8 Sub nouv() Dim adr As String chaineadr = Range("a15").FormulaLocal chaine_non_modif = ActiveCell.FormulaLocal chaine_modif = chaine_non_modif & "+" & Mid(chaineadr, 2) ActiveCell.Clear ActiveCell.FormulaLocal = chaine_modif End Sub
C'est peut-être moi qui ne comprenais pas... :roll:
Essaie le code suivant:
Idéalement, il faudrait tester que la cellule en A comporte bien une formule en incluant la modification dans une boucleCode:
1
2
3
4
5
6
7
8
9
10 Sub Boucle() Dim Cellule As Range Dim Formule As String For Each Cellule In Range("a1:a3") Formule = Replace(Cellule.Formula, "=", "") Formule = "=if(" & Cellule(1, 2).Address & "<>""""," & Cellule(1, 2).Address & "," & Formule & ")" Cellule.Formula = Formule Next Cellule End Sub
Mais cela dépend du contexte dans lequel tu te trouves.Code:
1
2
3
4 If Cellule.HasFormula Then ... ... End If
Cela répond-il à ton besoin?
c'est parfait !
Merci de ton aide.