Récuperer deux valeurs selon la couleur de la cellule

Bonsoir à tous,

Je n'arrive pas à extraire la valeur d'une cellule colorée.

L'idée est de :

Détecter dans chaque ligne, pour une plage de données définie :

  • la première cellule colorée en partant de la gauche et l'afficher dans 1ere valeur
  • la première cellule colorée en partant de la droite et l'afficher dans 2nde valeur

Je vous remercie par avance.

capture

Bonsoir,

Peux-tu fournir ton fichier, car c'est un peu dur de travailler dans le vide !

Cordialement.

Bonsoir,

Alors oui, bien sur, avec plaisir même !

Ce qui serait génial, c'est de pouvoir colorer un intervalle de cases, et avoir la date de début ainsi que la date de fin.

Merci bcp

Bonsoir frencky, MFerrand,

je te propose ce fichier Excel :

53exo-frencky.xlsm (15.71 Ko)

Ctrl e ➯ travail effectué

tu peux ajouter d'autres lignes sous la ligne 6 : le code VBA les prendra automatiquement en compte

(par contre, le nombre de colonnes pris en compte est fixe)


Alt F11 pour voir le code VBA, puis revenir sur Excel

si besoin, tu peux demander une adaptation.

merci de me dire si ça te convient.


j'avais déjà commencé mon fichier (selon ta copie d'écran) avant que tu postes le tien.

dhany

Bonjour,

Fonction personnalisée :

Function DEBUTFINCOULEUR(plg As Range)
    Dim d%, f%
    Application.Volatile
    With plg
        For d = 1 To .Cells.Count
            If .Cells(1, d).Interior.ColorIndex <> xlColorIndexNone Then Exit For
        Next d
        For f = d To .Cells.Count - 1
            If .Cells(1, f + 1).Interior.ColorIndex = xlColorIndexNone Then Exit For
        Next f
        DEBUTFINCOULEUR = Array(.Cells(1, d), .Cells(1, f))
    End With
End Function

S'utilise comme une autre fonction Excel.

La fonction est matricielle : sélectionner les 2 cellules de résultats, taper la fonction (= suivi de son nom), en arguments (entre parenthèses) l'adresse de la plage où on cherche la couleur :

=DEBUTFINCOULEUR(B7:I7)

et valider par Ctrl+Maj+Entrée

Les deux résultats, début et fin de la plage colorée appraissent dans les deux cellules.

La fonction se recalcule lors des recalculs. Mais un changement de couleur ne provoque pas de recalcul, donc si on modifie la plage colorée sans qu'aucun élément ne relance le recalcul, il faut le relancer pour que la mise à jour s'opère.

Cordialement.

edit : Resalut Dhany !

@frencky

lis d'abord mon post précédent : https://forum.excel-pratique.com/viewtopic.php?p=670987#p670987


finalement, j'ai quand même téléchargé ton fichier (au cas où) ; j'pensais qu'ça allait être le même que ta copie d'écran initiale, et j'ai eu la grosse surprise de voir que c'était assez différent :

1) c'est des dates au lieu de lettres

2) tes lignes de données commencent en ligne 7 au lieu de 4

3) il y a une colonne de plus, donc de B à I au lieu de B à H


tout ça m'a obligé à reprendre mon travail de départ pour adapter mon code VBA initial à ces nouveautés !

alors à ton avis, pourquoi crois-tu qu'on demande de joindre un fichier représentatif ? c'était pourtant pas compliqué, pour toi, de faire un tableau avec le même nombre de colonnes et les mêmes positions, même si c'était avec des lettres et pas des dates !

j'suppose qu'on doit s'estimer heureux si dans les 2 cas, la couleur à détecter est la même ? (exactement l'même jaune) ; que tes plages de résultats sont 2 colonnes, et toutes deux juste à droite des colonnes de données ? (merci quand même, hein ? )


bon, voilà donc ton fichier (avec des dates) adapté :

Ctrl e ➯ travail effectué

tu peux ajouter d'autres lignes sous la ligne 8 : le code VBA les prendra automatiquement en compte

(par contre, le nombre de colonnes pris en compte est fixe)

Alt F11 pour voir le code VBA, puis revenir sur Excel

si besoin, tu peux demander une adaptation.

à te lire pour avoir ton avis.

dhany h-animaux37

Bonjour,

Merci beaucoup pour vos retours, c'est hyper cool, ca me sert enormement !!

Merci.

Pensez vous qu'il est possible de rajouter par défaut la valeur 4 à la seconde date ?

La function DEBUTFINCOULEUR est très agreeable à utiliser !

L'idée serait d'utiliser cette function, mais que la 2nde date soit incrémentée de 4 par défaut.

Est-ce possible ?

Merci

Bonjour,

que la 2nde date soit incrémentée de 4 par défaut

Si tu entends par là que la 2e date doit être au moins de 4 jours supérieure à la première :

Function DEBUTFINCOULEUR(plg As Range)
    Dim d%, f%
    Application.Volatile
    With plg
        For d = 1 To .Cells.Count
            If .Cells(1, d).Interior.ColorIndex <> xlColorIndexNone Then Exit For
        Next d
        For f = d To .Cells.Count - 1
            If .Cells(1, f + 1).Interior.ColorIndex = xlColorIndexNone Then Exit For
        Next f
        DEBUTFINCOULEUR = Array(.Cells(1, d), IIf(.Cells(1, f) - .Cells(1, d) < 4, _
         .Cells(1, d) + 4, .Cells(1, f)))
    End With
End Function

La condition est mise dans la ligne qui renvoie la valeur.

Cordialement.

Effectivement, le but est d'obtenir 4 jours en plus .

Cependant, la function ne me remvoi pas mes deux dates, elle me renvoie une petite erreur

Ah ! Quelle erreur ?

@MFerrand : ben il l'a dit : une petite erreur !

Haha pardon je n'ai pas precise c'est vrai.

Alors avant, je selectionnais mes 2 cases, rentrais ma formule, selectionnais ma plage de données, et ensuite ctrl+mal+entrée m'affichait mes deux dates.

Maintenant, je n'ai plus aucune date, dans les 2 cases, il y a écrit #NOM? - Erreur due a un nom non valide

ah, si c'est une erreur #NOM?, ça veut dire que le nom de la fonction n'est pas reconnu !

donc vérifie l'orthographe ; ça doit être : =DEBUTFINCOULEUR(ta plage)

le nom de la fonction utilisé dans la formule doit être exactement le même que celui du code VBA.

dhany

Ca fonctionne parfaitement !!!!!!

Merci beaucoup vous deux, je vous souhaite une excellente soirée !!!

Rechercher des sujets similaires à "recuperer deux valeurs couleur"