VBA excel insertion de ligne et couleur

Résolu
grand-agite Messages postés 3 Statut Membre -  
grand-agite Messages postés 3 Statut Membre -
Bonjour à tous ,
Débutant en VBA, je fais actuellement face à un problème assez épineux.

Voici mon problème :

Il y'a dans mon tableau plusieurs référence. Ces références sont majoritairement unique, mais dans dans certains cas ponctuel , deux références identiques existent. Lorsque ce cas se présente, les deux références (identique donc) se suivent dans le tableau. Pour une meilleur lisibilité du tableau j'ai alterné les couleurs entre chaque références , sauf quand deux références identiques se suivent. ( voir image si dessous ).

http://img257.imageshack.us/img257/5606/classeur1.jpg

Ce que je souhaiterais faire c'est : lorsque je supprime ou j'insert une ligne dans mon tableau, toutes les couleurs des cellules se décalent pour respecter ce que j'ai expliquer plus haut (les couleurs s'alternent entre chaque référence , sauf quand il y'a un doublon => la couleur se répète)

exemple : si je supprime la ligne RE3444, les deux RE3333 deviennent bleu, et les deux RE1111 deviennent orange.

J'ai éssayé différente solution , notamment la mise en forme conditionnel .. je ne pense pas que cela soit possible avec cette technique ( c'est pourquoi j'essai de passer par une macro vba).

Merci de votre participation, je reste disponible pour toute question ( car je me rend compte que c'est pas si simple à expliquer :) )

3 réponses

  1. grand-agite Messages postés 3 Statut Membre
     
    Up

    J'en profite pour poster le début de programme que j'ai réussi a faire en lisant beaucoup de message sur internet :

    Option Explicit
    Sub test2()

    Dim chx As Integer
    Dim I As Integer
    Dim J As Integer
    Dim C As Integer
    Dim Z As Double
    Dim L As Integer
    Dim Y As Integer
    Dim R As Variant

    chx = 1

    Do While (chx <> 0)
    chx = InputBox("Vous voulez ?" & Chr(13) & "0 : Sortir" & Chr(13) & "1 : Insérer une ligne " & Chr(13) & _
    "2 : Supprimer une ligne ")
    If (chx = 0) Then
    ElseIf (chx = 1) Then 'Inserer une ligne'
    L = InputBox("Ligne ?")
    Rows(L).Select
    Selection.Insert Shift:=xlDown

    C = 2 ' x=2 car c'est toujours la même colonne sinon faire inputbox ("Colonne ? ")'
    Z = L - 1
    Y = L + 1
    Cells(L, C).Select
    R = InputBox("Référence ?")
    Cells(L, C).Value = R
    Cells(L, C).Select

    If Cells(Z, C).Value = R Then ' Comparaison de la cellule de la ligne insérée avec la cellule du dessous '
    Cells(Z, C).Select
    With Selection.Interior
    .ColorIndex = 3
    .Pattern = xlSolid
    End With

    If Cells(Y, C).Value = R Then ' Comparaison de la cellule de la ligne insérée avec la cellule du dessus '
    Cells(Y, C).Select
    With Selection.Interior
    .ColorIndex = 3
    .Pattern = xlSolid
    End With

    End If

    End If

    Avec ce programme je peu : insérer une ligne , donner une référence , et insérer cette derniere dans la bonne cellule. Là où ca pèche c'est au changement de couleur : ca ne fonctionne pas , je ne comprend pas pourquoi (peut être ça vien du fait que les cellules insérées posséde une mise en forme conditionnel... comment insérer une ligne sans format sans rien..?) :(
    0
  2. lermite222 Messages postés 9042 Statut Contributeur 1 199
     
    Bonjour,
    Colle ce code dans le module de la feuille, adapte la 1ère ligne (Ici la 4) et les couleurs de texte et de fond
    Option Explicit   
    Sub Insertion()   
        Rows(ActiveCell.Row).Insert Shift:=xlDown   
        Colorise   
    End Sub   
    Sub Colorise()   
    Dim Lig As Long   
    Dim Coul(1) As Integer, Fond(1) As Integer, NumCoul As Byte   
    Coul(0) = 9: Fond(0) = 8   
    Coul(1) = 3: Fond(1) = 4   
        For Lig = 4 To Range("A65536").End(xlUp).Row   
            If Cells(Lig, "A").Offset(-1) <> Cells(Lig, "A") Then   
                NumCoul = NumCoul + 1   
                If NumCoul > 1 Then NumCoul = 0   
            End If   
            Rows(Lig).Font.ColorIndex = Coul(NumCoul)   
            Rows(Lig).Interior.ColorIndex = Fond(NumCoul)   
        Next Lig   
    End Sub   
    Sub Supprime()   
        'éventuellement message confirmation suppression   
        Rows(ActiveCell.Row).Delete   
        Colorise   
    End Sub

    Mettre le curseur sur la cellule où ajouter ou supprimer ensuite..
    J'ai mis la macro Insertion avec le raccourci Ctrl+i et
    Supprime avec Ctrl+S
    Tu dis,
    A+
    Edit: j'oubliais, je teste la colonne A
    L'expérience instruit plus sûrement que le conseil. (André Gide)
    Si tu te cognes à un pot et que ça sonne creux, c'est pas forcément le pot qui est vide. ;-)(Confucius)
    0
  3. grand-agite Messages postés 3 Statut Membre
     
    Merci de ta réponse Lermitte222

    Ce code fonctionne bel et bien. Cependant j'ai trouvé une alternative que je vais poster ici , ça fonctionne :

    Sub coloriage()
    Application.ScreenUpdating = False
    Couleur = 40
    For i = 2 To [A65000].End(xlUp).Row
    If Cells(i, 1) <> Cells(i - 1, 1) Then Couleur = IIf(Couleur = 35, 40, 35)
    Cells(i, 1).Interior.ColorIndex = Couleur
    Next i
    Application.ScreenUpdating = True
    End Sub

    J'insert une ligne (entre deux lignes deja présente par ex ) , je rentre mes données , et j'ai qu'a lancé la macro par le biais d'un bouton pour que toutes les couleurs se mettent à jours :D

    Voila voila , le sujet est résolu ! Merci à toi Lermitte222 pour ta rapide réponse.
    0