Macro vba : Prise en compte du resultat d'une formule

groundhog

XLDnaute Junior
Bonjour à tous,

En préambule : Je ne suis pas expert en VBA, je suis plutôt amateur. Merci pour votre indulgence... :D

Voilà, j'ai une problèmatique depuis une semaine sur un tableau de gestion de stocks, avec pour exemple la fonction suivante :

Si des les cellules des colonnes "I" et "O", le résultat de la formule < à celui des cellules de la colonne "B", alors affichage du résultat "RUPTURE" en colonne "A".

La fonction que je possède (merci à Fo_rum) fonctionne très bien, si dans les cellules des colonnes "I" et "O" le contenu est une valeur saisi manuellement. Par contre, en utilisant une formule dans les cellules des colonnes "I" et "O", le problème se complique : au changement de résultat, rien ne se passe.

Voici le code existant pour info :

Code:
Private Sub Worksheet_Change(ByVal Target As Range)
  Dim Li As Integer
  If Target.Count > 1 Then Exit Sub
  Li = Target.Row
  If Target.Address = "$I$" & Li Or Target.Address = "$O$" & Li Or Target.Address = "$U$" & Li Then
    If Target < Range("C" & Li) Then
      Cells(Li, "B") = "RUPTURE"
    Else
      Cells(Li, "B") = "EN STOCK"
    End If
  End If
End Sub



J'espère avoir été clair pour vous tous, je cherche donc la clef de l'énigme pour terminer mon projet.

Merci à tous pour vos réponses !
 

nolich

XLDnaute Occasionnel
Re : Macro vba : Prise en compte du resultat d'une formule

Bonjour groundhog, phlaurent55, vbacrumble et Jean-Pierre, bonjour à toutes et à tous :)

groundhog, j'ai ouvert ton fichier et je l'ai testé en modifiant la valeur de D6 et tout fonctionne nickel :confused:

J'ai même suivi pas à pas les procédures que tu as écrites et tout semble se passer comme tu le souhaites (à lire ton code en tout cas).

Par contre, il ne fonctionnera tel quel qu'en modifiant la cellule D6 puisque c'est la condition pour que ta procédure événementielle appelle ta procédure de "scan". Par ailleurs, tu n'as qu'une formule et elle est en I6.

Es-tu certain d'avoir vérifié que tu es bien en mode calcul automatique ?

Si je n'ai dit que des bêtises, explique-nous plus précisément le résultat que tu veux obtenir. Parce qu'à part le fait que seule D6 déclenche l'exécution de ta procédure - mais je pense que c'était pour une phase de test - je ne vois pas où se situe ton problème.

@+

EDIT : Je parle naturellement du code contenu dans ton fichier XL, car celui que tu nous as écrit dans le premier post du fil, ben j'l'ai pô trouvé...
 
Dernière édition:

phlaurent55

Nous a quittés en 2020
Repose en paix
Re : Macro vba : Prise en compte du resultat d'une formule

Re, à tous

dans la colonne B tu aura toujours du texte ( avec la formule donnée hier à 21h42 )
dans la colonne B, il faut avoir une valeur fixe, et non une formule (une autre macro tourne pour récupérer l'info et la copier dans une autre feuille).

ta macro pourra toujours récupérer le contenu de la colonne B et aller le mettre où tu voudra même dans une autre feuille
 

nolich

XLDnaute Occasionnel
Re : Macro vba : Prise en compte du resultat d'une formule

Re le fil, bonjour à toutes et à tous :)

Bon groundhog, tu as raison et la modification par formule n'entraîne pas un évènement WorkSheet_Change, mais si tu ne peux pas le faire directement, tu peux toujours espionner les cellules qui sont à l'origine du changement (Dn , Jn, Pn , etc.).

Je te joins ton fichier un peu modifié, et comme j'ai cru remarquer que tu aimais maîtriser les colonnes mois et les écarts, je te les ai mis en constantes. Ainsi, si ton fichier évolue, il te suffiras simplement de modifier ces constantes.

@+

EDIT : j'avais oublié une ligne de code (InChange =False)
 

Pièces jointes

  • Nolich_GROUNDHOG.xls
    45.5 KB · Affichages: 57
Dernière édition:

nolich

XLDnaute Occasionnel
Re : Macro vba : Prise en compte du resultat d'une formule

Re,

groundhog, dans ton code de départ, que j'ai repris pour partie, tu effectues la comparaison qui suit :

Code:
    [COLOR="Green"]' Si on est bien dans la première colonne d'un mois, alors on va vérifier
    ' la valeur contenue dans la dernière colonne du mois : d'où l'offset.
    ' que l'on compare avec la colonne $C$Li de l'entête[/COLOR]
    If Target.Offset(, EcartColMois - 1).Value [B][COLOR="Red"]<=[/COLOR][/B] Range("C" & Li).Value Then
      [COLOR="green"]' la comparaison du If renvoie True, alors on inscrit "RUPTURE" dans la
      ' colonne $B$Li de l'entête[/COLOR]
      Cells(Li, "B") = "RUPTURE"
    Else
      [COLOR="green"]' Sinon, on y inscrit "EN STOCK"[/COLOR]
      Cells(Li, "B") = "EN STOCK"
    End If

J'en déduis que lorsque la dernière colonne du mois en cours est égale au délai de livraison, tu indiques "RUPTURE" dans la colonne SITUATION. Mais j'ai également remarqué que dans ce cas précis, tu ne mettais rien dans ta MFC. Je pense que, plutôt que de la laisser en automatique, tu devrais AMHA y mettre une couleur facilement repérable. Mais ce que j 'en dis... C'est toi qui vois :)

@+
 

groundhog

XLDnaute Junior
Re : Macro vba : Prise en compte du resultat d'une formule

nolich, si tu inventais une nouvelle religion, je serai un de tes premiers adeptes.

Merci, ça marche ! :)

Juste une chose, peux-tu m'adapter le code en prenant comme variable la colonne SF au lieu de SI ?
 

nolich

XLDnaute Occasionnel
Re : Macro vba : Prise en compte du resultat d'une formule

Re, bonjour à toutes et à tous (à nouveau... La Charte :) )

Voilà la nouvelle mouture.

Pour la religion, je vais y réfléchir :D

N'hésite pas si tu as d'autres questions que celles auxquelles j'ai répondu dans les commentaires.

Tu remarqueras que j'ai déclaré les 2 constantes et les 2 variables la procédure évenementielle en long (&), mais c'est simplement parce que les colonnes et les lignes, sous VBA, sont retournées en variables de type long. Les déclarer en Integer (%) aurait entraîné une conversion de type lors des calculs. Un peu de temps machine gagné, même si ce n'est pas significatif dans ton fichier actuel, les bonnes habitudes sont payantes un jour ou l'autre ;)

@+
 

Pièces jointes

  • Nolich_GROUNDHOG_V2.xls
    46 KB · Affichages: 59

nolich

XLDnaute Occasionnel
Re : Macro vba : Prise en compte du resultat d'une formule

Re-re-re-re-re, pffffou

Je te remets en PJ ton fichier modifié. Attention, j'ai bloqué ta procédure auto-open ainsi :

Code:
[COLOR="Blue"]Sub[/COLOR] auto_open()
  [COLOR="blue"]On Error Resume Next[/COLOR]
    Sheets("home").Select
    DialogSheets("boite_dialogue").Show
  [COLOR="blue"]On Error GoTo 0[/COLOR]
[COLOR="blue"]End Sub[/COLOR]

D'ailleurs, il est assez déconseillé d'utiliser ce genre de procédure car elle existe dans ThisWorkbook sous la forme de la procédure événementielle :
Code:
[COLOR="blue"]Private Sub[/COLOR] Workbook_Open()

Sinon, pour le reste, à toi de voir et de nous faire savoir si cela te convient ou non.

@+

EDIT : c'est bien sur "SI" qu'il faut porter son attention car "SF" contient une formule qui dépend de "SI", et "C" contient une formule qui dépend de "SF" et par conséquent directement de "SI". Suivant ton organisation, pour le mois de janvier, par exemple, tu devras peut-être également surveiller les colonnes K, L et AF... To be continued :)
 

Pièces jointes

  • Nolich_GROUNDHOGV3.zip
    43 KB · Affichages: 43
  • Nolich_GROUNDHOGV3.zip
    43 KB · Affichages: 29
  • Nolich_GROUNDHOGV3.zip
    43 KB · Affichages: 29
Dernière édition:

groundhog

XLDnaute Junior
Re : Macro vba : Prise en compte du resultat d'une formule

Salut

Désolé, cela ne marche pas...

Ci-joint le fichier avec un commentaire
 

Pièces jointes

  • Nolich_GROUNDHOGV3.zip
    39.5 KB · Affichages: 26
  • Nolich_GROUNDHOGV3.zip
    39.5 KB · Affichages: 26
  • Nolich_GROUNDHOGV3.zip
    39.5 KB · Affichages: 27

nolich

XLDnaute Occasionnel
Re : Macro vba : Prise en compte du resultat d'une formule

Re le fil, bonjour à toutes et à tous :)

Pour que l'on oublie rien, peux tu me dire les cellules qui peuvent être modifiées :


- Colonne H : délai livraison
- Colonne I : "SI"
- Colonne K : "E"
- Colonne L : "S"
- Colonne AF: "PE" de "ANNEE N-1"


Et je modifierai le code en conséquence.

@+

EDIT : En plus, je m'aperçois que les colonnes K et L dépendent d'une cellule de ta feuille "bdd_mouvements". Si je ne connais pas les "cellules sources" et sans formules dont dépend le résultat, je ne pourrai pas modifier le code sans erreur.
 
Dernière édition:

groundhog

XLDnaute Junior
Re : Macro vba : Prise en compte du resultat d'une formule

Manuellement, il n'y a pas vraiment de cellule modifiable. Toutes sont liées, c'est ça le problème.

Comme tu as pu le voir, les modifications sont faites dans bdd_mouvements.

L'utilisateur saisi les entrées et sorties quotidiennement, ce qui alimente les colonnes E et S de chaque mois, selon les références.

Voilà, merci pour ton aide.



Re le fil, bonjour à toutes et à tous :)

Pour que l'on oublie rien, peux tu me dire les cellules qui peuvent être modifiées :


- Colonne H : délai livraison
- Colonne I : "SI"
- Colonne K : "E"
- Colonne L : "S"
- Colonne AF: "PE" de "ANNEE N-1"


Et je modifierai le code en conséquence.

@+

EDIT : En plus, je m'aperçois que les colonnes K et L dépendent d'une cellule de ta feuille "bdd_mouvements". Si je ne connais pas les "cellules sources" et sans formules dont dépend le résultat, je ne pourrai pas modifier le code sans erreur.
 

Discussions similaires

Réponses
1
Affichages
249
Réponses
7
Affichages
377
Réponses
5
Affichages
198