Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

Problème maj formule via Vba

4 réponses
Avatar
ttcpp
Bonjour,

J'ai une petit problème sur le code ci-joint. Celui-ci sert à créer une
formule dans une cellule en tenant compte la valeur ou de la formule déjà
existante.
exemple :
en A1 j'ai 100 auquel je voudrais soustraire 10 alors cela me donne A1 =
100-10
en A2 j'ai =200-50 auquel je voudrais soustraire 10 alors cela me donne A2
=200-50-10
Il fonctionne très bien si j'ai dans une formule un entier ou par de formule
du tout.
Mais quand j'ai un montant décimal alors j'ai le message d'erreur suivant :
Erreur définie par l'application ou par l'objet

Et je n'arrive pas en m'en défaire.
Merci pour votre aide

Thierry

Code :
Sub Test_Operation_V8()
Dim i As Double
Dim Col_rep As String
Col_rep = InputBox("Colonne a modifier :")
If Col_rep = "" Then Exit Sub
Const Debut = 30, Col_ajust = "AG"
For i = Debut To ActiveSheet.Columns(Col_rep).Rows(65000).End(xlUp).Row
If Not IsEmpty(Range(Col_ajust & i).Value) Then
With Range(Col_rep & i)
' Teste s'il y avait une formule dans la cellule a mettre à jour :
If Left(Range(Col_rep & i).Formula, 1) = "=" Then
'Si c'est le cas alors cela tient compte de l'ancienne
formule et ajoute la suite de l'opération
.FormulaLocal = "" & Range(Col_rep & i).Formula & "-" &
Range(Col_ajust & i).Value
Else
'S'il ny en a pas alors création de la formule
.FormulaLocal = "=" & Range(Col_rep & i).Value & "-" &
Range(Col_ajust & i).Value
End If
.Font.ColorIndex = 5
End With
End If
Next i
End Sub

4 réponses

Avatar
FFO
Salut à toi

n'as tu pas utilisé pour définir ta décimale une virgule au lieu d'un point
ou l'inverse (voir le paramétrage des Options Régionales dans le panneau de
configuration)

Vérifies et dis moi !!!!!
Avatar
ttcpp
Je viens de regarder les options et j'ai une virgule.
Quand je fais une exécution pas à pas du code je vois que j'ai un point dans
ma formule.
Est-ce que c'est cela mon problème ? Si oui, comment le résoudre ?
Car je n'ai pas envie de changer mes paramètre régionaux.


"FFO" wrote:

Salut à toi

n'as tu pas utilisé pour définir ta décimale une virgule au lieu d'un point
ou l'inverse (voir le paramétrage des Options Régionales dans le panneau de
configuration)

Vérifies et dis moi !!!!!



Avatar
ttcpp
C'est bon, j'ai trouvé, il fallait juste :
mettre Range(Col_rep & i).FormulaLocal
au lieu de Range(Col_rep & i).Formula



"ttcpp" wrote:

Bonjour,

J'ai une petit problème sur le code ci-joint. Celui-ci sert à créer une
formule dans une cellule en tenant compte la valeur ou de la formule déjà
existante.
exemple :
en A1 j'ai 100 auquel je voudrais soustraire 10 alors cela me donne A1 =
100-10
en A2 j'ai 0-50 auquel je voudrais soustraire 10 alors cela me donne A2
0-50-10
Il fonctionne très bien si j'ai dans une formule un entier ou par de formule
du tout.
Mais quand j'ai un montant décimal alors j'ai le message d'erreur suivant :
Erreur définie par l'application ou par l'objet

Et je n'arrive pas en m'en défaire.
Merci pour votre aide

Thierry

Code :
Sub Test_Operation_V8()
Dim i As Double
Dim Col_rep As String
Col_rep = InputBox("Colonne a modifier :")
If Col_rep = "" Then Exit Sub
Const Debut = 30, Col_ajust = "AG"
For i = Debut To ActiveSheet.Columns(Col_rep).Rows(65000).End(xlUp).Row
If Not IsEmpty(Range(Col_ajust & i).Value) Then
With Range(Col_rep & i)
' Teste s'il y avait une formule dans la cellule a mettre à jour :
If Left(Range(Col_rep & i).Formula, 1) = "=" Then
'Si c'est le cas alors cela tient compte de l'ancienne
formule et ajoute la suite de l'opération
.FormulaLocal = "" & Range(Col_rep & i).Formula & "-" &
Range(Col_ajust & i).Value
Else
'S'il ny en a pas alors création de la formule
.FormulaLocal = "=" & Range(Col_rep & i).Value & "-" &
Range(Col_ajust & i).Value
End If
.Font.ColorIndex = 5
End With
End If
Next i
End Sub


Avatar
FS
Bonjour,

Dans l'écriture de ta formule, tu mélanges Formula et FormulaLocal.
Excel n'aime pas ça et provoque une erreur (avec des nombres décimaux
uniquement en effet).
Ne me demande pas pourquoi, je n'ai pas d'explication sous la main...
Le code ci-dessous (qui corrige légèrement le tien) semble donner les
résultats attendus :

'===================== Sub Test_Operation_V8()
Dim i As Double
Dim Col_rep As String
Col_rep = InputBox("Colonne a modifier :")
If Col_rep = "" Then Exit Sub
Const Debut = 30, Col_ajust = "AG"
For i = Debut To ActiveSheet.Columns(Col_rep).Rows(65000).End(xlUp).Row
If Not IsEmpty(Range(Col_ajust & i).Value) Then
With Range(Col_rep & i)
' Teste s'il y avait une formule dans la cellule a mettre à jour :
If Range(Col_rep & i).HasFormula Then
'Si c'est le cas alors cela tient compte de l'ancienne formule
'et ajoute la suite de l'opération
.FormulaLocal = Range(Col_rep & i).FormulaLocal & "-" & _
Range(Col_ajust & i).Address(0, 0)
Else
'S'il n'y en a pas alors création de la formule
.FormulaLocal = "=" & Range(Col_rep & i).Value & "-" & _
Range(Col_ajust & i).Value
End If
.Font.ColorIndex = 5
End With
End If
Next i
End Sub
'=====================
FS
--
Frédéric SIGONNEAU
Modules et modèles pour Excel :
http://frederic.sigonneau.free.fr/

ttcpp a écrit :
Bonjour,

J'ai une petit problème sur le code ci-joint. Celui-ci sert à créer une
formule dans une cellule en tenant compte la valeur ou de la formule déjà
existante.
exemple :
en A1 j'ai 100 auquel je voudrais soustraire 10 alors cela me donne A1 =
100-10
en A2 j'ai 0-50 auquel je voudrais soustraire 10 alors cela me donne A2
0-50-10
Il fonctionne très bien si j'ai dans une formule un entier ou par de formule
du tout.
Mais quand j'ai un montant décimal alors j'ai le message d'erreur suivant :
Erreur définie par l'application ou par l'objet

Et je n'arrive pas en m'en défaire.
Merci pour votre aide

Thierry

Code :
Sub Test_Operation_V8()
Dim i As Double
Dim Col_rep As String
Col_rep = InputBox("Colonne a modifier :")
If Col_rep = "" Then Exit Sub
Const Debut = 30, Col_ajust = "AG"
For i = Debut To ActiveSheet.Columns(Col_rep).Rows(65000).End(xlUp).Row
If Not IsEmpty(Range(Col_ajust & i).Value) Then
With Range(Col_rep & i)
' Teste s'il y avait une formule dans la cellule a mettre à jour :
If Left(Range(Col_rep & i).Formula, 1) = "=" Then
'Si c'est le cas alors cela tient compte de l'ancienne
formule et ajoute la suite de l'opération
.FormulaLocal = "" & Range(Col_rep & i).Formula & "-" &
Range(Col_ajust & i).Value
Else
'S'il ny en a pas alors création de la formule
.FormulaLocal = "=" & Range(Col_rep & i).Value & "-" &
Range(Col_ajust & i).Value
End If
.Font.ColorIndex = 5
End With
End If
Next i
End Sub