Fonction Si par Macro VB

undo

XLDnaute Junior
Bonjour a tous,

je cherche a remplacer la fonction Si par une macro Excel:confused:

Merci d'avance

cordialement,
undo
 

groundhog

XLDnaute Junior
Re : Fonction Si par Macro VB

Le fichier est correct également, mais je retrouve le même problème, c'est à dire que si il s'agit d'un résultat de formule, la macro ne prend pas en compte le résultat et ainsi n'agit pas sur la colonne situation...

Re

Salut Fo_rum

Voila un essai qui devrait permettre de modifier le tableau a loisir (toutefois en gardant une meme disposition pour chaque mois)
Je manque de temps pour tester et pour commenter
Teste d'abord et je commenterai plus tard
 

groundhog

XLDnaute Junior
Re : Fonction Si par Macro VB

Je reprends le fichier de pierre jean, avec sur la première ligne du tableau, une formule dans la colonne I. Tu verras que si la valeur de la formule change, la macro ne prend pas en compte ce changement

:confused::confused::confused:
J'aimerais tellement connaitre cette macro ... !!!
Est-ce-que cette macro ne se mettrait-elle pas, dès son démarrage, en mode de calcul manuel ...???

A +
 

Pièces jointes

  • GROUNDHOG3.zip
    11.4 KB · Affichages: 79
  • GROUNDHOG3.zip
    11.4 KB · Affichages: 78
  • GROUNDHOG3.zip
    11.4 KB · Affichages: 76

James007

XLDnaute Barbatruc
Re : Fonction Si par Macro VB

Désolé ...mais à part le fait qu'aucune variable n'est définie ...
La macro fonctionne correctement ... et reprend les valeurs des cellules ... !!!

Le piège est dans son déclenchement automatique ...
Je t'ai réduit le champ à la cellule D6 pour tes tests ... !!!

A +
 

Pièces jointes

  • GROUNDHOGV31.zip
    12.4 KB · Affichages: 79
  • GROUNDHOGV31.zip
    12.4 KB · Affichages: 83
  • GROUNDHOGV31.zip
    12.4 KB · Affichages: 81

pierrejean

XLDnaute Barbatruc
Re : Fonction Si par Macro VB

Re

A mon avis le probleme est le suivant:
Lorsqu'une cellule contient une formule , le changement de son resultat n'aboutit pas necessairement a l'evenement Change
Avec ton fichier James c'est le changement de D6 qui provoque l'execution de la macro (qui par contre sait parfaitement lire le resultat de la formule en I6)
On en vient donc a renforcer la question que tu as posée a savoir
D'ou provient la modification du resultat de la formule ????
Par ailleurs c'est assez consciemment que je me permets de ne pas declarer mes variables dans les fichiers dont l'ampleur ne le justifie pas . C'est une facilité offerte par Excel comme beaucoup d'autres (ex : ne pas citer la feuille s'il est evident que l'on est sur l'active , omettre le .value , [A1] au lieu de Range("A1") etc...)
 

groundhog

XLDnaute Junior
Re : Fonction Si par Macro VB

Peux tu voir le problème en utilisant cette macro, proposée par Fo_rum ?


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
 

groundhog

XLDnaute Junior
Re : Fonction Si par Macro VB

J'utilise une formule matricielle dans la colonne I, peut être est-ce le coeur du soucis ?!

Re

A mon avis le probleme est le suivant:
Lorsqu'une cellule contient une formule , le changement de son resultat n'aboutit pas necessairement a l'evenement Change
Avec ton fichier James c'est le changement de D6 qui provoque l'execution de la macro (qui par contre sait parfaitement lire le resultat de la formule en I6)
On en vient donc a renforcer la question que tu as posée a savoir
D'ou provient la modification du resultat de la formule ????
Par ailleurs c'est assez consciemment que je me permets de ne pas declarer mes variables dans les fichiers dont l'ampleur ne le justifie pas . C'est une facilité offerte par Excel comme beaucoup d'autres (ex : ne pas citer la feuille s'il est evident que l'on est sur l'active , omettre le .value , [A1] au lieu de Range("A1") etc...)
 

James007

XLDnaute Barbatruc
Re : Fonction Si par Macro VB

Re

A mon avis le probleme est le suivant:
Lorsqu'une cellule contient une formule , le changement de son resultat n'aboutit pas necessairement a l'evenement Change
Avec ton fichier James c'est le changement de D6 qui provoque l'execution de la macro (qui par contre sait parfaitement lire le resultat de la formule en I6)
On en vient donc a renforcer la question que tu as posée a savoir
D'ou provient la modification du resultat de la formule ????
Par ailleurs c'est assez consciemment que je me permets de ne pas declarer mes variables dans les fichiers dont l'ampleur ne le justifie pas . C'est une facilité offerte par Excel comme beaucoup d'autres (ex : ne pas citer la feuille s'il est evident que l'on est sur l'active , omettre le .value , [A1] au lieu de Range("A1") etc...)
@PierreJean ...
1. Je comprends tes remarques... mais travailler en Option Explicit permet d'éviter certains déboires ... comme tu le sais (surtout sur un code inconnu)
2. Vis à vis du demandeur, j'ai réagi parce quil m'est difficile de lui laisser dire que "les macros ne reconnaissent pas les résultats des formules" ... !!!
3. Sur le fond, le problème reste la macro évènementielle qui déclenchera ta macro : avec le choix entre Change, Selection_Change et Calculate en fonction de ce qui est désiré et du mode de travail de l'utilisateur ...
Je suis sûr que nous sommes parfaitement d'accord sur tous ces points.

A +
:)
 

groundhog

XLDnaute Junior
Re : Fonction Si par Macro VB

Voici mon fichier définitif, avec l'ensemble des macros liées.

Mon problème reste donc dans la feuille "bdd_stocks" l'affichage de la valeur "RUPTURE" ou "EN STOCK", selon le délai par mois > ou < au délai de livraison

Merci pour votre aide

@PierreJean ...
1. Je comprends tes remarques... mais travailler en Option Explicit permet d'éviter certains déboires ... comme tu le sais (surtout sur un code inconnu)
2. Vis à vis du demandeur, j'ai réagi parce quil m'est difficile de lui laisser dire que "les macros ne reconnaissent pas les résultats des formules" ... !!!
3. Sur le fond, le problème reste la macro évènementielle qui déclenchera ta macro : avec le choix entre Change, Selection_Change et Calculate en fonction de ce qui est désiré et du mode de travail de l'utilisateur ...
Je suis sûr que nous sommes parfaitement d'accord sur tous ces points.

A +
:)
 

Pièces jointes

  • GROUNDHOG DEFINITIF.zip
    45 KB · Affichages: 78
  • GROUNDHOG DEFINITIF.zip
    45 KB · Affichages: 74
  • GROUNDHOG DEFINITIF.zip
    45 KB · Affichages: 78

Fo_rum

XLDnaute Accro
Re : Fonction Si par Macro VB

salut tous,

si j'ai compris (seule la colonne H modifiable influe sur la réponse)) ,
Code:
Private Sub Worksheet_Change(ByVal Target As Range)
  Dim Li As Integer, I As Byte, Contenu
  If Target.Count > 1 And Target.Column <> 8 Then Exit Sub
  Li = Target.Row
  If Li > 5 Then
    For I = 1 To 12
      Contenu = Cells(Li, 6 * (I + 1) + 2)
      If Contenu <> "" Then
        If Int(Contenu) < Range("H" & Li) Then C = C + 1
      End If
    Next
    Cells(Li, "B") = IIf(C = 0, "EN STOCK", "RUPTURE")
  End If
End Sub
 

groundhog

XLDnaute Junior
Re : Fonction Si par Macro VB

Non, je suis désolé :

Ta première formule répond bien à la demande. Le seul hic, et comme je l'indique dans les précédents posts, c'est que lors d'une modification de valeur (via une formule) dans les colonnes par mois, rien ne se passe. La seule façon d'obtenir le résultat escompté, c'est de taper la modif en texte dans la colonne.

salut tous,

si j'ai compris (seule la colonne H modifiable influe sur la réponse)) ,
Code:
Private Sub Worksheet_Change(ByVal Target As Range)
  Dim Li As Integer, I As Byte, Contenu
  If Target.Count > 1 And Target.Column <> 8 Then Exit Sub
  Li = Target.Row
  If Li > 5 Then
    For I = 1 To 12
      Contenu = Cells(Li, 6 * (I + 1) + 2)
      If Contenu <> "" Then
        If Int(Contenu) < Range("H" & Li) Then C = C + 1
      End If
    Next
    Cells(Li, "B") = IIf(C = 0, "EN STOCK", "RUPTURE")
  End If
End Sub
 

pierrejean

XLDnaute Barbatruc
Re : Fonction Si par Macro VB

Re

Compte tenu du fait que la feuille bdd_stocks peut reagir a une modification de bdd_mouvements j'ai fait un appel a la macro test a partir de Change de bdd_mouvements
PS: Il est penible de travailler avec un fichier qui change de disposition a chaque post et dont les exemples ne sont pas coherents (j'ai bataillé un moment avant de m'apercevoir que sans fournisseur en colonne F la macro ne peut donner de resultat
Veux-tu tester cette version avec des modifications correspondantes au fonctionnement normal ?
 

Pièces jointes

  • GROUNDHOG DEFINITIF.zip
    52 KB · Affichages: 78
  • GROUNDHOG DEFINITIF.zip
    52 KB · Affichages: 78
  • GROUNDHOG DEFINITIF.zip
    52 KB · Affichages: 80

Fo_rum

XLDnaute Accro
Re : Fonction Si par Macro VB

Re,

Ceci
lors d'une modification de valeur (via une formule) dans les colonnes par mois, rien ne se passe
est d'autant plus normal que l'évènement "Change" teste le changement du contenu de la cellule sélectionnée et non pas le contenu de toutes les cellules de la feuille !
Une cellule dont le contenu se modifie par une formule n'entre plus dans le cadre de cet évènement sauf si on ajoute des lignes de test.
Mais lesquelles ici ?

Tu as bien écrit :
'Seuls les champs sur fond jaune sont modifiables
alors j'ai testé la colonne H.

Tes cellules "C" sont dépendantes de plusieurs autres donc ce sont celles-ci qu'il faut tester dans l'évènement.

Dis nous clairement quelles sont les cellules modifiables qui agissent sur tes cellules "C".
Tant que tu y es, précise si tu veux le mot, à partir d'un des mois ou de tous ceux-ci !

@pierrejean : je viens de lire ton dernier message et partage ton opinion.
 

Discussions similaires

Réponses
3
Affichages
124