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

Excel Discussion :

formule conditionelle sur plusieurs cellules


Sujet :

Excel

  1. #1
    Membre du Club
    Homme Profil pro
    Responsable des études
    Inscrit en
    Avril 2011
    Messages
    48
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Responsable des études
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Avril 2011
    Messages : 48
    Points : 41
    Points
    41
    Par défaut formule conditionelle sur plusieurs cellules
    J'ai besoin de votre aide sur une formule conditionnelle. Pour illustrer mon problème voici une copie d'écran
    Nom : test.PNG
Affichages : 149
Taille : 18,7 Ko
    en colonne A j'ai une liste de prénom en colonne B une liste de couleur si plusieurs couleurs sont attribuée à un même prenom alors afficher une nouvelle couleur en colonne C sinon afficher la couleur en colonne C.
    Sachant que le nombre de ligne est aléatoire.
    En pièce jointe mon fichier
    merci d'avance pour votre aide
    Fichiers attachés Fichiers attachés

  2. #2
    Expert confirmé
    Homme Profil pro
    Electrotechnicien
    Inscrit en
    Juillet 2016
    Messages
    3 240
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 70
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Electrotechnicien

    Informations forums :
    Inscription : Juillet 2016
    Messages : 3 240
    Points : 5 655
    Points
    5 655
    Par défaut
    Bonjour,

    Avec des MFC cela me parait difficile, mais en VBA avec un bouton...
    2 propositions, une avec les noms des couleurs et une autre avec les couleurs
    Avec le nom des couleurs
    Pièce jointe 510504

    le fichier
    Pièce jointe 510503

    le 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
    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
    Sub Synthese_des_Couleurs()
        Dim DerLig As Long, i As Long, j As Long, Deb As Long, Bas As Long, Lig As Long
        Dim d1 As Object, d2 As Object
        Dim Couleur As Long, NbCoul As Long
     
        Application.ScreenUpdating = False
        Application.DisplayAlerts = False
        DerLig = Range("A" & Rows.Count).End(xlUp).Row
        Range("C2:Z" & DerLig).Clear
     
        'Recherche N° de couleur
        On Error Resume Next
        'Range("D2:D" & DerLig).FormulaR1C1 = "=VLOOKUP(RC2,'Table des couleurs'!R1C1:R7C2,2,0)"
     
        'Relevé des noms et des couleurs
        Range("D2:D" & DerLig).Value = Range("D2:D" & DerLig).Value
        Set d1 = CreateObject("Scripting.Dictionary")
        Set d2 = CreateObject("Scripting.Dictionary")
        For Each c In Range("A2:A" & DerLig)
            If c.Text <> "" Then d1(c.Text) = ""
            If Not d1.exists(c.Text) Then d1(c.Text) = ""
        Next c
        If d1.Count > 0 Then
            [J1].Offset(1).Resize(d1.Count, 1) = Application.Transpose(d1.keys)
        End If
        For Each c In Range("B2:B" & DerLig)
            If c.Text <> "" Then d2(c.Text) = ""
            If Not d2.exists(c.Text) Then d2(c.Text) = ""
        Next c
        If d2.Count > 0 Then
            [L1].Resize(1, d2.Count) = d2.keys
        End If
     
        'comptage des couleurs attribuées par nom
        Range(Cells(2, "L"), Cells(d1.Count + 1, d2.Count + 11)).FormulaR1C1 = "=COUNTIFS(C1,RC10,C2,R1C)"
        Range(Cells(2, "K"), Cells(d1.Count + 1, "K")) = "=COUNTIF(RC[1]:RC" & 11 + d2.Count & ","">""&0)"
        Range(Cells(2, "K"), Cells(d1.Count + 1, d2.Count + 11)).Value = Range(Cells(2, "K"), Cells(d1.Count + 1, d2.Count + 11)).Value
     
        Randomize
        For i = 2 To d1.Count + 1
            If Cells(i, "K") = 1 Then
                Cells(i, "K") = "x"
            Else
    RechercheCouleurAleatoire:
                NumCoul = Int((33 * Rnd) + 1)
                Cells(i, "K") = Sheets("Table des couleurs").Cells(NumCoul, "C")
                For c = 12 To d2.Count + 11
                    If Cells(i, "K") = Cells(1, c) Then GoTo RechercheCouleurAleatoire
                Next c
            End If
        Next i
     
        'Application des couleurs
        Range("C2:C" & DerLig).FormulaR1C1 = "=VLOOKUP(RC1,C10:C11,2,0)"
        For i = 2 To DerLig
            If Cells(i, "C") = "x" Then Cells(i, "C") = Cells(i, "B")
        Next i
        Range("C2:C" & DerLig).Value = Range("C2:C" & DerLig).Value
     
        'Encadrements
        Deb = 2
        Bas = 2
        For Deb = 2 To DerLig
            Lig = Deb
            Do While Cells(Lig, "A") = Cells(Lig + 1, "A") And Cells(Lig, "D") = Cells(Lig + 1, "D")
                Lig = Lig + 1
                Bas = Bas + 1
            Loop
            With Range(Cells(Deb, "C"), Cells(Bas, "C"))
                .Borders(xlEdgeLeft).Weight = xlMedium
                .Borders(xlEdgeTop).Weight = xlMedium
                .Borders(xlEdgeBottom).Weight = xlMedium
                .Borders(xlEdgeRight).Weight = xlMedium
            End With
            Deb = Bas
            Bas = Deb + 1
        Next Deb
        Columns("D:Z").ClearContents
    End Sub
    ********************************************************************
    le deuxième avec les couleurs
    Pièce jointe 510507

    le fichier
    Pièce jointe 510508

    le 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
    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
    Sub Synthese_des_Couleurs()
        Dim DerLig As Long, i As Long, j As Long, Deb As Long, Bas As Long, Lig As Long
        Dim d1 As Object, d2 As Object
        Dim Couleur As Long, NbCoul As Long
     
        Application.ScreenUpdating = False
        Application.DisplayAlerts = False
        DerLig = Range("A" & Rows.Count).End(xlUp).Row
        Range("C2:C" & DerLig).Clear
     
        'Recherche N° de couleur
        On Error Resume Next
        ActiveWorkbook.Names("Coul").Delete
        ActiveWorkbook.Names.Add Name:="Coul", RefersToR1C1:="=GET.CELL(63,Feuil1!RC2)"
        Range("D2:D" & DerLig).FormulaR1C1 = "=Coul"
     
        'RTelevé des noms et des couleurs
        Range("D2:D" & DerLig).Value = Range("D2:D" & DerLig).Value
        Set d1 = CreateObject("Scripting.Dictionary")
        Set d2 = CreateObject("Scripting.Dictionary")
        For Each c In Range("A2:A" & DerLig)
            If c.Text <> "" Then d1(c.Text) = ""
            If Not d1.exists(c.Text) Then d1(c.Text) = ""
        Next c
        If d1.Count > 0 Then
            [J1].Offset(1).Resize(d1.Count, 1) = Application.Transpose(d1.keys)
        End If
        For Each c In Range("D2:D" & DerLig)
            If c.Text <> "" Then d2(c.Text) = ""
            If Not d2.exists(c.Text) Then d2(c.Text) = ""
        Next c
        If d2.Count > 0 Then
            [L1].Resize(1, d2.Count) = d2.keys
        End If
     
        'comptage des couleurs attribuées par nom
        Range(Cells(2, "L"), Cells(d1.Count + 1, d2.Count + 11)).FormulaR1C1 = "=COUNTIFS(C1,RC10,C4,R1C)"
        Range(Cells(2, "K"), Cells(d1.Count + 1, "K")) = "=COUNTIF(RC[1]:RC" & 11 + d2.Count & ","">""&0)"
        Range(Cells(2, "K"), Cells(d1.Count + 1, d2.Count + 11)).Value = Range(Cells(2, "K"), Cells(d1.Count + 1, d2.Count + 11)).Value
     
        For i = 2 To d1.Count + 2
            Couleur = 0
            NbCoul = 0
            If Cells(i, "K") > 1 Then 'Recherche des noms aux multiples couleurs
                For j = 12 To d2.Count + 11
                    If Cells(i, j) > 0 Then
                        Couleur = Couleur + Cells(1, j) 'Somme des couleurs pour un même nom
                        NbCoul = NbCoul + 1
                    End If
                Next j
                Cells(i, "K") = Int(Couleur / NbCoul) 'moyenne des couleurs trouvées
            Else
                Cells(i, "K") = "x"
            End If
        Next i
     
        'Application des couleurs
        Range("D2:D" & DerLig).FormulaR1C1 = "=VLOOKUP(RC1,C10:C11,2,0)"
        For i = 2 To DerLig
            If Cells(i, "D") = "x" Then
                Cells(i, "C").Interior.Color = Cells(i, "B").Interior.Color
            Else
                Cells(i, "C").Interior.ColorIndex = Cells(i, "D")
            End If
        Next i
     
        'Encadrements
        Deb = 2
        Bas = 2
        For Deb = 2 To DerLig
            Lig = Deb
            Do While Cells(Lig, "A") = Cells(Lig + 1, "A") And Cells(Lig, "D") = Cells(Lig + 1, "D")
                Lig = Lig + 1
                Bas = Bas + 1
            Loop
            With Range(Cells(Deb, "C"), Cells(Bas, "C"))
                .Borders(xlEdgeLeft).Weight = xlMedium
                .Borders(xlEdgeTop).Weight = xlMedium
                .Borders(xlEdgeBottom).Weight = xlMedium
                .Borders(xlEdgeRight).Weight = xlMedium
            End With
            Deb = Bas
            Bas = Deb + 1
        Next Deb
        Columns("D:Z").ClearContents
    End Sub
    Cdlt

Discussions similaires

  1. Ecrire la meme formule sur plusieurs Cellules
    Par fanmanga dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 13/07/2017, 17h37
  2. [HTML] Image sur plusieurs cellule de tableau
    Par lolothep dans le forum Balisage (X)HTML et validation W3C
    Réponses: 9
    Dernier message: 30/07/2008, 16h32
  3. Réponses: 3
    Dernier message: 13/04/2008, 10h52
  4. [VBA-E] Comment appliquer une macro sur plusieurs cellules
    Par jeanpierreco dans le forum Macros et VBA Excel
    Réponses: 16
    Dernier message: 25/01/2007, 10h54
  5. Validation de données Excel sur plusieurs cellules
    Par Civodul4 dans le forum Excel
    Réponses: 3
    Dernier message: 06/03/2006, 11h56

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