Microsoft 365 Cellules colorées d'une ligne (vba)

Gourbi1986

XLDnaute Nouveau
Bonjour à tous,

Nouveau problème :)

Donc dans mon tableau j'ai plusieurs plages de cellules colorées qui correspondent à des réservations et j'ai une colonne "retour prévu" qui m'indique l’en-tête de colonne (une date) de la dernière cellule colorée de cette ligne, jusqu'ici tout va bien :)
Par contre la fonction vba m'indique la dernière cellule colorées (donc le dernier jour de la dernière réservation) sans prendre en compte les autres plages de cellules colorées qui se trouvent avant :(

Ce que je voudrais c'est que la fonction vba s’arrête à la fin de la première plage de cellules colorées puis, passe à la suivante en fonction de la date du jour.

Merci d'avance pour vos réponses :)

N'hésitez pas à m'en demander plus si ce n'est pas clair..
 

Pièces jointes

  • Planning testvba2.xlsm
    34.2 KB · Affichages: 15
Solution
Re,
Si j'ai bien compris :
1- Si la cellule en date d'aujourd'hui est colorée, on cherche la dernière cellule colorée dans le futur.
2- Si la cellule en date d'aujourd'hui est blanche, on cherche la dernière cellule colorée dans le passé.
VB:
Function RetourPrévu(D)
RetourPrévu = ""
DerCol = Cells(2, Cells.Columns.Count).End(xlToLeft).Column
Ligne = D.Row
ColToDay = 0
For C = 7 To DerCol
    If Cells(2, C) = Date Then ColToDay = C
Next C
If ColToDay = 0 Then Exit Function
If Cells(Ligne, ColToDay).Interior.Color <> RGB(255, 255, 255) Then
    ' Cas où la cellule d'aujourd'hui est en couleur, on cherche la prochaine transition
    For C = ColToDay To DerCol
        If Cells(Ligne, C).Interior.Color <> RGB(255, 255, 255) And _...

Lolote83

XLDnaute Barbatruc
Re bonjour Gourbi1986,
Je ne comprends pas ta demande
Si je prends la ligne 6, la date de retour indiquée est le 12/08/20 soit effectivement la dernière date des cellules colorées.
Au final, quelle date souhaiterais tu voir apparaitre ?
Le 02/08/20 pour la première cellule de la première plage colorée ?
Le 07/08/20 pour la dernière cellule de la première plage colorée ?
Le 10/08/20 pour la première cellule de la deuxième plage colorée ?
Le 12/08/20 pour la denière cellule de la deuxième plage colorée (c'est ça actuellement)
C'est pas clair tout ça.
@+ Lolote83
 

Gourbi1986

XLDnaute Nouveau
Re bonjour Gourbi1986,
Je ne comprends pas ta demande
Si je prends la ligne 6, la date de retour indiquée est le 12/08/20 soit effectivement la dernière date des cellules colorées.
Au final, quelle date souhaiterais tu voir apparaitre ?
Le 02/08/20 pour la première cellule de la première plage colorée ?
Le 07/08/20 pour la dernière cellule de la première plage colorée ?
Le 10/08/20 pour la première cellule de la deuxième plage colorée ?
Le 12/08/20 pour la denière cellule de la deuxième plage colorée (c'est ça actuellement)
C'est pas clair tout ça.
@+ Lolote83

Re Lolote83,

J'a remis mon excel à jour au niveau des dates pour que ce soit plus clair.
Je prend comme exemple la ligne 8, dans la colonne "retour prévu" la cellule affiche le 21/09 ce qui correspond à la dernière cellule colorée de la dernière réservation, mais ça ne tient pas en compte la réservation précédente qui prend fin au 10/09.
En fait je voudrais que les lignes de la colonne "retour prévu" affiche la dernière cellule colorée de la première réservation, puis passe à la suivante après un laps de temps.

J'espère avoir été plus clair :)

Merci d'avance.
 

Pièces jointes

  • Planning testvba2.xlsm
    34.2 KB · Affichages: 3

Lolote83

XLDnaute Barbatruc
Re bonjour,
Tu souhaites afficher une date dans une cellule. Soit. Mais si j'ai bien compris, tu souhaite afficher en premier une date, puis quelques temps après une autre date ?
En fait je voudrais que les lignes de la colonne "retour prévu" affiche la dernière cellule colorée de la première réservation, puis passe à la suivante après un laps de temps.
De fait, au final, tu auras donc bien la dernière date de la dernière plage.
Ce laps de temps, comme tu sembles le dire, de combien souhaites tu qu'il soit.
Cela veut dire que si tu as (comme sur la ligne 7) quatre plages, tu aurais 4 dates qui s'afficheraient dans un laps de temps défini ?????
Perso, je ne vois pas du tout comment faire ?
Je reste sur le fil pour voir si d'autres personnes peuvent apporter une solution.
Désolé
@+ Lolote83
 

sylvanu

XLDnaute Barbatruc
Supporter XLD
Bonjour Gourbi, Lolote,
Bien d'accord, pas clair. ;)
En PJ un essai.
J'affiche le prochain retour prévu en date d'aujourd'hui, sans me préoccuper du passé, ni des locations futures.
VB:
Function RetourPrévu(D)
RetourPrévu = ""
DerCol = Cells(2, Cells.Columns.Count).End(xlToLeft).Column
Ligne = D.Row
ColToDay = 0
For C = 7 To DerCol
    If Cells(2, C) = Date Then ColToDay = C
Next C
If ColToDay = 0 Then Exit Function
For C = ColToDay To DerCol
    If Cells(Ligne, C).Interior.Color <> RGB(255, 255, 255) And _
        Cells(Ligne, C + 1).Interior.Color = RGB(255, 255, 255) Then
        RetourPrévu = CDate(Format(Cells(2, C), "[$-40C]dd-mmm;@"))
        Exit Function
    End If
Next C
End Function
 

Pièces jointes

  • Planning testvba2 (4).xlsm
    33.6 KB · Affichages: 4

Lolote83

XLDnaute Barbatruc
Re bonjour Gourbi1986, Sylvanu,
N'ayant pas compris vraiment la demande, j'ai donc fait sur double clic d'un Toll Kits la liste en feuille2 des différents Emprunt et Retour pur l'article sélectionné.
Je pense que ce n'est pas la solution, mais ......
A voir
@+ Lolote83
 

Pièces jointes

  • Copie de GOURBI1986 - Planning Testvba2.xlsm
    48.3 KB · Affichages: 3

Gourbi1986

XLDnaute Nouveau
Re bonjour,
Tu souhaites afficher une date dans une cellule. Soit. Mais si j'ai bien compris, tu souhaite afficher en premier une date, puis quelques temps après une autre date ?

De fait, au final, tu auras donc bien la dernière date de la dernière plage.
Ce laps de temps, comme tu sembles le dire, de combien souhaites tu qu'il soit.
Cela veut dire que si tu as (comme sur la ligne 7) quatre plages, tu aurais 4 dates qui s'afficheraient dans un laps de temps défini ?????
Perso, je ne vois pas du tout comment faire ?
Je reste sur le fil pour voir si d'autres personnes peuvent apporter une solution.
Désolé
@+ Lolote83

Re Lolote83,

Dsl j'ai du mal à être clair car la demande est complexe :)

En fait je souhaite faire apparaître la date de la première plage (en cours) puis passer à la date de la plage suivante seulement quand celle-ci arrive à la date du jour.

Du coup je te donne un exemple :

Nous sommes le 07/09 et j'ai une réservation qui cours jusqu'au 10/09 donc dans la cellule "retour prévu" il doit s'afficher "10/09" et dans un deuxième temps, j'ai une réservation qui commence le 17/09 et se termine le 25/09 !
Je voudrais que la cellule "retour prévu" affiche toujours la date du 10/09 jusqu'au moment ou on atteigne le début de la prochaine réservation (c'est à dire le 17/09) et là la cellule devra afficher le "25/09".
Comme ça ainsi de suite.

J'espère avoir été plus clair.

Merci d'avance :)
 

Gourbi1986

XLDnaute Nouveau
Bonjour Gourbi, Lolote,
Bien d'accord, pas clair. ;)
En PJ un essai.
J'affiche le prochain retour prévu en date d'aujourd'hui, sans me préoccuper du passé, ni des locations futures.
VB:
Function RetourPrévu(D)
RetourPrévu = ""
DerCol = Cells(2, Cells.Columns.Count).End(xlToLeft).Column
Ligne = D.Row
ColToDay = 0
For C = 7 To DerCol
    If Cells(2, C) = Date Then ColToDay = C
Next C
If ColToDay = 0 Then Exit Function
For C = ColToDay To DerCol
    If Cells(Ligne, C).Interior.Color <> RGB(255, 255, 255) And _
        Cells(Ligne, C + 1).Interior.Color = RGB(255, 255, 255) Then
        RetourPrévu = CDate(Format(Cells(2, C), "[$-40C]dd-mmm;@"))
        Exit Function
    End If
Next C
End Function

Re Sylvanu,

Merci ça fonctionne très bien, mais une fois la date du jour dépassé, la colonne "retour prévu" passe directement à la fin de l'échéance suivante.
Je voudrais que même si la date du jour est dépassée, la colonne "retour prévu" affiche toujours toujours la date de la précédente échéance jusqu'à ce que la date du jour arrive sur une nouvelle échéance.

J'espère avoir été plus clair :)

Merci d'avance.
 

Gourbi1986

XLDnaute Nouveau
Re,
Il semble que c'est ce que fait le fichier du post #5.
Il remonte la prochaine date à partir d'aujourd'hui.
Quand celle ci est passée il reprends la prochaine Etc,Etc....

Re,

Oui c'est exact, mais passé la date du jour ça passe directement à la prochaine, alors que je voudrais que cette date reste affichée jusqu'au premier jour de la prochaine échéance en fait !

Merci pour ce que tu fais Sylvanu :)
 

sylvanu

XLDnaute Barbatruc
Supporter XLD
Re,
Si j'ai bien compris :
1- Si la cellule en date d'aujourd'hui est colorée, on cherche la dernière cellule colorée dans le futur.
2- Si la cellule en date d'aujourd'hui est blanche, on cherche la dernière cellule colorée dans le passé.
VB:
Function RetourPrévu(D)
RetourPrévu = ""
DerCol = Cells(2, Cells.Columns.Count).End(xlToLeft).Column
Ligne = D.Row
ColToDay = 0
For C = 7 To DerCol
    If Cells(2, C) = Date Then ColToDay = C
Next C
If ColToDay = 0 Then Exit Function
If Cells(Ligne, ColToDay).Interior.Color <> RGB(255, 255, 255) Then
    ' Cas où la cellule d'aujourd'hui est en couleur, on cherche la prochaine transition
    For C = ColToDay To DerCol
        If Cells(Ligne, C).Interior.Color <> RGB(255, 255, 255) And _
            Cells(Ligne, C + 1).Interior.Color = RGB(255, 255, 255) Then
            RetourPrévu = CDate(Format(Cells(2, C), "[$-40C]dd-mmm;@"))
            Exit Function
        End If
    Next C
Else
    ' Cas où la cellule d'aujourd'hui est blanche, on cherche la dernière transition
    For C = ColToDay To 7 Step -1
        If Cells(Ligne, C).Interior.Color <> RGB(255, 255, 255) And _
            Cells(Ligne, C + 1).Interior.Color = RGB(255, 255, 255) Then
            RetourPrévu = CDate(Format(Cells(2, C), "[$-40C]dd-mmm;@"))
            Exit Function
        End If
    Next C
End If
End Function
 

Pièces jointes

  • Planning testvba2 (10).xlsm
    34.3 KB · Affichages: 3

Discussions similaires

Réponses
16
Affichages
306

Statistiques des forums

Discussions
312 329
Messages
2 087 324
Membres
103 516
dernier inscrit
René Rivoli Monin