Comment récupérer les informations d'une cellule (son format) et les traiter

cigogne

XLDnaute Nouveau
Bonsoir à tous.

Voila j'ai un petit inventaire de pièce.
J'ai une colonne quantité. Pour chaque pièce, j'ai associé une mise en forme conditionnelle en fonction des délais de livraison de la consommation etc.

Par exemple :
Verre : mise en forme conditionnelle si 3>=quantite>2 alors couleur de la cellule orange ; si 2>=quantité alors couleur rouge

fourchette : mise en forme conditionnelle si 5>=quantite>3 alors couleur de la cellule orange ; si 3>=quantité alors couleur rouge (délai d'appro plus long donc faut prévoir ;) )

Je voudrais savoir comment faire pour récupérer l'information de la couleur interieure des cellules.
Voila ce que j'ai fait mais je suis un débutant dans vba ... :(

Le but etant d'envoyer un mail des que j'ai une cellule rouge ou orange

Code:
' Traduction mise en forme conditionnelle
Dim Cel As Range
Dim Quantite As String
Dim F As Worksheet
Dim verifie As String
Quantite = "I16:I100"
For Each Cel In F.Range(Quantite)

' des que la couleur interieure d'une cellule est .colorindex 45 ou 3 alors verifie = True
Select Case Cel.Value
Interior.ColorIndex = 45
Interior.ColorIndex = 3
verifie = True

' Boucle mise en forme conditionnelle
If verifie = True Then

    ' Envoi du mail
    Dim MailAd As String
    Dim Msg As String
    Dim Subj As String
    Dim URLto As String
    MailAd = Range("c6")
    Subj = "Commande artciles"
    Msg = "Attention : Pensez à commander les articles"
    URLto = "mailto:" & MailAd & "?subject=" & Subj & "&body=" & Msg
    ActiveWorkbook.FollowHyperlink Address:=URLto

    ' Attente ouverture outlook
    Dim Début As Long, Fin As Long, Chrono As Long
    Début = Timer
    Fin = Début + 2
    Do Until Timer >= Fin
    DoEvents
    Loop
 
    ' Envoi du message
    SendKeys ("%s")
End If

' Fermeture et enregistrement du classeur
ActiveWorkbook.Save
Application.Quit

End Sub

Je vous remerci par avance de l'aide que vous pourrez m'apporter.

Cdlt.
Cigogne.

P.S je travaille sous Excel 2003 au cas où
 

ftho

XLDnaute Occasionnel
Re : Comment récupérer les informations d'une cellule (son format) et les traiter

Bonjour,

Essaye en remplaçant cette partie du code
Code:
For Each Cel In F.Range(Quantite)
' des que la couleur interieure d'une cellule est .colorindex 45 ou 3 alors verifie = True
Select Case Cel.Value
Interior.ColorIndex = 45
Interior.ColorIndex = 3
verifie = True

par celle-ci
Code:
For Each Cel In F.Range(Quantite)
' des que la couleur interieure d'une cellule est .colorindex 45 ou 3 alors verifie = True
If Cel.Interior.ColorIndex = 45 Or Cel.Interior.ColorIndex = 3 Then
verifie = True
Exit For
Next
 

cbea

XLDnaute Impliqué
Re : Comment récupérer les informations d'une cellule (son format) et les traiter

Bonjour à tous,

Voici quelques commentaires et corrections :
Code:
Sub TestMFC()
    ' Traduction mise en forme conditionnelle
    
    Dim Cel As Range
    Dim Quantite As Range   ' Modif du type de données de String en Range
    Dim F As Worksheet      ' A quelle feuille correspond F ?
    Dim verifie As Boolean  ' Modif du type de données de String en Boolean

    ' Définir F
    Set F = Worksheets("Feuil1")    ' par exemple
    
    ' Quantite = "I16:I100"             ' avant modif
    Set Quantite = F.Range("I16:I100")  ' après modif

    'For Each Cel In F.Range(Quantite)  ' avant modif
    For Each Cel In Quantite            ' après modif

        ' des que la couleur interieure d'une cellule est .colorindex 45 ou 3 alors verifie = True
        'Select Case Cel.Value
        '    Interior.ColorIndex = 45
        '    Interior.ColorIndex = 3
        '    verifie = True
        
        ' il n'est pas nécessaire d'utiliser un SELECT CASE
        ' faire ce qui suit :
        If Cel.Interior.ColorIndex = 45 Or Cel.Interior.ColorIndex = 3 Then
            verifie = True
            Exit For        ' Mis pour sortir de la boucle
        End If
    Next Cel                ' Traitement de la cellule suivante
        
    ' Boucle mise en forme conditionnelle
    If verifie = True Then
        ' Envoi du mail
        Dim MailAd As String
        Dim Msg As String
        Dim Subj As String
        Dim URLto As String
            
        MailAd = Range("C6")
        Subj = "Commande artciles"
        Msg = "Attention : Pensez à commander les articles"
        
        URLto = "mailto:" & MailAd & "?subject=" & Subj & "&body=" & Msg
        ActiveWorkbook.FollowHyperlink Address:=URLto
        
        ' Attente ouverture outlook
        Dim Début As Long, Fin As Long, Chrono As Long
        Début = Timer
        Fin = Début + 2
        Do Until Timer >= Fin
            DoEvents
        Loop
        
        ' Envoi du message
        SendKeys ("%s")
    End If

    ' Fermeture et enregistrement du classeur
    ActiveWorkbook.Save
    Application.Quit
End Sub
 

ftho

XLDnaute Occasionnel
Re : Comment récupérer les informations d'une cellule (son format) et les traiter

Bien vu cbea ;) je m'étais juste arrêté sur la partie du code concernant la condition des cellules colorées sans regarder le reste
 

cigogne

XLDnaute Nouveau
Re : Comment récupérer les informations d'une cellule (son format) et les traiter

Re coucou.
J'ai testé ça mais je me heurte à un petit soucis :

Chaque article a une mise en forme conditionnelle avec ses propres limites.
Imaginons que j'enlève un article du stock, ma cellule se colorie en rouge (colorindex=3) ; à ce moment là, quand on passe dans la boucle

Code:
If Cel.Interior.ColorIndex = 45 Or Cel.Interior.ColorIndex = 3 Then
            verifie = True
            Exit For        ' Mis pour sortir de la boucle
        End If
    Next Cel

Cel.Interior.ColorIndex me renvoie -4142 ( ce qui correspond à une cellule de couleur automatique)

Par contre, si je colorie manuellement cette meme cellule en rouge, alors là oui il me renvoie bien Cel.Interior.ColorIndex = 3.

Par conséquent, si on utilise une mise en forme conditionnelle avec pour action une colorisation des cellules, excel ne sait pas retranscrire la couleur par cette fonction (Cel.Interior.ColorIndex)

Avez-vous une soluce ?


Encore un grand merci pour les corrections apportées.

Cordialement.
 

cigogne

XLDnaute Nouveau
Re : Comment récupérer les informations d'une cellule (son format) et les traiter

salut,

voila une petite feuille

merci de ton aide.
 

Pièces jointes

  • Inventaire.xls
    45 KB · Affichages: 256
  • Inventaire.xls
    45 KB · Affichages: 276
  • Inventaire.xls
    45 KB · Affichages: 283
B

Biganon

Guest
Re : Comment récupérer les informations d'une cellule (son format) et les traiter

Bonjour,

Essaye en remplaçant cette partie du code
Code:
For Each Cel In F.Range(Quantite)
' des que la couleur interieure d'une cellule est .colorindex 45 ou 3 alors verifie = True
Select Case Cel.Value
Interior.ColorIndex = 45
Interior.ColorIndex = 3
verifie = True

par celle-ci
Code:
For Each Cel In F.Range(Quantite)
' des que la couleur interieure d'une cellule est .colorindex 45 ou 3 alors verifie = True
If Cel.Interior.ColorIndex = 45 Or Cel.Interior.ColorIndex = 3 Then
verifie = True
Exit For
Next

Salut Fring !
 

cigogne

XLDnaute Nouveau
Re : Comment récupérer les informations d'une cellule (son format) et les traiter

Re salut,
En fait en regardant de plus pres, il n'est pas possible de récupérer la couleur d'une mise en forme conditionnelle.

En effet, si on regarde la propriété de la cellule, la couleur de celle-ci est toujours en "automatique" que la mise en forme conditionnelle soit vérifiée au pas.

Donc j'ai fait une colonne cachée avec la quantité mini du stock.

Et ce que je voudrais faire c'est la différence entre la quantité et la quantité_mini.
Si le résultat (commande) est inférieure ou égale à 0 alors ...

une chose dans ce genre là mais je sais pas comment l'écrire :

Code:
    Dim Cel As Range
    Dim Quantite As Range
    Dim Quantite_mini As Range
    Dim Commande As String
        Dim F As Worksheet      ' A quelle feuille correspond F => choix de feuille possible
    Dim verifie As Boolean

    ' Définition des variables
    Set F = Worksheets("Feuil1")
    Set Quantite = F.Range("I15:I100")
    Set Quantite_mini = F.Range("M15:M100")
    Set Commande = Quantite - Quantite_mini      ' ça marche pas :(
    For Each Cel In Commande

    ' Recherche des cellules colorées pour envoie de mail => Ne veux pas fonctionner avec une mise en forme conditionnelle
    If Commande <= 0 Then
        verifie = True
        Exit For        ' Mis pour sortir de la boucle
    End If
    Next Cel                ' Traitement de la cellule suivante

En vous remerciant.
 
Dernière édition:

cigogne

XLDnaute Nouveau
Re : Comment récupérer les informations d'une cellule (son format) et les traiter

Bon j'ai ré-écrit une petite partie de macro avec un calcul de différence.

J'ai testé et ça fonctionne mais je pense que le code n'est pas tres propre.
Si vous avez des idées je suis preneur.

Encore merci pour votre aide.

voici le code final :

Code:
Private Sub CommandButton1_Click()

    ' Traduction mise en forme conditionnelle
    
    Dim Cel As Range
    Dim Quantite As Range
    Dim Quantite_mini As Range
    Dim Commande As Range
    Dim F As Worksheet      ' A quelle feuille correspond F => choix de feuille possible
    Dim verifie As Boolean

    ' Boucle de calcul du stock
    ' I colonne du stock actuel
    ' M colonne ou l'on donne la quantité mini avant commande (colonne cachée)
    ' O colonne ou va être calculé la différence des 2
    For t = 15 To Range("I100").End(xlUp).Row
    Range("O" & t).Value = (Range("M" & t).Value - Range("I" & t).Value)
    Next
    
    ' Définition des variables
    Set F = Worksheets("Feuil1")
    Set Commande = F.Range("O15:O100")
        
    For Each Cel In Commande

    ' Recherche des valeurs positives
        If Cel.Value >= 0 Then
            verifie = True
            Exit For        ' Mis pour sortir de la boucle
        End If
    Next Cel                ' Traitement de la cellule suivante
        
    ' Boucle mise en forme conditionnelle
    If verifie = True Then
        ' Envoi du mail
        Dim MailAd As String
        Dim Msg As String
        Dim Subj As String
        Dim URLto As String
            
        MailAd = Range("N13")
        Subj = "Commande artciles"
        Msg = "Attention : Pensez à commander les articles"
        
        URLto = "mailto:" & MailAd & "?subject=" & Subj & "&body=" & Msg
        ActiveWorkbook.FollowHyperlink Address:=URLto
        
        ' Attente ouverture outlook
        Dim Début As Long, Fin As Long, Chrono As Long
        Début = Timer
        Fin = Début + 2
        Do Until Timer >= Fin
            DoEvents
        Loop
        
        ' Envoi du message
        SendKeys ("%s")
    End If

    ' Fermeture et enregistrement du classeur
    ActiveWorkbook.Save
    Application.Quit
End Sub
 

sebastien450

XLDnaute Occasionnel
Re : Comment récupérer les informations d'une cellule (son format) et les traiter

Je rencontre le meme probleme mais en plus simple. Ci joint un fichier expliquant ce que je désire c'est à dire que si il y a une mise en forme conditionnelle en B , il y a envoie d'un mail automatiquement stipulant qu'il faut une commande avec le nom ( matrice 23...) ou bien le lien vers le fichier.
 

Pièces jointes

  • Classeur12.xls
    42 KB · Affichages: 196
  • Classeur12.xls
    42 KB · Affichages: 192
  • Classeur12.xls
    42 KB · Affichages: 196

ftho

XLDnaute Occasionnel
Re : Comment récupérer les informations d'une cellule (son format) et les traiter

Re,

Après vérification, on peut vérifier la couleur d'une MEFC
Code:
Range("C2").FormatConditions(1).Interior.ColorIndex

mais...cela indique uniquement quelle couleur est appliquée à la MEFC pas si elle est Vrai ou Fausse
 

jeanpierre

Nous a quitté
Repose en paix
Re : Comment récupérer les informations d'une cellule (son format) et les traiter

Bonjour le fil, sebastien450,

Je ne vois pas comment une MFC va pouvoir envoyer un e-mail automatiquement... peut-être possible, mais en dehors de mes compétences...

Mais, ici, va savoir.

A te lire pour plus.

Jean-Pierre
 

ftho

XLDnaute Occasionnel
Re : Comment récupérer les informations d'une cellule (son format) et les traiter

Re re re tlm,

Dans Mise En Forme Conditionnelle il y a Condition

Exemple : Si B1 = "TOTO" ->> la cellule en bleu

Donc : Si B1 = "TOTO" ->> envoi du mail
 

Discussions similaires

Statistiques des forums

Discussions
311 997
Messages
2 084 452
Membres
102 579
dernier inscrit
JLB35