Somme sous VBA

Bonjour le forum,

Alors voilà, j'ai un petit soucis dans une partie de mon code, cette partie doit permettre de me signaler lorsqu'un montant dépasse une certaine valeur.

Sheets("Engagement").Activate
nomCherche = Cells(2, 3)
    Sheets("BDD").Activate
        Set result = Range("B2:B1400").Find(What:=nomCherche, LookIn:=xlValues)
        If result Is Nothing Then
            MsgBox "Non trouvé"
        Else

Sheets("Engagement").Activate
If Range("H13") <> "" Then

        a = Sheets("Engagement").Range("H13").Value
        b = Sheets("BDD").Range(result, result.End(xlToRight)).Offset(0, 45).Value
        dif = a + b

        c = Sheets("BDD").Range(result, result.End(xlToRight)).Offset(0, 37).Value
        If dif > c Then

        ecart = dif - c

        MsgBox "La somme des DA correspondantes à cette FA sera supérieure au montant signé de " & ecart & "€."
End If
End If

Avec le code si dessus, nomCherche fait référence à un code article, H13 à un montant qui vient s’additionner à un montant (Offset(0,45) en partant de mon code article dans ma BDD qui se situe en colonne B), si cette somme (dif = a+b) est supérieure au montant autorisé (Offset(0,37) en partant de mon code article) alors une MsgBox apparait pour me prévenir puis enchaine sur le reste du code.

Le problème se situe sur la ligne "dif = a + b", pour incompatibilité de type, j'ai essayé en faisant

 dif = Worksheetfunction.sum(a, b) 

Cependant l'erreur se retrouve au niveau de la ligne " If dif > c then", pour "Cette variable utilise un type Automation non géré par visual Basic".

J'espère avoir été assez clair et je remercie d'avance ceux qui se pencheront sur mon problème.

Au plaisir de vous lire.

Bonjour,

b = Sheets("BDD").Range(result, result.End(xlToRight)).Offset(0, 45).Value

b est un tableau, tu ne peux l'ajouter à a. C'est sans doute sa somme que tu veux.

eric

Je l'ai mis sous la forme

Sheets("BDD").Activate
Range(result, result.End(xlright)).Select
b = ActiveCell.offset(0,45).Value

et idem pour le "c", cependant, le code trouve bien la valeur correspondante pour le c mais non pour le b c'est étrange.

Pour te donner du concret, ma macro trouve bien la valeur pour "a" qui est égal à 25000, ma macro ne trouve pas la valeur de "b" qui doit être 75000 mais elle trouve la valeur de "c" qui est de 90000.

J'ai peut etre une idée, mon "b" fait référence à une cellule comportant une formule, cela peut peut etre t'orienter vers la solution ?

Une ligne de code supplémentaire peut etre ?

Merci

EDIT : C'est bon j'ai réussi à faire trouver la valeur correspondante à "b". Cependant l'erreur se retrouve au niveau de la ligne

If dif > c then

pour "Incompatibilité de type"

Je pense que cela vient de la ligne

dif = a + b

car il me renvoit "25000" car "b" garde la valeur "0" alors qu'il est censé prendre la valeur "75000"

EDIT2 :

il semble que je n'arrive pas a affecter les valeurs aux lettres.

Lorsque je pointe le "ActiveCell.Offset(0,38)" pour le "b", la valeur 75000 apparaît par contre lorsque je pointe le "b=", ca m'indique "b = vide"

Idem pour "c".

En espérant vous aider un maximum

Merci

Ecoutez, j'ai fermé et rouvert mon dossier et ca fonctionne pour le moment.

Voici mon code :

Sheets("Engagement").Activate

nomCherche = Cells(2, 3)

Sheets("BDD Créa").Activate

Set result = Range("B2:B1400").Find(What:=nomCherche, LookIn:=xlValues)

If result Is Nothing Then

MsgBox "Non trouvé"

Else

Sheets("Engagement").Activate

If Range("H13") <> "" Then

a = Sheets("Engagement").Range("H13").Value

Sheets("BDD Créa").Activate

Range(result, result.End(xlToRight)).Select

b = ActiveCell.Offset(0, 38).Value

dif = a + b

Sheets("BDD Créa").Activate

Range(result, result.End(xlToRight)).Select

c = ActiveCell.Offset(0, 37).Value

If dif > c Then

ecart = dif - c

MsgBox "La somme des DA correspondantes à cette FA sera supérieure au montant signé de " & ecart & "€."

End If

End If

Merci encore à Eric de m'avoir orienté.

Range(result, result.End(xlToRight)).Select
b = ActiveCell.Offset(0, 38).Value

.select est inutile dans 99% des cas

Et si tu veux la dernière cellule autant y aller directement que de passer par une plage :

b=result.End(xlToRight).value

Bonjour,

Comme te l'a déjà dit Eriiic, il faut savoir ce que tu pointes : une seule cellule dont tu veux la valeur qui s'y trouve ou une plage de plusieurs cellules dont tu veux la somme (et dans ce cas il faut la faire, elle ne se fait pas toute seule).

Dans ta première version, b et c étaient des plages, normal que tu aies des erreurs.

Si tu modifies au petit bonheur, surtout en utilisant ActiveCell, qui va nécessairement faire varier des résultats en fonction de la cellule active, je ne parierai pas sur la fiabilité des résultats que tu vas obtenir.

La seule question à laquelle il faut répondre, c'est ce que représente a, b et c : valeur d'une seule cellule ou somme de plusieurs (et alors lesquelles) !

Cordialement.

Ta dernière version : tu devrais pointer sur AM2 et AN2. Tant mieux si c'est cela...

N'empêche que tu a beaucoup de code inutile...

Bonjour,

Je suis amateur de VBA et je fais beaucoup de code à la logique plus qu'au savoir, il se peut effectivement qu'il y ai du code inutile dans beaucoup de mes codes mais c'est le seul moyen que j'ai trouvé pour obtenir les résultats voulus.

Pour vous faire un récap,

a = valeur saisie manuellement dans une cellule (H13) avant d'appuyer sur mon bouton

b = valeur d'une somme à laquelle j'ajoute la valeur de H13 aprés avoir appuyer sur le bouton

c = la valeur d'une cellule de référence

pour faire simple, je saisie un code article et un montant dans "Engagement"

la macro va chercher la ligne qui contient le code article dans "BDD Créa"

puis mon

Range(result, result.end(xlRight).Select

sélectionne la cellule contenant le code article

puis je décale ma sélection de x cellules pour atteindre la valeur de b

ensuite elle additionne a et b

refait les mêmes actions que pour b mais cette fois pour trouver c puis compare a+b à c.

j'imagine bien que je me complique la vie mais je ne connais pas toutes les ressources de VBA et je suis obligé de passer par des chemins dont je connais la route.

Si vous avez des conseils pour alléger mon Code je suis preneur.

Merci dans tous les cas !

Rechercher des sujets similaires à "somme vba"