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 :

mettre une condition if dans un for each


Sujet :

Macros et VBA Excel

  1. #1
    Membre régulier Avatar de tony76
    Homme Profil pro
    Développeur pour le plaisir....
    Inscrit en
    Avril 2014
    Messages
    131
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur pour le plaisir....

    Informations forums :
    Inscription : Avril 2014
    Messages : 131
    Points : 116
    Points
    116
    Par défaut mettre une condition if dans un for each
    bonjour à tous,

    voilà j'ai un souci pour placé une condition (If) dans un bloc For Each
    ce que je souhaite faire c'est colorisé la date quand celle ci et inférieur a la date du jour
    j'ai 2 colonne avec des dates

    j'arrive pas trouver le bonne objet auquel me référer
    code:
    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
     
    k = Worksheets("Feuil1").Range("B" & Rows.Count).End(xlUp).Row 'k égale derniere cellule remplie de la colonne B
     
            For Each Cell In Worksheets("Feuil1").Range("A2:A" & k)
                ligne = ligne + 1
     
                .ListItems.Add , , Cell
                .ListItems(ligne).ListSubItems.Add , , Cell.Offset(0, 1)
                .ListItems(ligne).ListSubItems.Add , , Format(Cell.Offset(0, 2), "dd/mm/yy")
                .ListItems(ligne).ListSubItems.Add , , Format(Cell.Offset(0, 3), "dd/mm/yy")
                .ListItems(ligne).ListSubItems.Add , , Cell.Offset(0, 4)
                .ListItems(ligne).ListSubItems.Add , , Cell.Offset(0, 5)
                .ListItems(ligne).ListSubItems.Add , , Cell.Offset(0, 6)
     
                If IsDate(Cell) Then
                    Cell.Offset(0, 3).ForeColor = RGB(0, 0, 255)
                End If
     
             Next
    merci pour votre aide

  2. #2
    Expert éminent

    Homme Profil pro
    Curieux
    Inscrit en
    Juillet 2012
    Messages
    5 138
    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 138
    Points : 9 972
    Points
    9 972
    Billets dans le blog
    5
    Par défaut
    Bonjour,

    c'est la cellule source dans excel ou la cellule dans ton listview que tu veux colorier ?
    choisi, les deux sont en dessous

    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
    Dim Tablo
    Tablo = Worksheets("Feuil1").Range("A2", "G" & Worksheets("Feuil1").Range("B" & Rows.Count).End(xlUp).Row)
    For i = LBound(Tablo, 1) To UBound(Tablo, 1)
        .ListItems.Add , , Tablo(i, 1)
        With .ListItems(i).ListSubItems
            .Add , , Tablo(i, 2)
            .Add , , Format(Tablo(i, 3), "dd/mm/yy")
            .Add , , Format(Tablo(i, 4), "dd/mm/yy")
            .Add , , Tablo(i, 5)
            .Add , , Tablo(i, 6)
            .Add , , Tablo(i, 7)
        End With
     
        If IsDate(Tablo(i, 1)) Then
            ' colorier la cellule
            Worksheets("Feuil1").Cells(i, 4).Font.Color = RGB(0, 0, 255)
            ' colorier la valeur dans le listview
            .ListItems(i).ListSubItems(3).ForeColor = RGB(0, 0, 255)
        End If
    Next i

  3. #3
    Membre régulier Avatar de tony76
    Homme Profil pro
    Développeur pour le plaisir....
    Inscrit en
    Avril 2014
    Messages
    131
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur pour le plaisir....

    Informations forums :
    Inscription : Avril 2014
    Messages : 131
    Points : 116
    Points
    116
    Par défaut
    merci c'est le contenu qui ce trouve dans la listview

    mais j'en profite et-il possible de récupérer la couleur d'une date qui se trouve dans ma feuil
    dans la listview ?

    encore merci joe.levrai

  4. #4
    Expert éminent

    Homme Profil pro
    Curieux
    Inscrit en
    Juillet 2012
    Messages
    5 138
    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 138
    Points : 9 972
    Points
    9 972
    Billets dans le blog
    5
    Par défaut
    Regarde, ici on a la propriété voulue pour nos deux objets

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     ' colorier la cellule
    Worksheets("Feuil1").Cells(i, 4).Font.Color = RGB(0, 0, 255)
    ' colorier la valeur dans le listview
    .ListItems(i).ListSubItems(3).ForeColor = RGB(0, 0, 255)
    une petite égalité entre les deux
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    .ListItems(i).ListSubItems(3).ForeColor = Worksheets("Feuil1").Cells(i, 4).Font.Color
    devrait faire l'affaire ? en adaptant la cellule si besoin

  5. #5
    Membre régulier Avatar de tony76
    Homme Profil pro
    Développeur pour le plaisir....
    Inscrit en
    Avril 2014
    Messages
    131
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur pour le plaisir....

    Informations forums :
    Inscription : Avril 2014
    Messages : 131
    Points : 116
    Points
    116
    Par défaut
    sa ne fonction pas

    et pourtant c'est le top ce que ma donner

  6. #6
    Expert éminent

    Homme Profil pro
    Curieux
    Inscrit en
    Juillet 2012
    Messages
    5 138
    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 138
    Points : 9 972
    Points
    9 972
    Billets dans le blog
    5
    Par défaut
    oui y'a un décalage que j'ai oublié de mettre, désolé

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    .ListItems(i).ListSubItems(3).ForeColor = Worksheets("Feuil1").Cells(i + 1, 4).Font.Color

  7. #7
    Membre régulier Avatar de tony76
    Homme Profil pro
    Développeur pour le plaisir....
    Inscrit en
    Avril 2014
    Messages
    131
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur pour le plaisir....

    Informations forums :
    Inscription : Avril 2014
    Messages : 131
    Points : 116
    Points
    116
    Par défaut
    ne soit pas désoler

    mais rien a faire sa veux pas
    je te joint mon fichier j'ai volontairement colorisé les cellules dans le tableau pour les testes

    ici que represente la G la colonne ? si je mais F sa marche plus
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    Tablo = Worksheets("Feuil1").Range("A2", "G" & Worksheets("Feuil1").Range("B" & Rows.Count).End(xlUp).Row)
    et cella me répétée des entrées dans ma premier colonne

    si tu pouvez jeter un œil je pensé que le IF pouvez rentrer dans mon For Each ?
    LisViewxls.xls

  8. #8
    Expert éminent

    Homme Profil pro
    Curieux
    Inscrit en
    Juillet 2012
    Messages
    5 138
    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 138
    Points : 9 972
    Points
    9 972
    Billets dans le blog
    5
    Par défaut
    donc les données proviennent de la colonne A à F ?
    dans quelle colonne on doit tester si c'est une date ?
    et quelle colonne du listview doit contenir les valeurs coloriées ?

    le code dans ton fichier, c'est pas très joli .... tu as ajouté mon code après le tient, alors que mon code remplaçait complètement le code que tu nous avais montré

  9. #9
    Membre régulier Avatar de tony76
    Homme Profil pro
    Développeur pour le plaisir....
    Inscrit en
    Avril 2014
    Messages
    131
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur pour le plaisir....

    Informations forums :
    Inscription : Avril 2014
    Messages : 131
    Points : 116
    Points
    116
    Par défaut
    Merci j'ai pas fait attention pour ton code annule et remplace le mien

    pour ce qui et des colonnes actuellement il y à 6 colonnes (plus par la suite mais la c'est pour les tests)
    ce qui serais le top c'est dans la feuil1 d'Excel il y a des dates colonne B et D quand celle ci sont en rouge (du a une petite fonction dans la feuil)
    que la couleur de celle ci soit reprise dans la listview
    PS les dates qui sont rouge dans la feuil parce qu’elle son inférieur a la date du jour

    et si en plus je pouvais avoir les lignes séparatrice tu serais un génie

  10. #10
    Expert éminent

    Homme Profil pro
    Curieux
    Inscrit en
    Juillet 2012
    Messages
    5 138
    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 138
    Points : 9 972
    Points
    9 972
    Billets dans le blog
    5
    Par défaut
    Bonjour,

    voici la procédure complète de ton Userform_Initialize : tu remplaces tout ce que tu as actuellement par ce code

    concernant les séparateurs de lignes, il faut ruser sur un listview : il n'est pas possible de colorier le fond d'une cellule indépendamment des autres
    la propriété BackColor est rattachée à l'intégralité du ListView

    j'ai donc opté pour des UnderScore "_____________" qui vont faire une pseudo séparation visuelle.
    à toi de voir si tu veux faire autrement

    j'ai remis au propre ton code (l'indentation c'est très important !) et j'ai également commenté le fonctionnement afin que tu puisses adapter

    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
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    Option Explicit
     
    Private Sub UserForm_Initialize()
    ' c'est un tableau dans lequel on va charger la plage de données de excel
    ' ce qui est plus rapide pour ensuite transférer les données au listview
    Dim Tablo
     
    ' permettra de définir qu'une ligne est un séparateur
    Dim Separateur As Boolean
     
    Dim i As Integer
    Dim j As Integer
     
    ' on charge la plage dans le tableau
    ' les colonne A à F, en partant de la ligne 2 et jusque la dernière ligne de la colonne B
    Tablo = Worksheets("Feuil1").Range("A2", "F" & Worksheets("Feuil1").Range("B" & Rows.Count).End(xlUp).Row)
     
    ' maintenant, tablo représente la plage
    ' par exemple : Tablo(1,1) = A2
    '               Tablo(1,7) = G2
    '               Tablo(15,6) = F16
    '               Etc...
     
    '----- remplissage ListView------------------------
    With ListView1
     
        .AllowColumnReorder = True 'autorise l'agrandissement des colonnes
        .View = lvwReport 'affichage en mode Rapport
        .Gridlines = True 'affichage d'un quadrillage
        .FullRowSelect = False ' interdit la sélection des lignes complètes
     
        With .ColumnHeaders
            'Supprime les anciens en-tetes
            .Clear
     
            'les en-tetes non fixes
            .Add , , Worksheets("Feuil1").Cells(1, 1), 80 'désignation
            .Add , , Worksheets("Feuil1").Cells(1, 2), 80 'Type
            .Add , , Worksheets("Feuil1").Cells(1, 3), 80 'Visite
            .Add , , Worksheets("Feuil1").Cells(1, 4), 80 'Pdate
            .Add , , Worksheets("Feuil1").Cells(1, 5), 80 'Periodicite
            .Add , , Worksheets("Feuil1").Cells(1, 6), 80 'Pvisite
        End With
     
        ' pour chaque ligne
        For i = LBound(Tablo, 1) To UBound(Tablo, 1)
     
            ' valeur de la première colonne
            .ListItems.Add , , Tablo(i, 1)
     
            ' valeur des autres colonnes
            With .ListItems(i).ListSubItems
                .Add , , Tablo(i, 2)
                .Add , , Format(Tablo(i, 3), "dd/mm/yy")
                .Add , , Format(Tablo(i, 4), "dd/mm/yy")
                .Add , , Tablo(i, 5)
                .Add , , Tablo(i, 6)
            End With
     
            ' pour les colonnes C et D
            For j = 3 To 4
                ' si la valeur est une date
                If IsDate(Tablo(i, j)) Then
                    'on colorie la cellule du listeview, de la même couleur que le cellule d'Excel
                    .ListItems(i).ListSubItems(j - 1).ForeColor = Worksheets("Feuil1").Cells(i + 1, j).Font.Color
                End If
            Next j
     
            ' si la première colonne est vide
            If .ListItems(i) = "" Then
     
                ' on part du principe que tout est vide
                Separateur = True
     
                ' on boucle sur les autres colonnes
                For j = LBound(Tablo, 2) + 1 To UBound(Tablo, 2)
                    ' si une colonne est remplie
                    If Tablo(i, j) <> "" Then
                        ' la ligne n'est donc pas un séparateur
                        Separateur = False
                        Exit For
                    End If
                Next j
     
                ' si la ligne est un séparateur
                ' on effectue une séparation en utilisant des UnderScore
                If Separateur = True Then
                    .ListItems(i).Text = "______________"
     
                    With .ListItems(i)
                        For j = LBound(Tablo, 2) To UBound(Tablo, 2) - 1
                            .ListSubItems(j).Text = "_______________"
                        Next j
                    End With
                End If
            End If
        Next i
    End With
     
    End Sub

  11. #11
    Membre régulier Avatar de tony76
    Homme Profil pro
    Développeur pour le plaisir....
    Inscrit en
    Avril 2014
    Messages
    131
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur pour le plaisir....

    Informations forums :
    Inscription : Avril 2014
    Messages : 131
    Points : 116
    Points
    116
    Par défaut
    Merci tes un GÉNIE

    Encore merci

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

Discussions similaires

  1. [AC-2010] Mettre une condition si dans un formulaire
    Par sebing dans le forum VBA Access
    Réponses: 1
    Dernier message: 14/09/2011, 19h19
  2. Mettre une condition dans une action
    Par barouz dans le forum Servlets/JSP
    Réponses: 6
    Dernier message: 24/04/2007, 11h24
  3. [C# 2.0]Mettre une condition dans un repeater
    Par giloutho dans le forum ASP.NET
    Réponses: 1
    Dernier message: 07/11/2006, 19h13
  4. mettre une condition dans l'ajout de données
    Par ash_rmy dans le forum Access
    Réponses: 2
    Dernier message: 27/07/2006, 13h29
  5. Mettre une condition if dans une requete sql
    Par Sardonnen dans le forum Oracle
    Réponses: 4
    Dernier message: 24/03/2006, 11h25

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