comment ecrire la fonction "si"

yomenb

XLDnaute Nouveau
salut a tous
je viens vers vous par ce que je me suis planté je ne connais pas utilisé la fonction « si » dans le langage vba
en effet dans le fichier ci joint je souhaiterai que les données ne soient enregistrées dans la base de donnée que si le montant à payer ou a encaisser est égale au montant des somme physique autrement dit (si D20 de la feuille « saisie » est égale à M16 de la feuille saisie ) et que la somme des mouvements des billets (voir « M19 : V19 feuille base de données) et supérieur à zéro. Je souhaite que la macro « saisie_caisse » soit exécutée si ces deux condition sont réunies. Je veux que le message « billetage insuffisant » soit retourné si ces deux conditions ne sont pas vraies
 

Pièces jointes

  • projet cd.xlsm
    33.4 KB · Affichages: 45
  • projet cd.xlsm
    33.4 KB · Affichages: 52
  • projet cd.xlsm
    33.4 KB · Affichages: 55

job75

XLDnaute Barbatruc
Re : comment ecrire la fonction "si"

Bonjour yomenb,

Vous n'avez guère de réponse sur ce fil ni sur l'autre que vous avez ouvert.

Probablement parce que tout le monde se demande ce qui va se passer quand vous aurez entré plus de 17 lignes dans la feuille base de données.

En effet la plage M19:V19 sera écrasée :confused:

Mais pour s'en tenir à votre demande vous pouvez mettre au début de votre macro saisi_caisse :

Code:
If Sheets("saisie").[D20] <> Sheets("saisie").[M16] Or _
  Application.Sum(Sheets("base de données").[M19:V19]) <= 0 _
    Then MsgBox "Billetage insuffisant!", 48: Exit Sub
A+
 

job75

XLDnaute Barbatruc
Re : comment ecrire la fonction "si"

Re,

Peut-être faut-il qu'aucune des cellules de la plage M19:V19 soit <= 0, alors utiliser :

Code:
If Sheets("saisie").[D20] <> Sheets("saisie").[M16] Or _
  Application.CountIf(Sheets("base de données").[M19:V19], 0) Or _
    Not Sheets("base de données").[M19:V19].Find("-*", , xlValues) Is Nothing _
      Then MsgBox "Billetage insuffisant !", 48: Exit Sub
Application.CountIf c'est la fonction NB.SI.

A+
 
Dernière édition:

job75

XLDnaute Barbatruc
Re : comment ecrire la fonction "si"

Re,

En essayant de mieux comprendre je vois une autre possibilité : chaque cellule de la plage L4:L13 de la feuille saisie ne doit pas être supérieure à chaque cellule de la plage M19:V19 de la feuille base de données.

Alors en début de macro :

Code:
Dim i As Byte, flag As Boolean, ligne As Long
With Sheets("saisie")
  For i = 1 To 10
    If .Cells(i + 3, "L") > Sheets("base de données").Cells(19, i + 12) _
      Then flag = True: Exit For
  Next
  If .[D20] <> .[M16] Or flag _
    Then MsgBox "Billetage insuffisant !", 48: Exit Sub
End With
A+
 

yomenb

XLDnaute Nouveau
Re : comment ecrire la fonction "si"

c'est un début de solution mais je ne suis pas complètement satisfait en fait je veux contrôler le nombre de billet par coupure pour qu'il de soit pas négatif après l'enregistrement d'un paiement je ne sait pas si quelqu'un a une autre astuce
 

job75

XLDnaute Barbatruc
Re : comment ecrire la fonction "si"

Bonjour yomenb,

en fait je veux contrôler le nombre de billet par coupure pour qu'il de soit pas négatif après l'enregistrement d'un paiement

C'est bien ce que j'ai compris au post #4, vous ne semblez pas avoir testé mon code :rolleyes:

NB : votre ligne M19:V19 ne contrôle pas les coupures de 2 et de 1, c'est voulu j'espère...

A+
 
Dernière édition:

yomenb

XLDnaute Nouveau
Re : comment ecrire la fonction "si"

j'ai bien testé votre code pour l'instant la première condition fonctionne bien (contrôle de l’égalité des cellule D20 ET M16 de la feuille saisie) il reste le contrôle des coupures a l’enregistrement
c’était juste a titre indicatif je souhaite contrôler toutes les coupures je pourrais faire cette somme même à la ligne 100 000 pour permettre d'enregistrement de plusieurs lignes
 

Discussions similaires

Statistiques des forums

Discussions
312 490
Messages
2 088 875
Membres
103 980
dernier inscrit
grandmasterflash38