OVH Cloud OVH Cloud

Problème dans insertion de formule

15 réponses
Avatar
ttcpp
Bonjour,

J'ai écris une petite macro qui me permet de faire une correction dans une
cellule en gardant sa valeur d'origine.
exemple :
A1 =100
Correction 10
A1=100-10
Cela marche très bien pour des valeurs entières mais pas pour les autres.
J'ai en retour un erreur 1004 que je n'arrive pas à corriger.

voici le code écris :
Sub Test_Operation()
Dim i As Double
Dim Col_rep As String
Col_rep = InputBox("Colonne a modifier :")

For i = 30 To ActiveSheet.Range("C65000").End(xlUp).Row
If IsEmpty(Range("AE" & i).Value) Then
Range("" & Col_rep & "" & i).Value = Range("" & Col_rep & "" &
i).Value
Else
Range("" & Col_rep & "" & i).Formula = "=" & Range("" & Col_rep & ""
& i).Value & " - " & Range("AE" & i).Value
Range("" & Col_rep & "" & i).Select
Selection.Font.ColorIndex = 5
End If
Next i
End sub

Merci pour votre aide

Thierry

5 réponses

1 2
Avatar
isabelle
bonjour Thierry ,

dit moi si ça te va,

Sub Test_Operation()
Dim i As Double
Dim Col_rep As String
Col_rep = InputBox("Colonne a modifier :")
For i = 1 To ActiveSheet.Range("C65000").End(xlUp).Row
If IsEmpty(Range("AE" & i)) Then
Range(Col_rep & i) = Range(Col_rep & i)
Else
With Range(Col_rep & i)
.Formula = "=" & Range(Col_rep & i) & " - " & Range("AE" & i)
.Font.ColorIndex = 5
.NumberFormat = "0.000000" ' à adapter
End With
End If
Next i
End Sub

isabelle

ttcpp a écrit :
J'ai essayé .value
Cela fonctionne sur des entiers mais pas sur des valeurs décimales (à moins
que cela soit à cause de ma config excel)

"michdenis" wrote:


| En fait c'est la valeur de la cellule AE et non son adresse qu'il faut que
| je récupére.

Dans le code, tu changes la propriété .address(0,0) pour .Value









Avatar
michdenis
C'est une question de format de cellule !

Barre des menus / format / cellules /onglet nombre / item : Nombre
et tu choisis le nombre de décimal après le point que tu désires afficher

ou tu peux ajouter une ligne à ta procédure pour désigner le format

With Range(Col_rep & i)
.Formula = "=" & _
Range(Col_rep & i).Value & " - " & _
Range("AE" & i).Address(0, 0)
.Font.ColorIndex = 5
.NumberFormat = "# ##0.0000" 'Le format que tu désires
End With




"ttcpp" a écrit dans le message de groupe de discussion
:
J'ai essayé .value
Cela fonctionne sur des entiers mais pas sur des valeurs décimales (à moins
que cela soit à cause de ma config excel)

"michdenis" wrote:

| En fait c'est la valeur de la cellule AE et non son adresse qu'il faut que
| je récupére.

Dans le code, tu changes la propriété .address(0,0) pour .Value






Avatar
ttcpp
Désolé, mais cela ne résoud pas du tout le problème.
En résumé
Si je met
With Range(Col_rep & i)
.Formula = "=" & _
Range(Col_rep & i).Value & " - " & _
Range("E" & i).Address(0, 0)
.Font.ColorIndex = 5

End With
Je récupére dans ma cellule C3 = 12455,00-AE3 (au lieu de la valeur AE3)

si je met
With Range(Col_rep & i)
.Formula = "=" & _
Range(Col_rep & i).Value & " - " & _
Range("E" & i).Value
.Font.ColorIndex = 5
End With
Je récupére dans ma cellule C3 = 12455,00 - 125,00 (car AE3 est un entier)
sinon j'ai C3= 12455,00 (il prend pas la valeur AE3 si c'est une décimale)
A première vue, cela a l'air simple à construire mais difficile à mettre en
oeuvre


"michdenis" wrote:

C'est une question de format de cellule !

Barre des menus / format / cellules /onglet nombre / item : Nombre
et tu choisis le nombre de décimal après le point que tu désires afficher

ou tu peux ajouter une ligne à ta procédure pour désigner le format

With Range(Col_rep & i)
.Formula = "=" & _
Range(Col_rep & i).Value & " - " & _
Range("AE" & i).Address(0, 0)
.Font.ColorIndex = 5
.NumberFormat = "# ##0.0000" 'Le format que tu désires
End With




"ttcpp" a écrit dans le message de groupe de discussion
:
J'ai essayé .value
Cela fonctionne sur des entiers mais pas sur des valeurs décimales (à moins
que cela soit à cause de ma config excel)

"michdenis" wrote:

> | En fait c'est la valeur de la cellule AE et non son adresse qu'il faut que
> | je récupére.
>
> Dans le code, tu changes la propriété .address(0,0) pour .Value
>
>
>
>


Avatar
Alain
Le problème est que tu utilise la propriété Formula qui ne peut prendre un
nombre décimal qu'en format américain avec le point comme séparateur décimal
alors que la propriété Value va te retourner le nombre avec une virgule...
La solution consiste a plutôt utiliser la propriété FormulaLocal qui va
accepter un nombre avec la virgule comme séparateur décimal...

Sub Test_Operation()
Dim i As Integer
Dim Col_rep As String
Col_rep = InputBox("Colonne a modifier :")
If Col_rep = "" Then Exit Sub
Const Debut = 30, Col_ajust = "AE"
For i = Debut To ActiveSheet.Columns(Col_rep).Rows(Debut).End(xlDown).Row
If Not IsEmpty(Range(Col_ajust & i).Value) Then
With Range(Col_rep & i)
.FormulaLocal = "=" & _
Range(Col_rep & i).Value & "-" & _
Range(Col_ajust & i).Value
.Font.ColorIndex = 5
End With
End If
Next i
End Sub


"ttcpp" wrote in message
news:
Bonjour,

J'ai écris une petite macro qui me permet de faire une correction dans une
cellule en gardant sa valeur d'origine.
exemple :
A1 0
Correction 10
A10-10
Cela marche très bien pour des valeurs entières mais pas pour les autres.
J'ai en retour un erreur 1004 que je n'arrive pas à corriger.

voici le code écris :
Sub Test_Operation()
Dim i As Double
Dim Col_rep As String
Col_rep = InputBox("Colonne a modifier :")

For i = 30 To ActiveSheet.Range("C65000").End(xlUp).Row
If IsEmpty(Range("AE" & i).Value) Then
Range("" & Col_rep & "" & i).Value = Range("" & Col_rep & "" &
i).Value
Else
Range("" & Col_rep & "" & i).Formula = "=" & Range("" & Col_rep &
""
& i).Value & " - " & Range("AE" & i).Value
Range("" & Col_rep & "" & i).Select
Selection.Font.ColorIndex = 5
End If
Next i
End sub

Merci pour votre aide

Thierry


Avatar
ttcpp
Un grand Merci Alain, c'est exactement ce que je voulais.
En effet il n'y avait pas grand chose à faire : remplacer Formula par
FormulaLocal
Mais il fallait le savoir. ;)
Merci aussi à michdenis pour son aide et sa patience.

"Alain" wrote:

Le problème est que tu utilise la propriété Formula qui ne peut prendre un
nombre décimal qu'en format américain avec le point comme séparateur décimal
alors que la propriété Value va te retourner le nombre avec une virgule...
La solution consiste a plutôt utiliser la propriété FormulaLocal qui va
accepter un nombre avec la virgule comme séparateur décimal...

Sub Test_Operation()
Dim i As Integer
Dim Col_rep As String
Col_rep = InputBox("Colonne a modifier :")
If Col_rep = "" Then Exit Sub
Const Debut = 30, Col_ajust = "AE"
For i = Debut To ActiveSheet.Columns(Col_rep).Rows(Debut).End(xlDown).Row
If Not IsEmpty(Range(Col_ajust & i).Value) Then
With Range(Col_rep & i)
.FormulaLocal = "=" & _
Range(Col_rep & i).Value & "-" & _
Range(Col_ajust & i).Value
.Font.ColorIndex = 5
End With
End If
Next i
End Sub


"ttcpp" wrote in message
news:
> Bonjour,
>
> J'ai écris une petite macro qui me permet de faire une correction dans une
> cellule en gardant sa valeur d'origine.
> exemple :
> A1 0
> Correction 10
> A10-10
> Cela marche très bien pour des valeurs entières mais pas pour les autres.
> J'ai en retour un erreur 1004 que je n'arrive pas à corriger.
>
> voici le code écris :
> Sub Test_Operation()
> Dim i As Double
> Dim Col_rep As String
> Col_rep = InputBox("Colonne a modifier :")
>
> For i = 30 To ActiveSheet.Range("C65000").End(xlUp).Row
> If IsEmpty(Range("AE" & i).Value) Then
> Range("" & Col_rep & "" & i).Value = Range("" & Col_rep & "" &
> i).Value
> Else
> Range("" & Col_rep & "" & i).Formula = "=" & Range("" & Col_rep &
> ""
> & i).Value & " - " & Range("AE" & i).Value
> Range("" & Col_rep & "" & i).Select
> Selection.Font.ColorIndex = 5
> End If
> Next i
> End sub
>
> Merci pour votre aide
>
> Thierry



1 2