RESOLU Langage VBA rédiger des conditions

chris6999

XLDnaute Impliqué
Bonjour

Mon message d'hier n'ayant trouvé aucune réponse j'essaye de reformuler mon problème en espérant être plus claire et peut-être avoir plus de succés.

J'essaye vainement de rédiger une macro comme je le ferais pour une fonction avec des SI imbriqués.
Je pars de la macro de type
Private Sub Worksheet_Change(ByVal Target As Range)

Lorsqu'une date est saisie dans la colonne 7 (ou g)
La macro positionne la date + 30 jours dans la colonne 0
Dans le cas où la colonne 7 est vide le contenu de 0 est supprimé

Jusque là j'ai trouvé cela pourrait donner :

Private Sub Worksheet_Change(ByVal Target As Range)

If Target.Column = 7 Then
‘Si cellule dans colonne 7 est vide
If Target.Value = "" Then
‘Supprime le contenu des cellules m, n et o.

Range("m" & Target.Row & ":n" & Target.Row & ":eek:" & Target.Row & ":p" & Target.Row).ClearContents

Else
‘positionne dans O la valeur de la cellule colonne 7 + 30Range("o" & Target.Row) = Cells(Target.Row, 7).Value + 30
End If
End If
end sub


Mais ce n'est pas tout! et là ça se corse :
Je voudrais ajouter des évènements complémentaires (toujours sur la saisie liée à la colonne 7) mais je bute sur la rédaction de mes conditions et l’enchainement avec le début du code

Les conditions et résultats attendus sont les suivants :

-Si la date remontée dans O est supérieure à la date du jour
et que la cellule de la colonne T est vide
alors la macro positionne dans la colonne P le texte « HORS DELAIS »

-Si la différence entre la date qui remonte dans O et la date du jour est inférieure à 6 alors
jour et que la cellule de la colonne T est vide
alors la macro positionne le texte « vite » dans P

Je précise que je ne veux pas de fonctions dans mon fichier ( ce qui est le cas aujourd’hui)

Je suis sûre qu’il existe une possibilité mais elles ne sont pas à ma portée de connaissance à priori (qui n’est pas trèx élevé en VBA il faut bien l’avouer..) .

Je mets un fichier test en pièce jointe
J espère qu’une âme charitable pourra m’aider
Bonne soirée
 

Pièces jointes

  • TEST.xls
    24.5 KB · Affichages: 32
  • TEST.xls
    24.5 KB · Affichages: 33
  • TEST.xls
    24.5 KB · Affichages: 33
Dernière édition:

Dranreb

XLDnaute Barbatruc
Re : Langage VBA rédiger des conditions

Bonsoir.
À priori ça pourrait s'écrire comme ça par exemple :
VB:
Private Sub Worksheet_Change(ByVal Target As Range)
Dim L As Long, dT As Long
If Target.Column <> 7 Or Target.Count <> 1 Then Exit Sub
L = Target.Row
If Target.Value = "" Then
   Cells(L, 13).Resize(, 3).ClearContents
ElseIf Cells(L, 20).Value = "" Then
   dT = Cells(L, 15).Value - Date
   If dT > 0 Then Cells(L, 16).Value = "HORS DELAI" Else If dT > -6 Then Cells(L, 16).Value = "vite"
   Cells(L, 18).Value = Cells(L, 7).Value + 30
   End If
End Sub
Mais j'ai pas testé.
Cordialement.
 

chris6999

XLDnaute Impliqué
Re : Langage VBA rédiger des conditions

Bonsoir

Merci encore pour cette propositin qui me fait entrevoir le bout du tunnel.
Je l'ai testé et cela fonctionne partiellement.

A priori lorsque je saisie une date dans G la macro positionne la valeur de G +30 dans la colonne 18.
J'ai essayé de corriger le code mais quand je remplace
Cells(L, 18).Value = Cells(L, 7).Value + 30
par Cells(L, 15).Value = Cells(L, 7).Value + 30
Les rérences à vite et hors délais ne fonctionnent plus.

Indépendamment de ce problème
Je pense que la notion de "vite" se positionne pas correctement.

En fait il s'agit de mettre une alerte lorsque la date limite qui remonte dans O arrive à expiration dans les 5 jours qui précèdent la date du jour.
Exemple nous sommes le 7 juin.
La macro devra afficher "vite" si la date butoir est le 6, le 5, le 4, le 3 ou le 2 juin. (dans les 5 jours qui précèdent la date du jour)... c'est pas facile à expliquer en tous cas.

Hors quand je teste en réel la notion de vite apparaît même si la date limite est supérieure à la date du jour.

Si tu as d'autres idées...
Merci quand même
 

Discussions similaires

Statistiques des forums

Discussions
312 754
Messages
2 091 686
Membres
105 048
dernier inscrit
Nicoeum