Fonction Si par Macro VB

  • Initiateur de la discussion Initiateur de la discussion undo
  • Date de début Date de début

Boostez vos compétences Excel avec notre communauté !

Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force. Apprenez, échangez, progressez – et tout ça gratuitement ! 👉 Inscrivez-vous maintenant !

Re : Fonction Si par Macro VB

Ok, merci à tous.

Je n'ai pas tout à fait résolu mon problème, j'insiste encore et toujours : je ne veux pas de formule mais une macro...

Je vais glaner les autres forums, si je trouve la solution, je la posterai sur ED
 
Re : Fonction Si par Macro VB

Si tu as un moment, tu m'expliqueras en deux mots pourquoi tu penses qu'une macro fera mieux le travail ... alors qu'une formule le fait déjà ...
Existe-t-il une raison cachée pour ce choix ... ?
 
Re : Fonction Si par Macro VB

eh eh, j'attise la curiosité.

Comme je l'expliquais dans mes précédents posts, j'ai une autre macro qui tourne et qui si dans la colonne B on trouve "RUPTURE", la macro copie la ligne entière dans une autre feuille.

Le problème avec les formules, c'est que la macro ne reconnaît pas le changement de texte "EN STOCK" vers "RUPTURE".

A moins que tu me trouves une solution à ce problème, voilà où j'en suis...

Merci 😉
 
Re : Fonction Si par Macro VB

Effectivement ... je suis curieux... j'ai envie de savoir pourquoi tu cherches à faire plus compliqué ...

Par rapport à ta macro qui tourne, je ne sais pas si tu as déjà fait un test ...
mais il n' y a de raison sérieuse pour qu'elle ne sache pas lire le résultat de la formule ...

Fais moi savoir si çà coince ou pas ... après ton test ...

A+
 
Re : Fonction Si par Macro VB

Re

une facon de proceder par recherche des mots-clés

Code:
Sub test()
Set c = ActiveSheet.Cells.Find("JANVIER", LookIn:=xlValues, lookat:=xlWhole)
coldeb = c.Column
'11 parceque 12 mois dans l'année
colfin = coldeb + 11
Set c = ActiveSheet.Cells.Find("FOURNISSEUR", LookIn:=xlValues, lookat:=xlWhole)
ldeb = c.Row + 1
colf = c.Column
Set c = ActiveSheet.Cells.Find("RUPTURE", LookIn:=xlValues, lookat:=xlWhole)
colrup = c.Column
Set c = ActiveSheet.Cells.Find("DELAI LIVRAISON", LookIn:=xlValues, lookat:=xlWhole)
coldel = c.Column
For n = ldeb To Cells(65536, colf).End(xlUp).Row
 For m = coldeb To colfin
   If Cells(n, coldel) <> "" Then
    If Cells(n, m) <> "" And Cells(n, m) < Cells(n, coldel) Then
     Cells(n, colrup) = "RUPTURE"
     Exit For
   Else
     Cells(n, colrup) = "EN STOCK"
   End If
  End If
 Next m
Next n
End Sub
 
Re : Fonction Si par Macro VB

Merci Pierre Jean,

J'y suis presque, je vous renvoies le fichier modifié, reprenant la contrainte demandée dans le post précédent...

Merci de votre aide.

Re

une facon de proceder par recherche des mots-clés

Code:
Sub test()
Set c = ActiveSheet.Cells.Find("JANVIER", LookIn:=xlValues, lookat:=xlWhole)
coldeb = c.Column
'11 parceque 12 mois dans l'année
colfin = coldeb + 11
Set c = ActiveSheet.Cells.Find("FOURNISSEUR", LookIn:=xlValues, lookat:=xlWhole)
ldeb = c.Row + 1
colf = c.Column
Set c = ActiveSheet.Cells.Find("RUPTURE", LookIn:=xlValues, lookat:=xlWhole)
colrup = c.Column
Set c = ActiveSheet.Cells.Find("DELAI LIVRAISON", LookIn:=xlValues, lookat:=xlWhole)
coldel = c.Column
For n = ldeb To Cells(65536, colf).End(xlUp).Row
 For m = coldeb To colfin
   If Cells(n, coldel) <> "" Then
    If Cells(n, m) <> "" And Cells(n, m) < Cells(n, coldel) Then
     Cells(n, colrup) = "RUPTURE"
     Exit For
   Else
     Cells(n, colrup) = "EN STOCK"
   End If
  End If
 Next m
Next n
End Sub
 

Pièces jointes

Re : Fonction Si par Macro VB

Ok super, ça fonctionne. Désolé pour les bribes d'information...

Par contre la première ligne du tableau ne fonctionne pas correctement, et ne respecte pas les conditions... Pourriez-vous m'aider ?

Re

Voila adapté a 2 colonnes par mois (ce que ma boule de cristal trop embuée m'avait caché)
Suppose egalement que le tableau commence en colonne A
 
Re : Fonction Si par Macro VB

C'est nickel, ça marche.

Mais j'avoues, je galère et pour adapter votre macro à mon tableau finalisé, j'ai du mal.

de plus dans votre macro, il me semble que sur la 1ère ligne le mot "RUPTURE" n'existe pas, la fonction est chintée.

help

Re
Exact

il y avait une erreur : j'ajoutais 1 a c.row pour avoir ldeb puis 1 encore a ldeb pour demarrer l'inspection

Toutes mes excuses
 

Pièces jointes

Re : Fonction Si par Macro VB

Salut,

pierrejean 😉 avait répondu avant que je n'ai fini ma macro.
La demande ayant changé, voici peut-être un code correspondant (changement à partir de cellules isolées) :
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
 
Re : Fonction Si par Macro VB

C'est nickel, ça marche.

Juste un bémol, dans ta fonction, les target.address doivent être des valeurs dans les cellules et non des formules, sinon il ne reconnaît pas le changement.

As tu une idée ?

Salut,

pierrejean 😉 avait répondu avant que je n'ai fini ma macro.
La demande ayant changé, voici peut-être un code correspondant (changement à partir de cellules isolées) :
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
 
Re : Fonction Si par Macro VB

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
 

Pièces jointes

- Navigue sans publicité
- Accède à Cléa, notre assistante IA experte Excel... et pas que...
- Profite de fonctionnalités exclusives
Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel.
Je deviens Supporter XLD
Assurez vous de marquer un message comme solution pour une meilleure transparence.

Discussions similaires

Réponses
20
Affichages
631
  • Question Question
Microsoft 365 Fonction SI
Réponses
23
Affichages
434
Retour