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 :

Coloriage cellules en fonction de leurs contenus


Sujet :

Macros et VBA Excel

  1. #1
    Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2018
    Messages
    116
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 30
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Novembre 2018
    Messages : 116
    Points : 61
    Points
    61
    Par défaut Coloriage cellules en fonction de leurs contenus
    Bonjour à tous,

    J'ai un code qui me permet de colorier des cellules en entrant une série dans un inputbox.
    Je m'explique :
    J'ai dans ma colonne B, de B7 à B18, des valeurs correspondants à "name-1" dans B7, "name-2" dans B8 etc jusqu'à "name-12" dans B18.
    Ensuite j'ai ce code ci-dessus qui me permet de colorier les cellules en fonction de ce que j'entre dans mon inputbox :

    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
    Sub test()
    Dim x$, x1$, rng As Range, arr, O&, G&, B&, i&, clr&
    Dim c1 As Range, c2 As Range, mess$, c1a As Range, c2a As Range
    Retry:
    x = InputBox("enter one/two number") 'sample: name-X-3-6-X-9-/-11-12
    If x <> "" Then
      O = RGB(255, 200, 50): G = RGB(0, 255, 0): B = RGB(0, 150, 255) 'Replacing color values with variables
      Set rng = Sheets("Feuil1").Range("b7:b" & Sheets("Feuil1").[b65536].End(3).Row) 'assign cell area to rng
      x = Replace(x, "name-X-/-", "2000-2000,") '**************added line**************
      x = Replace(x, "name-/-X-", "-/-X-")
      x = Replace(x, "name-/-", "") 'If the beginning is "name-/-" then delete it
                                         'sample: no change happened --> name-X-3-6-X-9-/-11-12
      x = Replace(x, "name-X-", ",,") 'sample: name-X-3-6-X-9-/-11-12 --> ,,3-6-X-9-/-11-12
      x = Replace(x, "-/-X-", ",1000-1000,")
      If x Like ",#*" Then x = Mid(x, 2) '**************added line**************
      x = Replace(x, "-X-/-", ",2000-2000,")
      x = Replace(x, "name", "1") 'If the beginning is "name-#" then Convert to "1-#"
                                         'sample: no change happened --> ,,3-6-X-9-/-11-12
      x = Replace(x, "-/-", ",") 'sample: ,,3-6-X-9-/-11-12 --> ,,3-6-X-9,11-12
      x = Replace(x, "-X-", ",,,") 'sample: ,,3-6-X-9,11-12 --> ,,3-6,,,9,11-12
      arr = Split(x, ",") 'sample: arr have 7 elements(blank,blank,3-6,blank,blank,9,11-12)
      For i = 0 To UBound(arr) 'This cycle is used to transform elements and determine whether input is legal.
        If arr(i) <> "" Then
          If Not arr(i) Like "*-*" Then arr(i) = arr(i) & "-" & arr(i) 'sample: arr(blank,blank,3-6,blank,blank,9-9,11-12)
          If Not IsNumeric(Replace(arr(i), "-", "")) Or Not arr(i) Like "*#-#*" Then
            MsgBox "Input Error!": GoTo Retry 'If there is a mistake, start again.
          End If
        End If
      Next i
      x = Join(arr, ",") 'sample: ,,3-6,,,9,11-12 --> ,,3-6,,,9-9,11-12
      x = Replace(x, "-", ",") 'sample: ,,3-6,,,9-9,11-12 --> ,,3,6,,,9,9,11,12
      arr = Split(x, ",") 'sample: arr have 10 elements(blank,blank,3,6,blank,blank,9,9,11,12)
                               'now, each two elements represent a region. blank means filling green
      rng.Interior.Color = B 'set rng color to blue
      For i = 0 To UBound(arr) Step 2 'deal with two elements at a time
        If arr(i) = "" Then 'if blank then
          If i = 0 Then arr(i) = 1 Else arr(i) = arr(i - 1) + 1 'the previous blank = 1 or (the number in front of it + 1)
          arr(i + 1) = arr(i + 2) - 1 'the next blank = the number behind it - 1
          clr = G 'assign the green value to clr
        Else 'if not blank then
          If arr(i) = 1000 Then
            arr(i) = arr(i + 2) - 1
            arr(i + 1) = arr(i)
            clr = G
          ElseIf arr(i) = 2000 Then
            If i = 0 Then
              arr(i) = 1
              arr(i + 1) = 1
            Else
              arr(i) = arr(i - 1) + 1
              arr(i + 1) = arr(i)
            End If
            clr = G
          Else
            clr = O 'assign the orange value to clr
          End If
        End If
        With rng
          Set c1 = .Find("name-" & arr(i), lookat:=xlWhole) 'search for existence
          Set c1a = c1
          Do
            If c1a = c1a.Offset(1) Then Set c1a = c1a.Offset(1) Else Exit Do
          Loop
          Set c2 = .Find("name-" & arr(i + 1), lookat:=xlWhole)
          Set c2a = c2
          Do
            If c2a = c2a.Offset(1) Then Set c2a = c2a.Offset(1) Else Exit Do
          Loop
          If Not c1 Is Nothing And Not c2 Is Nothing Then 'if exists c1 and c2 then
            Range(Range(c1, c1a), Range(c2, c2a)).Interior.Color = clr 'fill the cell area with color, clr has been assigned before
          Else 'if not exists c1 or c2 then
            mess = trans(mess, arr(i), arr(i + 1)) 'writing information to mess, trans() is custom functions
          End If
        End With
        Set c1 = Nothing: Set c1a = Nothing: Set c2 = Nothing: Set c2a = Nothing
      Next i
    Else
      mess = "you have canceled"
    End If
    If mess <> "" Then MsgBox mess
    End Sub
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    Function trans(mess, s1, s2)
      trans = mess & "the range containing ""name-" & s1 & """ & ""name-" & s2 & """ does not exist !!" & vbCrLf
    End Function
    Voici des exemples que je peux entrer dans mon inputbox :
    "name-8" : "name-1" jusqu'à "name-8" se colorient en orange et "name-9" jusqu'à "name-12" en bleu
    "name-/-9-12" : name-1 à name-8 en bleu et name-9 à name-12 en orange
    "name-X-9-12" : name-1 à name-8 en vert et name-9 à name-12 en orange
    "name-3-/-6-8-X-10-12" : name-1 à name-3 ainsi que name-6 à name-8 et name-10 à name-12 en orange, name-4 à name-5 en bleu, name-9 en vert
    "name-/-X-3-6-X-/-9-12" : name-3 à name-6 ainsi que name-9 à name-12 en orange, name-1 et name-8 en bleu, name-2 et name-7 en vert

    Cependant comme vous pouvez le constater, si j'entre par exemple : "name-3-/-X-9-12", il y a plusieurs "name-n" dans la plage "-/-X-" et donc la répartition des couleurs n'est pas bonne (name-4 à name-7 en bleu et name-8 en vert) contrairement au dernier exemple (name-/-X-3-6-X-/-9-12) où ici name-1 est en bleu et name-2 en vert car la répartition se fait bien qu'entre 2 "name-n".
    Ce que j'aimerais donc faire, c'est de garder la même logique que précédemment, c'est à dire si seulement un -/- ou un -X- sont présents dans une plage alors je peux colorier plusieurs "name-n" compris dans le -/- ou le -X- (voir ex name-/-9-12, name-X-9-12, name-3-/-6-8-X-10-12). Par contre, lorsque j'ai ces 2 cas : "-/-X" et "-X-/-" , j'aimerais changer la logique.
    Par exemple, si je souhaite avoir name-1 à name-3 et name-9 à name-12 en orange, puis name-4 ainsi que name-6 et name-7 en bleu, puis name-5 et name-8 en vert, cela me donnerait :
    "name-3-/-X-/-/-X-9-12"
    Et donc si je combine ça à ce que j'ai dis précédemment, je pourrais avoir : "name-X-3-/-X-/-/-X-9-/-12" ce qui me donnerait name-1 à name-2 ainsi que name-5 et name-8 en vert, name-3 ainsi que name-9 et name-12 en orange, et pour finir, name-4, name-6, name-7 et name-10 à name-11 en bleu.
    Autre exemple : "name-2-/-5-X-/-X-X-10-12" => name-1 à name-2 ainsi que name-5 et name-10 à name-12 en orange, name-3 à name-4 ainsi que name-7 en bleu et le reste en vert
    etc..

    Je bloque car mis à part rajouter des lignes de codes au début et mettre x = replace("tous les cas possibles") ça serait beaucoup trop long...
    Je suis donc preneur pour des solutions!

  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,

    Essayez ceci

    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
    Option Compare Text
     
    Sub test()
        Dim x As String, NbTiret
     
        Application.ScreenUpdating = False
        Range("B7:B18").Interior.ColorIndex = xlNone
        x = InputBox("enter one/two number")
        x = Replace(x, "name", "")
        NbTiret = Split(x, "-")
     
        If UBound(NbTiret) = 1 Then 'Cas où il n'y a qu'un seul élément à traiter
            Select Case NbTiret(1)
                Case "3", "4", "5", "6", "7", "8", "9", "10", "11", "12"
                    Range("B7:B" & NbTiret(1) + 6).Interior.Color = RGB(255, 200, 50) 'Orange
                    If UBound(NbTiret) < 12 Then Range("B" & NbTiret(1) + 7 & ":B18").Interior.Color = RGB(0, 150, 255)
                Case Is = "/"
                    Range("B7:B18").Interior.Color = RGB(0, 150, 255) 'Bleu
                Case Is = "X"
                    Range("B7:B18").Interior.Color = RGB(0, 255, 0) 'Vert
            End Select
        ElseIf UBound(NbTiret) > 1 Then 'cas avec plusieurs éléments à traiter
            Pos = 0
            For i = 0 To UBound(NbTiret)
                Select Case NbTiret(i)
                    Case "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12"
                        If NbTiret(i - 1) <> "/" And NbTiret(i - 1) <> "X" And NbTiret(i - 1) <> "" Then
                            Range(Cells(NbTiret(i - 1) + 6, "B"), Cells(NbTiret(i) + 6, "B")).Interior.Color = RGB(255, 200, 50) 'Orange
                        ElseIf NbTiret(i - 1) <> "/" And NbTiret(i - 1) <> "X" And NbTiret(i - 1) = "" Then
                            Range(Cells(7, "B"), Cells(NbTiret(i) + 6, "B")).Interior.Color = RGB(255, 200, 50) 'Orange
                        Else
                            Cells(NbTiret(i) + 6, "B").Interior.Color = RGB(255, 200, 50) 'Orange
                        End If
                        Pos = NbTiret(i)
                    Case Is = "/"
                        Cells(Pos + 7, "B").Interior.Color = RGB(0, 150, 255) 'Bleu
                        Pos = Pos + 1
                    Case Is = "X"
                        Cells(Pos + 7, "B").Interior.Color = RGB(0, 255, 0) 'Vert
                        Pos = Pos + 1
                End Select
            Next i
        Else
            MsgBox "Erreur"
            Exit Sub
        End If
     
        'complétion des couleurs
        For i = 8 To 18
            If Cells(i, "B").Interior.Color = 16777215 Then Cells(i, "B").Interior.Color = Cells(i - 1, "B").Interior.Color
        Next
    End Sub
    Cdlt

  3. #3
    Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2018
    Messages
    116
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 30
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Novembre 2018
    Messages : 116
    Points : 61
    Points
    61
    Par défaut
    Bonjour Arturo,

    Merci!
    Alors ton code marche mais il y a 2 problèmes.
    Si par exemple je mets name-/-4, name-1 à name-3 est en bleu et name-4 en orange ça ok mais name-5 à name-12 aussi est en orange alors que ça doit être bleu. C’est le même problème si je mets name-X-4.
    Et le second problème, c’est que si j’ajoute plusieurs même name-n, le coloriage ne se répartie pas bien :/
    Par exemple, si j’ai 2 name-4 et que j’entre name-4 dans l’inputbox, name-1 jusqu’au 2ème name-4 sont en orange et name-5 à name-12 en bleu

  4. #4
    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,

    Voici avec les modifs,
    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
    Option Compare Text
     
    Sub test()
        Dim x As String, NbTiret As Variant
        Dim DernCell As Boolean
     
        Application.ScreenUpdating = False
        Range("B7:B18").Interior.ColorIndex = xlNone
        x = InputBox("enter one/two number")
        x = Replace(x, "name", "")
        NbTiret = Split(x, "-")
     
        If UBound(NbTiret) = 1 Then 'Cas où il n'y a qu'un seul élément à traiter
            Select Case NbTiret(1)
                Case "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12"
                    Range("B7:B" & NbTiret(1) + 6).Interior.Color = RGB(255, 200, 50) 'Orange
                    If UBound(NbTiret) < 12 Then Range("B" & NbTiret(1) + 7 & ":B18").Interior.Color = RGB(0, 150, 255)
                Case Is = "/"
                    Range("B7:B18").Interior.Color = RGB(0, 150, 255) 'Bleu
                Case Is = "X"
                    Range("B7:B18").Interior.Color = RGB(0, 255, 0) 'Vert
            End Select
        ElseIf UBound(NbTiret) > 1 Then 'cas avec plusieurs éléments à traiter
            Pos = 0
            For i = 0 To UBound(NbTiret)
                Select Case NbTiret(i)
                    Case "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12"
                        If NbTiret(i - 1) <> "/" And NbTiret(i - 1) <> "X" And NbTiret(i - 1) <> "" Then
                            Range(Cells(NbTiret(i - 1) + 6, "B"), Cells(NbTiret(i) + 6, "B")).Interior.Color = RGB(255, 200, 50) 'Orange
                        ElseIf NbTiret(i - 1) <> "/" And NbTiret(i - 1) <> "X" And NbTiret(i - 1) = "" Then
                            Range(Cells(7, "B"), Cells(NbTiret(i) + 6, "B")).Interior.Color = RGB(255, 200, 50) 'Orange
                        Else
                            Cells(NbTiret(i) + 6, "B").Interior.Color = RGB(255, 200, 50) 'Orange
                        End If
                        Pos = NbTiret(i)
                    Case Is = "/"
                        Cells(Pos + 7, "B").Interior.Color = RGB(0, 150, 255) 'Bleu
                        Pos = Pos + 1
                    Case Is = "X"
                        Cells(Pos + 7, "B").Interior.Color = RGB(0, 255, 0) 'Vert
                        Pos = Pos + 1
                End Select
            Next i
        Else
            MsgBox "Erreur"
            Exit Sub
        End If
     
        'complétion des couleurs
        For i = 8 To 18
            If Cells(i - 1, "B").Interior.Color = RGB(255, 200, 50) And Cells(i, "B").Interior.Color = 16777215 Then
                Cells(i, "B").Interior.Color = RGB(0, 150, 255) 'Bleu
            ElseIf Cells(i, "B").Interior.Color = 16777215 Then 'Si les cellules testées ne contiennent aucune couleur
                'on scrute les cellules suivantes pour savoir si la cellule testée est la dernière valeur connue
                DernCell = True
                For j = i + 1 To 18
                    If Cells(j, "B").Interior.Color <> 16777215 Then
                        DernCell = False
                    End If
                Next j
                If DernCell = True Then
                    Cells(i, "B").Interior.Color = RGB(0, 150, 255)
                Else
                    Cells(i, "B").Interior.Color = Cells(i - 1, "B").Interior.Color
                End If
            End If
        Next
    End Sub
    J'ai testé de nombreux cas de figures, pouvez-vous me confirmer que dans le cas suivant(vu que dans toutes les propositions présentées, aucune ne termine par un X):
    name-8-/-X
    on devrait trouver:
    -de 1 à 8 en orange
    -9 en bleu
    -10 en vert
    -et de 11 à 12 en bleu
    En clair, quelle que soit la dernière valeur (chiffre ou "/" ou "X") de l'élément à tester (Ex: name-8-/-X), et que, si celle-ci n'occupe pas la position 12, toutes celles qui viennent après jusqu'à la douzième doivent être en bleu.

    Cdlt

  5. #5
    Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2018
    Messages
    116
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 30
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Novembre 2018
    Messages : 116
    Points : 61
    Points
    61
    Par défaut
    Je test ton code cette semaine je te retiens au courant

  6. #6
    Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2018
    Messages
    116
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 30
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Novembre 2018
    Messages : 116
    Points : 61
    Points
    61
    Par défaut
    Re!

    Nan il n'y a jamais de / ou de X à la fin, en fait si la série se termine par name-n, name-n+1 à name-12 seront toujours en bleu.
    En fait voici un peu plus en détail ce que je veux faire :
    Fichiers attachés Fichiers attachés

  7. #7
    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
    Bonsoir,
    Voici, adapté aux nouvelles combinaisons, me dire si d'autres cas de figures ne passent 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
    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
    Sub test()
        Dim x As String, NbTiret As Variant
        Dim DernCell As Boolean
        Dim DerLig As Long
     
        Application.ScreenUpdating = False
        DerLig = [B10000].End(xlUp).Row
        Range("B7:B" & DerLig).Interior.ColorIndex = xlNone
        x = InputBox("enter one/two number")
        x = Replace(x, "name", "")
        NbTiret = Split(x, "-")
     
        Pos = DerLig
        For i = UBound(NbTiret) To 0 Step -1
            If i = UBound(NbTiret) Then
                For j = Pos To 1 Step -1
                    If Cells(Pos, "B") = "name-" & NbTiret(i) Then
                        Cells(Pos, "B").Interior.Color = RGB(255, 192, 50) 'Orange
                        Pos = Pos - 1
                        Do While Cells(Pos, "B") = Cells(Pos + 1, "B")
                            Cells(Pos, "B").Interior.Color = RGB(255, 192, 50) 'Orange
                            Pos = Pos - 1
                        Loop
                        Exit For
                    End If
                    Pos = Pos - 1
                Next j
            Else
                If NbTiret(i) = "/" Then
                    Cells(Pos, "B").Interior.Color = RGB(83, 142, 213) 'Bleu
                    Pos = Pos - 1
                    Do While Cells(Pos, "B") = Cells(Pos + 1, "B")
                        Cells(Pos, "B").Interior.Color = RGB(83, 142, 213) 'Bleu
                        Pos = Pos - 1
                    Loop
     
                ElseIf NbTiret(i) = "X" Then
                    Cells(Pos, "B").Interior.Color = RGB(146, 208, 80) ' Vert
                    Pos = Pos - 1
                    Do While Cells(Pos, "B") = Cells(Pos + 1, "B")
                        Cells(Pos, "B").Interior.Color = RGB(146, 208, 80) ' Vert
                        Pos = Pos - 1
                    Loop
                Else
                    For j = Pos To 1 Step -1
                        If Cells(j, "B") = "name-" & NbTiret(i) Then
                            Cells(j, "B").Interior.Color = RGB(255, 192, 50) 'Orange
                            Pos = j - 1
                            Do While Cells(Pos, "B") = Cells(Pos + 1, "B")
                                Cells(Pos, "B").Interior.Color = RGB(255, 192, 50) 'Orange
                                Pos = Pos - 1
                            Loop
                            Exit For
                        End If
                    Next j
                End If
            End If
        Next i
     
        'complétion des couleurs
        For i = DerLig To 8 Step -1
            If Cells(i, "B").Interior.ColorIndex = xlNone Then
                Cells(i, "B").Interior.Color = RGB(83, 142, 213) 'Bleu
            ElseIf Cells(i - 1, "B").Interior.ColorIndex = xlNone Then
                Cells(i - 1, "B").Interior.Color = Cells(i, "B").Interior.Color
            End If
        Next i
    End Sub
    Cdlt

  8. #8
    Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2018
    Messages
    116
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 30
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Novembre 2018
    Messages : 116
    Points : 61
    Points
    61
    Par défaut
    Tout m'a l'air de fonctionner merci beaucoup
    Je vous retiens au courant si je remarque d'autre cas!
    Il me reste plus qu'à ajouter la gestion d'erreur. Si par exemple j'oublie un caractère par exemple "name-5-/X-8-12" alors un msgbox apparaît pour dire
    que la saisie n'est pas correct. Pour vous, quelle est la meilleure solution pour le faire ?

  9. #9
    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,

    Essayez cette version
    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
    Option Compare Text
     
    Sub test()
        Dim x As String, NbTiret As Variant
        Dim DernCell As Boolean
        Dim DerLig As Long
     
        Application.ScreenUpdating = False
        DerLig = [B10000].End(xlUp).Row
        Range("B7:B" & DerLig).Interior.ColorIndex = xlNone
        x = InputBox("enter one/two number")
        x = Replace(x, "name", "")
        NbTiret = Split(x, "-")
     
        Pos = DerLig
        For i = UBound(NbTiret) To 1 Step -1
            If i = UBound(NbTiret) Then
                For j = Pos To 1 Step -1
                    If Cells(Pos, "B") = "name-" & NbTiret(i) Then
                        Cells(Pos, "B").Interior.Color = RGB(255, 192, 50) 'Orange
                        Pos = Pos - 1
                        Do While Cells(Pos, "B") = Cells(Pos + 1, "B")
                            Cells(Pos, "B").Interior.Color = RGB(255, 192, 50) 'Orange
                            Pos = Pos - 1
                        Loop
                        Exit For
                    End If
                    Pos = Pos - 1
                Next j
            Else
                If NbTiret(i) = "/" Then
                    Cells(Pos, "B").Interior.Color = RGB(83, 142, 213) 'Bleu
                    Pos = Pos - 1
                    Do While Cells(Pos, "B") = Cells(Pos + 1, "B")
                        Cells(Pos, "B").Interior.Color = RGB(83, 142, 213) 'Bleu
                        Pos = Pos - 1
                    Loop
     
                ElseIf NbTiret(i) = "X" Then
                    Cells(Pos, "B").Interior.Color = RGB(146, 208, 80) ' Vert
                    Pos = Pos - 1
                    Do While Cells(Pos, "B") = Cells(Pos + 1, "B")
                        Cells(Pos, "B").Interior.Color = RGB(146, 208, 80) ' Vert
                        Pos = Pos - 1
                    Loop
     
                ElseIf IsNumeric(NbTiret(i)) Then
                    For j = Pos To 1 Step -1
                        If Cells(j, "B") = "name-" & NbTiret(i) Then
                            Cells(j, "B").Interior.Color = RGB(255, 192, 50) 'Orange
                            Pos = j - 1
                            Do While Cells(Pos, "B") = Cells(Pos + 1, "B")
                                Cells(Pos, "B").Interior.Color = RGB(255, 192, 50) 'Orange
                                Pos = Pos - 1
                            Loop
                            Exit For
                        End If
                    Next j
                Else
                    MsgBox "Erreur de saisie"
                    Range("B7:B" & DerLig).Interior.ColorIndex = xlNone
                    End
                End If
            End If
        Next i
     
        'complétion des couleurs
        For i = DerLig To 8 Step -1
            If Cells(i, "B").Interior.ColorIndex = xlNone Then
                Cells(i, "B").Interior.Color = RGB(83, 142, 213) 'Bleu
            ElseIf Cells(i - 1, "B").Interior.ColorIndex = xlNone Then
                Cells(i - 1, "B").Interior.Color = Cells(i, "B").Interior.Color
            End If
        Next i
    End Sub
    Cdlt

  10. #10
    Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2018
    Messages
    116
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 30
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Novembre 2018
    Messages : 116
    Points : 61
    Points
    61
    Par défaut
    Yes parfait merci!

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

Discussions similaires

  1. [XL-2007] Recherche de cellules en fonction de leur valeur
    Par christophe_fr dans le forum Excel
    Réponses: 6
    Dernier message: 08/07/2014, 18h36
  2. [XL-2013] Mise en forme de cellules en fonction de leur valeur (contenu dans un tableau )
    Par pedro2792 dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 07/01/2014, 14h03
  3. [PHPExcel] Agrandir les cellules en fonction de leur contenu
    Par KDZCrew dans le forum Bibliothèques et frameworks
    Réponses: 6
    Dernier message: 04/05/2011, 12h08
  4. Fusion de cellules en fonction de leur valeur
    Par Eusebe dans le forum BIRT
    Réponses: 9
    Dernier message: 29/04/2010, 17h56
  5. Fusion de cellules en fonction de leurs valeurs
    Par sisi37 dans le forum Composants
    Réponses: 1
    Dernier message: 28/10/2008, 14h40

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