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

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
 

James007

XLDnaute Barbatruc
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 ... ?
 

groundhog

XLDnaute Junior
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 ;)
 

James007

XLDnaute Barbatruc
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+
 

pierrejean

XLDnaute Barbatruc
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
 

groundhog

XLDnaute Junior
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

  • Groundhog2bis.zip
    11.9 KB · Affichages: 75

pierrejean

XLDnaute Barbatruc
Re : Fonction Si par Macro VB

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
 

Pièces jointes

  • Grounhog2bis.zip
    13.9 KB · Affichages: 81

groundhog

XLDnaute Junior
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
 

groundhog

XLDnaute Junior
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

  • GROUNDHOG3.xls
    29.5 KB · Affichages: 119
  • GROUNDHOG3.xls
    29.5 KB · Affichages: 123
  • GROUNDHOG3.xls
    29.5 KB · Affichages: 117

Fo_rum

XLDnaute Accro
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
 

groundhog

XLDnaute Junior
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
 

pierrejean

XLDnaute Barbatruc
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

  • GROUNDHOG3.zip
    12.1 KB · Affichages: 84
  • GROUNDHOG3.zip
    12.1 KB · Affichages: 82
  • GROUNDHOG3.zip
    12.1 KB · Affichages: 80

Discussions similaires

Réponses
4
Affichages
129
Réponses
5
Affichages
400
Compte Supprimé 979
C