OVH Cloud OVH Cloud

Erreur 13

6 réponses
Avatar
Steph_D
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.

6 réponses

Avatar
AV
J'effectue, en VBA, une somme entre deux cellules.


Et tu la fais comment cette somme ?
Comme ça ?
MsgBox Application.Sum([A1:A2])

AV

Avatar
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.




Avatar
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.
Avatar
MichDenis
Bonjour Steph_D,

| Workbooks("REV.XLS").Sheets("ech").Cells(28, 4).Value | Workbooks("REV.xls").Sheets("ech").Cells(28, 4).Value + Cells(26, 6).Value

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.
Avatar
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
Avatar
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