J'effectue, en VBA, une somme entre deux cellules. Si l'une de ces cellules
est vide (aucune saisie effectuée la cellule) ou le résultat d'un SI qui
affecte un "" dans le sinon (au lieu d'un zéro), j'ai évidemment une erreur
13.
Comment puis-je dans le code contourner facilement ce souci ?
Dois-je effectuer un test sur la cellule et vérifier qu'elle est non null et
différente de "" ?
En fait je me demande surtout qu'elle est la méthode la plus "propre".
J'effectue, en VBA, une somme entre deux cellules.
Et tu la fais comment cette somme ? Comme ça ? MsgBox Application.Sum([A1:A2])
AV
Christian.L
Bonjour Steph
Il faut tester tes cellules avec la fonction IsNumeric. Ci dessous l'aide sur cette fonction. Suivant le résultat tu fais ta somme ou pas.
Bon courage
C.L.
IsNumeric, fonction Renvoie une valeur de type Boolean qui indique si une expression peut être interprétée comme un nombre. Syntaxe IsNumeric(expression) L'argument expression est une valeur de type Variant contenant une expression numérique ou une expression de chaîne. Remarques La fonction IsNumeric renvoie la valeur True si l'ensemble de l'expression est reconnue comme étant un nombre ; sinon, elle renvoie la valeur False. La fonction IsNumeric renvoie la valeur False si l'argument expression est une expression de date.
"Steph_D" a écrit dans le message de news: d1e9g0$h2a$
Bonjour,
J'effectue, en VBA, une somme entre deux cellules. Si l'une de ces cellules est vide (aucune saisie effectuée la cellule) ou le résultat d'un SI qui affecte un "" dans le sinon (au lieu d'un zéro), j'ai évidemment une erreur 13.
Comment puis-je dans le code contourner facilement ce souci ? Dois-je effectuer un test sur la cellule et vérifier qu'elle est non null et différente de "" ? En fait je me demande surtout qu'elle est la méthode la plus "propre".
Merci pour vos conseils Steph D.
Bonjour Steph
Il faut tester tes cellules avec la fonction IsNumeric. Ci dessous l'aide
sur cette fonction.
Suivant le résultat tu fais ta somme ou pas.
Bon courage
C.L.
IsNumeric, fonction
Renvoie une valeur de type Boolean qui indique si une expression peut être
interprétée comme un nombre.
Syntaxe
IsNumeric(expression)
L'argument expression est une valeur de type Variant contenant une
expression numérique ou une expression de chaîne.
Remarques
La fonction IsNumeric renvoie la valeur True si l'ensemble de l'expression
est reconnue comme étant un nombre ; sinon, elle renvoie la valeur False.
La fonction IsNumeric renvoie la valeur False si l'argument expression est
une expression de date.
"Steph_D" <steph_D@caramail.com> a écrit dans le message de news:
d1e9g0$h2a$1@s1.news.oleane.net...
Bonjour,
J'effectue, en VBA, une somme entre deux cellules. Si l'une de ces
cellules
est vide (aucune saisie effectuée la cellule) ou le résultat d'un SI qui
affecte un "" dans le sinon (au lieu d'un zéro), j'ai évidemment une
erreur
13.
Comment puis-je dans le code contourner facilement ce souci ?
Dois-je effectuer un test sur la cellule et vérifier qu'elle est non null
et
différente de "" ?
En fait je me demande surtout qu'elle est la méthode la plus "propre".
Il faut tester tes cellules avec la fonction IsNumeric. Ci dessous l'aide sur cette fonction. Suivant le résultat tu fais ta somme ou pas.
Bon courage
C.L.
IsNumeric, fonction Renvoie une valeur de type Boolean qui indique si une expression peut être interprétée comme un nombre. Syntaxe IsNumeric(expression) L'argument expression est une valeur de type Variant contenant une expression numérique ou une expression de chaîne. Remarques La fonction IsNumeric renvoie la valeur True si l'ensemble de l'expression est reconnue comme étant un nombre ; sinon, elle renvoie la valeur False. La fonction IsNumeric renvoie la valeur False si l'argument expression est une expression de date.
"Steph_D" a écrit dans le message de news: d1e9g0$h2a$
Bonjour,
J'effectue, en VBA, une somme entre deux cellules. Si l'une de ces cellules est vide (aucune saisie effectuée la cellule) ou le résultat d'un SI qui affecte un "" dans le sinon (au lieu d'un zéro), j'ai évidemment une erreur 13.
Comment puis-je dans le code contourner facilement ce souci ? Dois-je effectuer un test sur la cellule et vérifier qu'elle est non null et différente de "" ? En fait je me demande surtout qu'elle est la méthode la plus "propre".
Merci pour vos conseils Steph D.
Steph_D
Un peu plus d'explications.
Mon client a composé une macro avec une centaine de sommes comme ceci : Workbooks("REV.XLS").Sheets("ech").Cells(28, 4).Value Workbooks("REV.xls").Sheets("ech").Cells(28, 4).Value + Cells(26, 6).Value
La cellule Workbooks("REV.XLS").Sheets("ech").Cells(28, 4) peut être vide lors de la première utilisation. Si j'initialise la cellule à 0 sous excel, c'est correct.
La cellule Cells(26, 6).Value du classeur actif est le résultat d'un SI : =SI(ET(facturation!$F$17>ò4;facturation!$F$17<ò5);facturation!$F$46;"") En modifiant son Si pour affecter 0 à la place du "", c'est correct également.
Pour éviter d'avoir à vérifier le formatage de ses cellules sous excel, il aimerait que ces cas soit gérés au niveau du VBA. Alors je me demandais s'il n'y avait pas plus simple que de le contrôler comme ceci : if Cells(26, 6).Value = "" then Cells(26, 6).Value = 0 end if if isnull(Workbooks("REV.xls").Sheets("ech").Cells(28, 4).Value) then Workbooks("REV.xls").Sheets("ech").Cells(28, 4).Value = 0 end if
Merci d'avance.
Un peu plus d'explications.
Mon client a composé une macro avec une centaine de sommes comme ceci :
Workbooks("REV.XLS").Sheets("ech").Cells(28, 4).Value Workbooks("REV.xls").Sheets("ech").Cells(28, 4).Value + Cells(26, 6).Value
La cellule Workbooks("REV.XLS").Sheets("ech").Cells(28, 4) peut être vide
lors de la première utilisation.
Si j'initialise la cellule à 0 sous excel, c'est correct.
La cellule Cells(26, 6).Value du classeur actif est le résultat d'un SI :
=SI(ET(facturation!$F$17>ò4;facturation!$F$17<ò5);facturation!$F$46;"")
En modifiant son Si pour affecter 0 à la place du "", c'est correct
également.
Pour éviter d'avoir à vérifier le formatage de ses cellules sous excel, il
aimerait que ces cas soit gérés au niveau du VBA.
Alors je me demandais s'il n'y avait pas plus simple que de le contrôler
comme ceci :
if Cells(26, 6).Value = "" then
Cells(26, 6).Value = 0
end if
if isnull(Workbooks("REV.xls").Sheets("ech").Cells(28, 4).Value) then
Workbooks("REV.xls").Sheets("ech").Cells(28, 4).Value = 0
end if
Mon client a composé une macro avec une centaine de sommes comme ceci : Workbooks("REV.XLS").Sheets("ech").Cells(28, 4).Value Workbooks("REV.xls").Sheets("ech").Cells(28, 4).Value + Cells(26, 6).Value
La cellule Workbooks("REV.XLS").Sheets("ech").Cells(28, 4) peut être vide lors de la première utilisation. Si j'initialise la cellule à 0 sous excel, c'est correct.
La cellule Cells(26, 6).Value du classeur actif est le résultat d'un SI : =SI(ET(facturation!$F$17>ò4;facturation!$F$17<ò5);facturation!$F$46;"") En modifiant son Si pour affecter 0 à la place du "", c'est correct également.
Pour éviter d'avoir à vérifier le formatage de ses cellules sous excel, il aimerait que ces cas soit gérés au niveau du VBA. Alors je me demandais s'il n'y avait pas plus simple que de le contrôler comme ceci : if Cells(26, 6).Value = "" then Cells(26, 6).Value = 0 end if if isnull(Workbooks("REV.xls").Sheets("ech").Cells(28, 4).Value) then Workbooks("REV.xls").Sheets("ech").Cells(28, 4).Value = 0 end if
Si tu utilises cette syntaxe avec la fonction Sum, tu n'auras pas de problèmes que ta formule retourne 0 ou "". IL faut éviter d'utiliser le "+" car cela génère une erreur 13 (tu connais) et pour cause : + pommes ..., excel n'est pas capable d'évaluer cela !!!! '------------------------ With Workbooks("REV.XLS") With .Sheets("ech") .Cells(28, 4).Value = WorksheetFunction.Sum(.Cells(28, 4), Cells(26, 6)) End With End With '------------------------
Salutations!
"Steph_D" a écrit dans le message de news: d1ebqs$il3$ Un peu plus d'explications.
Mon client a composé une macro avec une centaine de sommes comme ceci : Workbooks("REV.XLS").Sheets("ech").Cells(28, 4).Value Workbooks("REV.xls").Sheets("ech").Cells(28, 4).Value + Cells(26, 6).Value
La cellule Workbooks("REV.XLS").Sheets("ech").Cells(28, 4) peut être vide lors de la première utilisation. Si j'initialise la cellule à 0 sous excel, c'est correct.
La cellule Cells(26, 6).Value du classeur actif est le résultat d'un SI : =SI(ET(facturation!$F$17>ò4;facturation!$F$17<ò5);facturation!$F$46;"") En modifiant son Si pour affecter 0 à la place du "", c'est correct également.
Pour éviter d'avoir à vérifier le formatage de ses cellules sous excel, il aimerait que ces cas soit gérés au niveau du VBA. Alors je me demandais s'il n'y avait pas plus simple que de le contrôler comme ceci : if Cells(26, 6).Value = "" then Cells(26, 6).Value = 0 end if if isnull(Workbooks("REV.xls").Sheets("ech").Cells(28, 4).Value) then Workbooks("REV.xls").Sheets("ech").Cells(28, 4).Value = 0 end if
Si tu utilises cette syntaxe avec la fonction Sum, tu n'auras pas de problèmes que ta formule retourne 0 ou "". IL faut
éviter d'utiliser le "+" car cela génère une erreur 13 (tu connais) et pour cause : + pommes ..., excel n'est pas
capable d'évaluer cela !!!!
'------------------------
With Workbooks("REV.XLS")
With .Sheets("ech")
.Cells(28, 4).Value = WorksheetFunction.Sum(.Cells(28, 4), Cells(26, 6))
End With
End With
'------------------------
Salutations!
"Steph_D" <steph_D@caramail.com> a écrit dans le message de news: d1ebqs$il3$1@s1.news.oleane.net...
Un peu plus d'explications.
Mon client a composé une macro avec une centaine de sommes comme ceci :
Workbooks("REV.XLS").Sheets("ech").Cells(28, 4).Value Workbooks("REV.xls").Sheets("ech").Cells(28, 4).Value + Cells(26, 6).Value
La cellule Workbooks("REV.XLS").Sheets("ech").Cells(28, 4) peut être vide
lors de la première utilisation.
Si j'initialise la cellule à 0 sous excel, c'est correct.
La cellule Cells(26, 6).Value du classeur actif est le résultat d'un SI :
=SI(ET(facturation!$F$17>ò4;facturation!$F$17<ò5);facturation!$F$46;"")
En modifiant son Si pour affecter 0 à la place du "", c'est correct
également.
Pour éviter d'avoir à vérifier le formatage de ses cellules sous excel, il
aimerait que ces cas soit gérés au niveau du VBA.
Alors je me demandais s'il n'y avait pas plus simple que de le contrôler
comme ceci :
if Cells(26, 6).Value = "" then
Cells(26, 6).Value = 0
end if
if isnull(Workbooks("REV.xls").Sheets("ech").Cells(28, 4).Value) then
Workbooks("REV.xls").Sheets("ech").Cells(28, 4).Value = 0
end if
Si tu utilises cette syntaxe avec la fonction Sum, tu n'auras pas de problèmes que ta formule retourne 0 ou "". IL faut éviter d'utiliser le "+" car cela génère une erreur 13 (tu connais) et pour cause : + pommes ..., excel n'est pas capable d'évaluer cela !!!! '------------------------ With Workbooks("REV.XLS") With .Sheets("ech") .Cells(28, 4).Value = WorksheetFunction.Sum(.Cells(28, 4), Cells(26, 6)) End With End With '------------------------
Salutations!
"Steph_D" a écrit dans le message de news: d1ebqs$il3$ Un peu plus d'explications.
Mon client a composé une macro avec une centaine de sommes comme ceci : Workbooks("REV.XLS").Sheets("ech").Cells(28, 4).Value Workbooks("REV.xls").Sheets("ech").Cells(28, 4).Value + Cells(26, 6).Value
La cellule Workbooks("REV.XLS").Sheets("ech").Cells(28, 4) peut être vide lors de la première utilisation. Si j'initialise la cellule à 0 sous excel, c'est correct.
La cellule Cells(26, 6).Value du classeur actif est le résultat d'un SI : =SI(ET(facturation!$F$17>ò4;facturation!$F$17<ò5);facturation!$F$46;"") En modifiant son Si pour affecter 0 à la place du "", c'est correct également.
Pour éviter d'avoir à vérifier le formatage de ses cellules sous excel, il aimerait que ces cas soit gérés au niveau du VBA. Alors je me demandais s'il n'y avait pas plus simple que de le contrôler comme ceci : if Cells(26, 6).Value = "" then Cells(26, 6).Value = 0 end if if isnull(Workbooks("REV.xls").Sheets("ech").Cells(28, 4).Value) then Workbooks("REV.xls").Sheets("ech").Cells(28, 4).Value = 0 end if
Merci d'avance.
Steph_D
Merci Christian. Bonne fin de journée
Je lui ai donné comme solution If IsNumeric(Cells(26, 6).Value) Then If IsNull(Workbooks("REV.xls").Sheets("ech").Cells(28, 4).Value) Then Workbooks("REV.XLS").Sheets("ech").Cells(28, 4).Value = Cells(26, 6).Value Else Workbooks("REV.XLS").Sheets("ech").Cells(28, 4).Value = _ Workbooks("REV.xls").Sheets("ech").Cells(28, 4).Value + Cells(26, 6).Value End If End If
Merci Christian. Bonne fin de journée
Je lui ai donné comme solution
If IsNumeric(Cells(26, 6).Value) Then
If IsNull(Workbooks("REV.xls").Sheets("ech").Cells(28, 4).Value) Then
Workbooks("REV.XLS").Sheets("ech").Cells(28, 4).Value = Cells(26,
6).Value
Else
Workbooks("REV.XLS").Sheets("ech").Cells(28, 4).Value = _
Workbooks("REV.xls").Sheets("ech").Cells(28, 4).Value +
Cells(26, 6).Value
End If
End If
Je lui ai donné comme solution If IsNumeric(Cells(26, 6).Value) Then If IsNull(Workbooks("REV.xls").Sheets("ech").Cells(28, 4).Value) Then Workbooks("REV.XLS").Sheets("ech").Cells(28, 4).Value = Cells(26, 6).Value Else Workbooks("REV.XLS").Sheets("ech").Cells(28, 4).Value = _ Workbooks("REV.xls").Sheets("ech").Cells(28, 4).Value + Cells(26, 6).Value End If End If
Steph_D
Merci MichDenis.
Comme je ne "programme" pas souvent en VBA (le travail ici exigeant d'autres priorités), j'oublie fréquemment la syntaxe correcte et la plus rapide (bien que je me nourrisse amplement de vos conseils) ;o))) .
Ce bout magique de code dans l'urgence devrait le satisfaire.
Bon week-end
Merci MichDenis.
Comme je ne "programme" pas souvent en VBA (le travail ici exigeant d'autres
priorités), j'oublie fréquemment la syntaxe correcte et la plus rapide (bien
que je me nourrisse amplement de vos conseils) ;o))) .
Ce bout magique de code dans l'urgence devrait le satisfaire.
Comme je ne "programme" pas souvent en VBA (le travail ici exigeant d'autres priorités), j'oublie fréquemment la syntaxe correcte et la plus rapide (bien que je me nourrisse amplement de vos conseils) ;o))) .
Ce bout magique de code dans l'urgence devrait le satisfaire.