IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Macros et VBA Excel Discussion :

Détecter une cellule colorée


Sujet :

Macros et VBA Excel

  1. #1
    Membre à l'essai
    Homme Profil pro
    Ingénieur développement matériel électronique
    Inscrit en
    Juillet 2015
    Messages
    57
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : Canada

    Informations professionnelles :
    Activité : Ingénieur développement matériel électronique
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Juillet 2015
    Messages : 57
    Points : 17
    Points
    17
    Par défaut Détecter une cellule colorée
    Bonjour, je travail sur une fonction que je dois adapter, je désire qu'elle détecte une cellule colorée, pour ensuite prendre la valeur dans cette case colorée.
    Je ne suis pas sûr de ma fonction de détection de couleur. Voici ma fonction au complet.

    Vous voyez, ligne 14, ma tentative.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    Public Function Cherche_valeur(ByVal Table As Range, ByVal Valeur As Range, Decal As Long)
     
    Dim Rng1 As Range
    Dim i As Integer
     
     
    Set Rng1 = Table.Find(Valeur.Value, , xlValues, xlWhole, xlByRows, xlNext, False, False)
    i = 1
    If Rng1 Is Nothing Then
        Cherche_valeur = "0"
        Exit Function
    End If
    While Rng1.Offset(i, Decal) <> Cells(i, 1).Font.ColorIndex = 4
     
        i = i + 1
    Wend
     
    Cherche_valeur = Rng1.Offset(i, Decal).Value
     
    End Function
    Merci à tous ceux qui voudront m'aider

  2. #2
    Membre éprouvé Avatar de keygen08
    Homme Profil pro
    Inscrit en
    Octobre 2012
    Messages
    545
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ardennes (Champagne Ardenne)

    Informations forums :
    Inscription : Octobre 2012
    Messages : 545
    Points : 973
    Points
    973
    Par défaut
    Bonjour

    me parait bizarre ça
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    While Rng1.Offset(i, Decal) <> Cells(i, 1).Font.ColorIndex = 4
    Je l'aurais plutôt ecris comme ça sans prejuger du resultat
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    While Rng1.Offset(i, Decal).font.color <> Cells(i, 1).Font.Color

  3. #3
    Membre à l'essai
    Homme Profil pro
    Ingénieur développement matériel électronique
    Inscrit en
    Juillet 2015
    Messages
    57
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : Canada

    Informations professionnelles :
    Activité : Ingénieur développement matériel électronique
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Juillet 2015
    Messages : 57
    Points : 17
    Points
    17
    Par défaut
    Merci Keygen,

    En fait, ce que je comprends de ta ligne, c'est que tu compares avec une cellule, au lieu de comparer avec une couleur de fond, non ?

    Je vais faire des tests avec ta ligne voir si ça change quelque chose que je n'ai pas remarqué !

  4. #4
    Expert confirmé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2013
    Messages
    3 617
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Alimentation

    Informations forums :
    Inscription : Mai 2013
    Messages : 3 617
    Points : 5 912
    Points
    5 912
    Par défaut
    Bonjour,

    Si c'est la couleur du fond, essayer avec Interior
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    While Rng1.Offset(i, Decal).interior.color <> Cells(i, 1).interior.Color
    MPi²

  5. #5
    Membre éprouvé Avatar de keygen08
    Homme Profil pro
    Inscrit en
    Octobre 2012
    Messages
    545
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ardennes (Champagne Ardenne)

    Informations forums :
    Inscription : Octobre 2012
    Messages : 545
    Points : 973
    Points
    973
    Par défaut
    oui bien vu, moi, pas fais attention, moi pas concentrer
    + 1 pour parmi

  6. #6
    Membre à l'essai
    Homme Profil pro
    Ingénieur développement matériel électronique
    Inscrit en
    Juillet 2015
    Messages
    57
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : Canada

    Informations professionnelles :
    Activité : Ingénieur développement matériel électronique
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Juillet 2015
    Messages : 57
    Points : 17
    Points
    17
    Par défaut
    @Parmi

    Si je comprends ta fonction, elle prend la couleur de fond de la cellule de départ, cherche la cellule qui a la meme couleur de fond (boucle) et ensuite elle sélectionne l'info dans cette cellule ?

    Je ne comprends pas lors pour cela ne fonctionne pas, je n'ai pas d'erreur mais ma fonction ne prend pas la bonne valeur avec ta ligne de commande !!

  7. #7
    Membre éprouvé Avatar de keygen08
    Homme Profil pro
    Inscrit en
    Octobre 2012
    Messages
    545
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ardennes (Champagne Ardenne)

    Informations forums :
    Inscription : Octobre 2012
    Messages : 545
    Points : 973
    Points
    973
    Par défaut
    il faut modifier le <> en = puisque l'on recherche une couleur equivalente a la cellule de depart

  8. #8
    Membre à l'essai
    Homme Profil pro
    Ingénieur développement matériel électronique
    Inscrit en
    Juillet 2015
    Messages
    57
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : Canada

    Informations professionnelles :
    Activité : Ingénieur développement matériel électronique
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Juillet 2015
    Messages : 57
    Points : 17
    Points
    17
    Par défaut
    Y a-t-il moyen de déterminer une couleur (par exemple vert lime) et lui demander d'être égale à celle-ci au lieu de comparer une autre cellule ? Car ma cellule de départ normalement est vide de couleur.

  9. #9
    Expert confirmé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2013
    Messages
    3 617
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Alimentation

    Informations forums :
    Inscription : Mai 2013
    Messages : 3 617
    Points : 5 912
    Points
    5 912
    Par défaut
    Peut-être que je ne comprends pas bien le but de l'exercice...

    Ta cellule en ligne 1 doit prendre la valeur d'une cellule qui possède la même couleur qu'elle ?
    ou la valeur de n'importe laquelle des cellules qui possède une couleur de fond autre que blanc ?

    Peux-tu expliquer un peu plus ?
    MPi²

  10. #10
    Membre à l'essai
    Homme Profil pro
    Ingénieur développement matériel électronique
    Inscrit en
    Juillet 2015
    Messages
    57
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : Canada

    Informations professionnelles :
    Activité : Ingénieur développement matériel électronique
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Juillet 2015
    Messages : 57
    Points : 17
    Points
    17
    Par défaut
    En fait,

    Le programme part de la cellule 1, peut importe sa couleur, décale de tant de cellule (à l'aide d'une autre formule dans une autre feuille)

    Ensuite, notre étape, il descend les lignes jusqu'à ce qu'il tombe sur une cellule verte, il prend la donnée et l'envoie sur l'autre feuille.
    J'avais fais la détection d'une cellule vide au départ, ça fonctionnait mais pour les besoins de la cause, je dois changer pour lui donner une couleur de référence.

    Voilà, c'est plus clair ou pas ?

    Merci de ton aide en passant, très appréciée !

  11. #11
    Expert confirmé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2013
    Messages
    3 617
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Alimentation

    Informations forums :
    Inscription : Mai 2013
    Messages : 3 617
    Points : 5 912
    Points
    5 912
    Par défaut
    Ça prendrait le numéro de la couleur que tu recherches.
    Il existe différente sortes de vert et, depuis les récentes versions, il y aussi les différents Pattern...
    C'est moins simple que ce qu'il ne paraît...

    Selon ce que je comprends, j'irais comme ceci si tu ne recherches qu'une couleur
    Valeur et Decal ne semble pas vraiment utiles, mais je peux me tromper...
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    Public Function Cherche_valeur(ByVal Table As Range)     ', ByVal Valeur As Range, Decal As Long)
     
        Dim Cellule As Range
     
        For Each Cellule In Table
            If Cellule.Interior.Color = 4 Then  'changer le 4 par la bonne valeur
                Cherche_valeur = Cellule.Value
                Exit For
            End If
        Next
     
    End Function
    MPi²

  12. #12
    Expert confirmé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2013
    Messages
    3 617
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Alimentation

    Informations forums :
    Inscription : Mai 2013
    Messages : 3 617
    Points : 5 912
    Points
    5 912
    Par défaut
    Et tu pourrais y aller aussi en vérifiant tout ce qui n'est pas blanc
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    If Cellule.Interior.ColorIndex <> -4142 Then
    MPi²

  13. #13
    Membre à l'essai
    Homme Profil pro
    Ingénieur développement matériel électronique
    Inscrit en
    Juillet 2015
    Messages
    57
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : Canada

    Informations professionnelles :
    Activité : Ingénieur développement matériel électronique
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Juillet 2015
    Messages : 57
    Points : 17
    Points
    17
    Par défaut
    En fait,

    Valeur et Decal sont importants puisque c'est eux qui détermine ma position dans le tableau. Attention, je ne veux pas seulement chercher un Font dans un tableau... je veux trouver la valeur qui se cache dans une cellule (de couleur 4 par exemple) dans la colonne qui correspond à ma recherche. Cette colonne est décidée par un décalage (il diffère à chaque mesure).

    Exemple :

    Nom : exemple.JPG
Affichages : 1680
Taille : 246,1 Ko

  14. #14
    Expert confirmé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2013
    Messages
    3 617
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Alimentation

    Informations forums :
    Inscription : Mai 2013
    Messages : 3 617
    Points : 5 912
    Points
    5 912
    Par défaut
    Quand tu appelles ta Function, qu'est-ce que tu lui donnes comme paramètre ?
    As-tu un exemple ?
    MPi²

  15. #15
    Membre à l'essai
    Homme Profil pro
    Ingénieur développement matériel électronique
    Inscrit en
    Juillet 2015
    Messages
    57
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : Canada

    Informations professionnelles :
    Activité : Ingénieur développement matériel électronique
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Juillet 2015
    Messages : 57
    Points : 17
    Points
    17
    Par défaut
    Oui voici un exemple ;

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    =Cherche_valeur('[CMAC SRA Aug-04-15.xls]Circuit Boards '!$A:$B;A12;3)
    ou encore

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    =Cherche_valeur('[CMAC SRA Aug-04-15.xls]Circuit Boards '!$A:$B;A12;4)
    N.B. le dernier paramètre change

  16. #16
    Expert confirmé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2013
    Messages
    3 617
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Alimentation

    Informations forums :
    Inscription : Mai 2013
    Messages : 3 617
    Points : 5 912
    Points
    5 912
    Par défaut
    Dans l'image que tu as mise, c'est le code 28089462, inscrit en A12, que tu cherches dans la plage A:B ?
    Si oui, le Find que tu utilises va toujours trouver une valeur, soit celle en A12 puisque déjà dans la plage...
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    Set Rng1 = Table.Find(Valeur.Value, , xlValues, xlWhole, xlByRows, xlNext, False, False)
    i = 1
    If Rng1 Is Nothing Then
        Cherche_valeur = "0"
        Exit Function
    End If
    Donc, si je comprends, tu dois décaler du nombre de colonnes que tu donnes en paramètres, mais aussi de quelques lignes vers le bas ou tu restes sur la même ligne que le code ?
    MPi²

  17. #17
    Membre à l'essai
    Homme Profil pro
    Ingénieur développement matériel électronique
    Inscrit en
    Juillet 2015
    Messages
    57
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : Canada

    Informations professionnelles :
    Activité : Ingénieur développement matériel électronique
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Juillet 2015
    Messages : 57
    Points : 17
    Points
    17
    Par défaut
    Comme tu as bien compris, mais en fait j'ai plusieurs codes, je descend A13-A14-A15 dans les paramètres que je donne, j'ai une liste de 30 codes environ.

    Oui je dois décaler de tant de colonne (comme je décide) et ensuite je dois descendre de quelques lignes. L'ennui est que ces lignes varient beaucoup. Je ne peux pas simplement donner un nombre de saut de ligne. Je dois avoir un repère. Je pensais à mettre en couleur la cellule que je veux accéder.

    Si tu as besoin d'autres infos n'hésite pas

  18. #18
    Expert confirmé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2013
    Messages
    3 617
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Alimentation

    Informations forums :
    Inscription : Mai 2013
    Messages : 3 617
    Points : 5 912
    Points
    5 912
    Par défaut
    Essaie avec ceci pour voir
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    Public Function Cherche_valeur(ByVal Table As Range, ByVal Valeur As Range, Decal As Long)
        Dim Rng1 As Range
        Dim i As Integer
     
        Set Rng1 = Table.Find(Valeur.Value, , xlValues, xlWhole, xlByRows, xlNext, False, False)
        If Rng1 Is Nothing Then
            Cherche_valeur = "0"
            Exit Function
        End If
     
        For i = 0 To 10 'je me donne 10 lignes pour trouver une couleur identique - à changer selon
            If Range("A" & Rng1.Row).Interior.Color = Range("A" & Rng1.Row).Offset(i, Decal).Interior.Color Then
                Cherche_valeur = Range("A" & Rng1.Row).Offset(i, Decal).Value
                Exit Function
            End If
        Next
     
    End Function
    MPi²

  19. #19
    Membre à l'essai
    Homme Profil pro
    Ingénieur développement matériel électronique
    Inscrit en
    Juillet 2015
    Messages
    57
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : Canada

    Informations professionnelles :
    Activité : Ingénieur développement matériel électronique
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Juillet 2015
    Messages : 57
    Points : 17
    Points
    17
    Par défaut
    Salut,

    À première vue, ça ne fonctionne pas. Est-ce que c'est possible de m'expliquer ce bout ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
            If Range("A" & Rng1.Row).Interior.Color = Range("A" & Rng1.Row).Offset(i, Decal).Interior.Color Then
                Cherche_valeur = Range("A" & Rng1.Row).Offset(i, Decal).Value
    Merci

  20. #20
    Expert confirmé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2013
    Messages
    3 617
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Alimentation

    Informations forums :
    Inscription : Mai 2013
    Messages : 3 617
    Points : 5 912
    Points
    5 912
    Par défaut
    En faisant le Find, si tu trouves la valeur recherchée, elle se trouve sur Rng1.Row en colonne A

    Donc, je boucle de cette ligne aux 10 suivantes
    Si la couleur du code trouvé est identique à la cellule décalée, on prend sa valeur et on sort de la boucle

    If Range("A" & Rng1.Row).Interior.Color (C'est la couleur de la cellule avec le code qu'on a trouvé avec Find)
    = Range("A" & Rng1.Row).Offset(i, Decal).Interior.Color Then (La couleur des cellules de la boucle de 10 lignes, décalées de X colonnes)
    Cherche_valeur = Range("A" & Rng1.Row).Offset(i, Decal).Value (La valeur de la cellule trouvée avec la même couleur de fond)

    Est-ce que c'est plus clair et est-ce que ça fait du sens ?
    MPi²

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 2 12 DernièreDernière

Discussions similaires

  1. Détecter une cellule vide via une macro
    Par Kiera dans le forum Macros et VBA Excel
    Réponses: 7
    Dernier message: 23/01/2015, 03h12
  2. Détecter une cellule vide
    Par lenul78570 dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 16/12/2009, 11h53
  3. somme jusqu'à une cellule colorée
    Par jetset30 dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 11/02/2009, 15h01
  4. [VBA Excel] détecter une cellule commençant par apostrophe par macro
    Par yridwenn dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 30/01/2007, 18h35

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo