Microsoft 365 Formule spéciale en vba

  • Initiateur de la discussion Initiateur de la discussion Amymone
  • 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 !

Amymone

XLDnaute Nouveau
Bonjour le forum

Mes meilleurs vœux pour cette année 2023.
Serait -il possible si la commande est livré en G mettre alors "ok" en H et si possible en vba, je vous remercie
 

Pièces jointes

Bonjour Amymone,
Un essai en PJ avec :
VB:
Sub Worksheet_Change(ByVal Target As Range)
On Error GoTo Fin: If Target.Count > 1 Then Exit Sub
    If Not Intersect(Target, [G4:G1000]) Is Nothing Then
         Ligne = Target.Row
         If Cells(Ligne, "F") <> "" And Target <> "" Then Cells(Ligne, "H") = "Ok"
    End If
Fin:
End Sub
Dans l'état on regarde juste si F et G est non vide, sans se préoccuper si ce sont des dates ou non.
Donc on peut l'affiner et l'améliorer au besoin.
 

Pièces jointes

Re,
En PJ une approche que par VBA sans formule :
1- A l'ouverture du fichier, analyse de toutes les lignes et ré actualisation des Relance, avec :
VB:
Private Sub Workbook_Open()
With Feuil1
    Application.ScreenUpdating = False
    .[H4:H1000].Clear
    For L = 4 To .[F65500].End(xlUp).Row
        If .Cells(L, "F") <> "" And .Cells(L, "G") <> "" Then
            .Cells(L, "H") = "Ok"
        ElseIf .Cells(L, "F") < Date And .Cells(L, "G") = "" Then
                .Cells(L, "H") = "Relance"
                .Cells(L, "H").Font.Color = vbRed
                .Cells(L, "H").Font.Bold = True
        ElseIf .Cells(L, "F") > Date And .Cells(L, "G") = "" Then
                ' Calcul du temps avant relance, à supprimer si non necessaire.
                .Cells(L, "H") = "Relance dans " & .Cells(L, "F") - Date & " jours."
                .Cells(L, "H").Font.Italic = True
        End If
    Next L
End With
End Sub
2- Par modif de la colonne G, réactualisation des données.
Code:
Sub Worksheet_Change(ByVal Target As Range)
On Error GoTo Fin: If Target.Count > 1 Then Exit Sub
    If Not Intersect(Target, [G4:G1000]) Is Nothing Then
         Ligne = Target.Row
         If Cells(Ligne, "F") <> "" And Target <> "" Then
            Cells(Ligne, "H") = "Ok"
            Cells(Ligne, "H").Font.Color = vbBlack
            Cells(Ligne, "H").Font.Bold = False
         ElseIf Cells(Ligne, "F") <> "" And Target = "" Then
            Cells(Ligne, "H") = "Relance"
            Cells(Ligne, "H").Font.Color = vbRed
            Cells(Ligne, "H").Font.Bold = True
        End If
    End If
Fin:
End Sub
La méthode que par VBA évite d'avoir des formules en H à propager.
L'analyse à l'ouverture du fichier réactualise les données en fonction de la date d'aujourd'hui, ce qui change les résultats si le fichier n'a pas été ouvert depuis plusieurs jours.
A noter que la Relance dans xx jours peut être supprimée dans le code, c'est indiqué.
 

Pièces jointes

Re,

Il y a un petit souci car "relance" doit apparaitre seulement 3 jours après la date limite de livraison et non à toutes les dates. Si nous somme le 12 janvier 2023 et que la date limite de livraison est le 10 janvier 2023 rien ne doit apparaître, ainsi de suite, j'espère que j'ai été claire
Merci
 
Re,
Vous auriez pu rectifier de vous même, c'était un simple bug, il y avait .Cells(L, "F") < Date au lieu de .Cells(L, "F") < Date - 2.
J'ai simplifié la macro avec la date de relance, ce sera plus simple à maintenir si vous vouliez faire des modifs.
 

Pièces jointes

bonsoir à tout les deux
moi je me pose la question
que va t il se passer si je tape autre chose qu'une date dans les cellule en "F"

Private Sub Workbook_Open()
With Feuil1
Application.ScreenUpdating = False
.[H4:H1000].Clear
For L = 4 To .[F65500].End(xlUp).Row

If .Cells(L, "F") <> "" And .Cells(L, "G") <> "" Then
.Cells(L, "H") = "Ok"


ElseIf .Cells(L, "F") < Date And .Cells(L, "G") = "" Then
.Cells(L, "H") = "Relance"
.Cells(L, "H").Font.Color = vbRed
.Cells(L, "H").Font.Bold = True


ElseIf .Cells(L, "F") > Date And .Cells(L, "G") = "" Then
' Calcul du temps avant relance, à supprimer si non necessaire.
.Cells(L, "H") = "Relance dans " & .Cells(L, "F") - Date & " jours."
.Cells(L, "H").Font.Italic = True
End If
Next L
End With
End Sub
 
Bonsoir tout les deux
je crois qu'une démo vaut mieux que des mots
essayer de taper
n'importe quoi
une date
ou tout ce que vous voudrez
et lancez la sub
VB:
Sub test()
    L = 1
    With Feuil1

        If .Cells(L, "F") <> "" And .Cells(L, "G") <> "" Then
            texte = "ok" & vbCrLf


        ElseIf .Cells(L, "F") < Date And .Cells(L, "G") = "" Then
            texte = texte & "Relance" & vbCrLf
            texte = texte & "couleur=" & vbRed & vbCrLf
            texte = texte & "Bold =" & True


        ElseIf .Cells(L, "F") > Date And .Cells(L, "G") = "" Then
            ' Calcul du temps avant relance, à supprimer si non necessaire.
            texte = texte & "Relance dans " & .Cells(L, "F") - Date & " jours."
            texte = texte & "Italic =" & True
        End If
    End With
    MsgBox texte
End Sub
 
- 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

Discussions similaires

Réponses
4
Affichages
538
Réponses
8
Affichages
241
Retour