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 :

colorier des cellules en appelant nom des lignes et colonnes


Sujet :

Macros et VBA Excel

  1. #1
    Membre confirmé
    Femme Profil pro
    Étudiant
    Inscrit en
    Février 2015
    Messages
    113
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Maroc

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2015
    Messages : 113
    Par défaut colorier des cellules en appelant nom des lignes et colonnes
    Bonjour chers développeurs,

    SVP , ça fait une semaine que j'essaie de réaliser le code correctement et je me bloque à chaque fois ,

    si quelqu'un pourra détecter l'erreur dans ce code vba

    j'ai une feuill 1 qui contient un tableau des valeurs en pourcentage
    Nom : 1.PNG
Affichages : 192
Taille : 23,0 Ko



    j'aimerai bien colorier des cellules dans la feuil2 en choisissant un mois donné dans feuil2.range("B2")
    Nom : 2.PNG
Affichages : 181
Taille : 31,3 Ko
    si les cellules du tableau1 sont entre 0 et 20% alors colorier en rouge

    Code vba : 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
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
     
    Sub Colorier()
     
        Dim Nom_Du_Mois As String
     
        Dim Trouver_Colonne_Mois As Boolean
     
        Trouver_Colonne_Mois = False
     
        'récupérer nom du mois
        Nom_Du_Mois = Sheets("Feuil2").Range("B2").Value
     
        '========================================
        'trouver la bonne colonne selon le mois
     
        For Each I In Range("Tblmois").Cells
                If Range("Tblmois").Cells.Value = Nom_Du_Mois Then
                Trouver_Colonne_Mois = True
                Exit For
                End If
        Next
        '========================================
     
        If Trouver_Colonne_Mois = True Then
            For Each J In Range("Tblzones").Cells ' la colonne de la feuille 1
     
     
                                   If Cells(J, I).Value <= 0.2 Then
                                     For Each v In Range("Table").Cells
     
                                         If v.Value = Range("Tblzones").Cells.Value Then Range("Table").Cells.Interior.ColorIndex = 3
                                    Next
     
     
                             Else
                             MsgBox Cells(J, I).Value & " ne rencontre pas les conditions"
                             End If
     
             Next
        Else
            MsgBox "Aucun mois n'a été trouvé !"
        End If
        Sheets("Feuil2").Select
        MsgBox "Mise à jour réussie !"
     
    End Sub

    merci beaucoup

  2. #2
    Expert confirmé

    Homme Profil pro
    Curieux
    Inscrit en
    Juillet 2012
    Messages
    5 169
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Curieux
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Juillet 2012
    Messages : 5 169
    Billets dans le blog
    5
    Par défaut
    Bonjour,

    j'ai vu dans ta capture d'écran que tu utilises un Tableau Excel (objet ListObject en VBA)

    autant utiliser la puissance de cet objet pour parcourir tes données je n'ai pas eu besoin de tes plages nommées TblZone/data/TblMois

    renomme les feuilles en conséquence, ainsi que le nom de ton tableau (regarde dans l'onglet "outil de tableau création")

    la colonne "zone" doit rester en seconde position, sinon il faut modifier le numéro de colonne sur la ligne 17
    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
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    Sub TableauExcel()
    Dim ShDest As Worksheet
    Dim Tablo As ListObject
    Dim MoisCible As String
    Dim Cell As Range
     
    Set Tablo = Sheets("Feuil1").ListObjects("Tableau1")
    Set ShDest = Sheets("Feuil2")
     
    With ShDest
        MoisCible = .Range("B2").Value
     
        For Each Cell In Tablo.HeaderRowRange.Cells
            If Cell = MoisCible Then
                For i = 1 To Tablo.ListRows.Count
                    If Cell.Offset(i, 0).Value <= 0.2 Then
                        Select Case Tablo.DataBodyRange(i, 2)
                            Case "A"
                                .Range("E7").Interior.ColorIndex = 3
     
                            Case "B"
                                .Range("F14").Interior.ColorIndex = 3
     
                            Case "C"
                                .Range("I9").Interior.ColorIndex = 3
                        End Select
                    End If
                Next i
                MsgBox ("Mise à jour réussie")
                Exit Sub
            End If
        Next Cell
    End With
     
    MsgBox ("Mois non trouvé")
    End Sub

  3. #3
    Membre confirmé
    Femme Profil pro
    Étudiant
    Inscrit en
    Février 2015
    Messages
    113
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Maroc

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2015
    Messages : 113
    Par défaut
    Merci joe pour ton aide, mais en fait case A B et C n'est pas pratique pour moi pcq dans mon vrai projet les celulles sont de plus de 50 , c'est pourquoi j'aimerai désigner la totalité de la plage ou se trouve toutes les cellules dans Feuil2 , pourriez vous m'aider encore plus ?

  4. #4
    Expert confirmé

    Homme Profil pro
    Curieux
    Inscrit en
    Juillet 2012
    Messages
    5 169
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Curieux
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Juillet 2012
    Messages : 5 169
    Billets dans le blog
    5
    Par défaut
    Je n'ai fait qu'appliquer ton problème posé

    si on doit colorier toute la plage ... à quoi sert la partie qui boucle sur les zones ??

    le code que j'ai proposé est un squelette ultra malléable, constitué de plusieurs boucle et conditionnelles imbriquées

    c'est comme les LEGO, tu peux démonter et changer des pièces


    sinon, il faut mieux expliquer l'histoire des zones A- B -C en rapport avec la plage à colorier en Feuil2

  5. #5
    Membre confirmé
    Femme Profil pro
    Étudiant
    Inscrit en
    Février 2015
    Messages
    113
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Maroc

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2015
    Messages : 113
    Par défaut
    Je vais vous expliquer alors pour comprendre,

    je veux que la personne qui utilise cette application (simple utilisateur ) ne fera aucune modification dans le code VBA puisqu'elle ne le comprend pas

    Le problème c'est que dans Feuil2 c'est que le nombre de cellules est très grand en réalité et n'est pas stable, c'est à dire qu'on pourra toujours ajouter des cellules manuellement dans Feuil2 et ça doit etre ajouté dans Feuil1 et puis lorsqu'on clique sur un bouton queles cellules se colorent automatiquement tant que les cellules ajoutés sont toujours dans la plage définie de la feuil2 , vous comprenez a pénibilité

  6. #6
    Expert confirmé

    Homme Profil pro
    Curieux
    Inscrit en
    Juillet 2012
    Messages
    5 169
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Curieux
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Juillet 2012
    Messages : 5 169
    Billets dans le blog
    5
    Par défaut
    Si tu n'as aucun moyen d'identifier automatiquement ta plage de destination ... alors ton problème est insoluble

    la conception du classeur est mal pensée ... et je t'invite si tel est le cas à t'orienter sur des plages nommées dynamiques pour tenter de mettre un pansement sur cette jambe de bois ... encore que je ne suis même pas sûr que ça puisse tenir, une simple suppression mal placée et tout va s'écrouler

    bon, essayons autre chose ... tu n'as toujours pas expliqué ce qui se cache derrière les mots A B C de ta colonne "zone"

  7. #7
    Membre confirmé
    Femme Profil pro
    Étudiant
    Inscrit en
    Février 2015
    Messages
    113
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Maroc

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2015
    Messages : 113
    Par défaut
    Les zones A B C désigne les zones réellement dans l'entreprise , et vous savez que l'implantation dans l'entreprise est grande et elle est toujours modifiable on pourra toujours ajouter une nouvelle zone , ce que je veux dans votre code c'est juste au lieu de dire select case A B C de la remplacer par For each cell in Table telle que Table de Feuil2 est déjà définie (les frontières de l'implantion de l'entreprise ") , si une cellule dans cette plage "Table" est égale à une cellule de la colonne de zone s dans Feuil1 alors effectue le coloriage ,

    Aidez moi SVP

  8. #8
    Expert confirmé

    Homme Profil pro
    Curieux
    Inscrit en
    Juillet 2012
    Messages
    5 169
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Curieux
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Juillet 2012
    Messages : 5 169
    Billets dans le blog
    5
    Par défaut
    adapte les références, feuilles, plages etc...

    et dis moi si c'est bon ... mais ça ne peut que l'être, voir les commentaires dans le code qui reprennent pas à pas ton souhait

    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
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    Sub TableauExcel()
    Dim ShDest As Worksheet
    Dim Tablo As ListObject
    Dim MoisCible As String
    Dim Cell As Range
    Dim CellColor As Range
    Dim PlageEntreprise As Range
     
    Set Tablo = Sheets("Feuil1").ListObjects("Tableau1")
    Set ShDest = Sheets("Feuil2")
    Set PlageEntreprise = ShDest.Range("TaPlage")
     
    With ShDest
        MoisCible = .Range("B2").Value
     
        ' boucle sur les titres
        For Each Cell In Tablo.HeaderRowRange.Cells
            ' on cherche le mois
            If Cell = MoisCible Then
                ' boucle sur chaque ligne de données du mois
                For i = 1 To Tablo.ListRows.Count
                    ' si <= 20%
                    If Cell.Offset(i, 0).Value <= 0.2 Then
                        ' boucle sur la plage de Feuil2
                        For Each CellColor In PlageEntreprise.Cells
                            ' si la cellule à la même valeur que la zone
                            If CellColor.Value = Tablo.DataBodyRange(i, 2) Then
                                ' on colorie
                               CellColor.Interior.ColorIndex = 3
                            End If
                        Next CellColor
                    End If
                Next i
                MsgBox ("Mise à jour réussie")
                Exit Sub
            End If
        Next Cell
    End With
     
    MsgBox ("Mois non trouvé")
    End Sub

  9. #9
    Membre confirmé
    Femme Profil pro
    Étudiant
    Inscrit en
    Février 2015
    Messages
    113
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Maroc

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2015
    Messages : 113
    Par défaut
    je ne sais pas pourquoi il y a encore un problème quelque part,

    pourriez vous vérifier dans le ficher s'il vous plait

    et je m'excuse énormément pour tout type de gêne, je vous serai très reconnaissante .

    N.B: Le tableau 1 et déjà nommé dans Formules -> Gestion de nom
    Fichiers attachés Fichiers attachés

  10. #10
    Expert confirmé

    Homme Profil pro
    Curieux
    Inscrit en
    Juillet 2012
    Messages
    5 169
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Curieux
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Juillet 2012
    Messages : 5 169
    Billets dans le blog
    5
    Par défaut
    il y a un message d'erreur ? sur quelle ligne ?

    le tableau doit s'insérer via l'onglet Insertion >> tableaux
    quand on a crée son tableau, dès qu'on sélectionne une cellule du tableau, il y a un onglet qui apparaît, dedans est indiqué le nom de ton tableau

  11. #11
    Membre confirmé
    Femme Profil pro
    Étudiant
    Inscrit en
    Février 2015
    Messages
    113
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Maroc

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2015
    Messages : 113
    Par défaut
    Maitenant ça fonctione , merci beaaaaaaaaaaaaaucoup Joe , vous m'avez sauvé

    juste une dernière question SVP,

    si on ajoute d'autres conditions if ( autres couleurs ) ça ne va pas impacter le cell.offset (I,0).value ?

  12. #12
    Expert confirmé

    Homme Profil pro
    Curieux
    Inscrit en
    Juillet 2012
    Messages
    5 169
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Curieux
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Juillet 2012
    Messages : 5 169
    Billets dans le blog
    5
    Par défaut
    ça dépend de ce que tu veux faire

    plusieurs couleurs en fonction de différents pourcentages ou en fonction de différentes "zones" ?

  13. #13
    Membre confirmé
    Femme Profil pro
    Étudiant
    Inscrit en
    Février 2015
    Messages
    113
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Maroc

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2015
    Messages : 113
    Par défaut
    Joe , ça y essst le problème est résolu finalement

    Merci merci merci , et je m'excuuuuuuuuuuuuuuse énormément de ma gêne

    Amicalement,

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [XL-2003] Imprimer des cellules jusqu' a la derniere ligne remplie
    Par djoumusic dans le forum Macros et VBA Excel
    Réponses: 8
    Dernier message: 06/02/2018, 07h16
  2. Réponses: 6
    Dernier message: 31/03/2014, 01h37
  3. [PEAR] Spreadsheet Excel - Nom des cellules
    Par yanchasp dans le forum Bibliothèques et frameworks
    Réponses: 2
    Dernier message: 19/09/2008, 15h26
  4. Réponses: 6
    Dernier message: 06/06/2007, 17h57
  5. Réponses: 4
    Dernier message: 30/05/2006, 17h21

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