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 :

Macro concatener sur critère couleur conditionnelle à répeter ligne par ligne


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Nouveau candidat au Club
    Homme Profil pro
    Comptable
    Inscrit en
    Novembre 2019
    Messages
    2
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : Belgique

    Informations professionnelles :
    Activité : Comptable

    Informations forums :
    Inscription : Novembre 2019
    Messages : 2
    Par défaut Macro concatener sur critère couleur conditionnelle à répeter ligne par ligne
    Bonjour,

    Etant nouvellement débarqué dans le monde des Macros, j'ai scruté les postes de ce forum pour trouver la bonne formule pour ma Macro.

    J'ai bien trouvé la première partie de la Macro, c'est à dire concaténer sur base d'une couleur (format conditionnel) :

    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
    Sub concatColor()
    Dim cellule As Range
    Dim resultat As String
     
     'selection des valeurs
    Range("I2:R2").Select
    'on boucle dans toutes les cellules
    For Each cellule In Selection
       'si la couleur est vert conditionnelle
       If cellule.DisplayFormat.Interior.Color = RGB(160, 255, 192) Then
       'on concatene avec un |
       resultat = resultat & cellule.Value & "|"
       End If
    Next
    'si le resultat n'est pas vide on enlève le dernier |
    If resultat <> "" Then resultat = Left(resultat, Len(resultat) - 1)
    'et on place le résultat en cellule G2
    Range("G2") = resultat
    End Sub
    Mais là où j'ai du mal, c'est de répéter la macro sur toutes les lignes en colonne G pour lesquelles il y des données de la colonne I à R ? J'ai essayé avec "For Each", "For next", "loop", mais j'ai du mal à les intégrer à ma Macro.

    D'avance merci pour votre aide

  2. #2
    Expert confirmé
    Homme Profil pro
    Responsable des études
    Inscrit en
    Juillet 2014
    Messages
    2 681
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Aude (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Responsable des études
    Secteur : Santé

    Informations forums :
    Inscription : Juillet 2014
    Messages : 2 681
    Par défaut
    Bonjour

    En supposant que tu connaisse le nombre de ligne en avance
    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
     
    Sub concatColor()
    Dim cellule As Range
    Dim resultat As String
     
    for i = 2 to 999  
     
    'on boucle dans toutes les cellules
    For Each cellule In Range("I" & i &":R" & i)
       'si la couleur est vert conditionnelle
       If cellule.DisplayFormat.Interior.Color = RGB(160, 255, 192) Then
       'on concatene avec un |
       resultat = resultat & cellule.Value & "|"
       End If
    Next cellule
    'si le resultat n'est pas vide on enlève le dernier |
    If resultat <> "" Then resultat = Left(resultat, Len(resultat) - 1)
    'et on place le résultat en cellule G
    Range("G" & i) = resultat
    next i
    End Sub

    Citation Envoyé par Caramba20 Voir le message
    sur toutes les lignes en colonne G pour lesquelles il y des données de la colonne I à R
    Tu as besoin que toutes les cellules soient non vide ou qu'au moins une cellule soit non vide ?

    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
     
    Sub concatColor()
    Dim cellule As Range
    Dim resultat As String
     
    i=2
    'Attention j'utilise la fonction nb.vide il faut trouver son équivalent en vba, je te laisse chercher
    Do while nb.vide(Range("I" & i &":R" & i))=0 'aucune cellule vide <10 si au moins une cellule non vide
     
    'on boucle dans toutes les cellules
    For Each cellule In Range("I" & i &":R" & i)
       'si la couleur est vert conditionnelle
       If cellule.DisplayFormat.Interior.Color = RGB(160, 255, 192) Then
       'on concatene avec un |
       resultat = resultat & cellule.Value & "|"
       End If
    Next
    'si le resultat n'est pas vide on enlève le dernier |
    If resultat <> "" Then resultat = Left(resultat, Len(resultat) - 1)
    'et on place le résultat en cellule G
    Range("G" & i) = resultat
    i=i+
    loop
    End Sub

  3. #3
    Nouveau candidat au Club
    Homme Profil pro
    Comptable
    Inscrit en
    Novembre 2019
    Messages
    2
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : Belgique

    Informations professionnelles :
    Activité : Comptable

    Informations forums :
    Inscription : Novembre 2019
    Messages : 2
    Par défaut
    Merci Halaster08 pour ta réponse.

    Pour la première proposition, en G3 il inclut le résultat G2 + G3, en G4 il inclut le résultat G2 + G3 + G4, etc. Alors qu'il me faudrait le résultat de la seule ligne 3 en G3, de la seule ligne 4 en G4, etc.

    En ce qui concerne la deuxième proposition, j'ai adapté mais cela ne fonctionne pas :

    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
    Sub concatColor()
    Dim cellule As Range
    Dim resultat As String
     
    i = 2
    'Attention j'utilise la fonction nb.vide il faut trouver son ?quivalent en vba, je te laisse chercher
    Do While Application.WorksheetFunction.CountBlank(Range("I" & i & ":R" & i)) = 0 'aucune cellule vide <10 si au moins une cellule non vide
     
    'on boucle dans toutes les cellules
    For Each cellule In Range("I" & i & ":R" & i)
       'si la couleur est vert conditionnelle
       If cellule.DisplayFormat.Interior.Color = RGB(160, 255, 192) Then
       'on concatene avec un |
       resultat = resultat & cellule.Value & "|"
       End If
    Next
    'si le resultat n'est pas vide on enl?ve le dernier |
    If resultat <> "" Then resultat = Left(resultat, Len(resultat) - 1)
    'et on place le r?sultat en cellule G
    Range("G" & i) = resultat
    i = i +
    Loop
    End Sub
    Encore merci.

  4. #4
    Expert confirmé
    Homme Profil pro
    Responsable des études
    Inscrit en
    Juillet 2014
    Messages
    2 681
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Aude (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Responsable des études
    Secteur : Santé

    Informations forums :
    Inscription : Juillet 2014
    Messages : 2 681
    Par défaut
    Citation Envoyé par Caramba20 Voir le message
    Pour la première proposition, en G3 il inclut le résultat G2 + G3, en G4 il inclut le résultat G2 + G3 + G4, etc. Alors qu'il me faudrait le résultat de la seule ligne 3 en G3, de la seule ligne 4 en G4, etc.
    J'ai oublié de remettre à vide ta variable
    A remettre juste avec le next i
    En ce qui concerne la deuxième proposition, j'ai adapté mais cela ne fonctionne pas :
    et remettre le résultat à vide avant le loop

Discussions similaires

  1. Mise en forme "couleur" conditionnelle sur une ligne
    Par dv-2008 dans le forum Microstrategy
    Réponses: 2
    Dernier message: 17/06/2016, 10h31
  2. Macro: Pb sur un code insertion de ligne
    Par Monteninho dans le forum Macros et VBA Excel
    Réponses: 15
    Dernier message: 16/08/2007, 12h08
  3. [Forms]Couleur d'une ligne sur Forms builder
    Par eddyditdidi dans le forum Forms
    Réponses: 2
    Dernier message: 15/04/2007, 14h01
  4. Réponses: 3
    Dernier message: 19/04/2006, 16h45
  5. Réponses: 8
    Dernier message: 17/05/2005, 18h08

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