Problème maj formule via Vba

Le
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 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
Vidéos High-Tech et Jeu Vidéo
Téléchargements
Vos réponses
Gagnez chaque mois un abonnement Premium avec GNT : Inscrivez-vous !
Trier par : date / pertinence
FFO
Le #20628931
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 !!!!!
ttcpp
Le #20629141
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 !!!!!



ttcpp
Le #20630401
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


FS
Le #20630111
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


Publicité
Poster une réponse
Anonyme