PB de mise en forme

Bonjour à tous,

Je travaille sur un fichier afin de faire des devis et factures et je suis bloqué sur la mise en page des deux onglets (il me manque juste cela pour finir).

J’ai une liste sur la feuille Vos données en "L" elle représente des catégories pour pouvoir diviser mon devis ou ma facture.

Comme vous pourrez le voir sur les feuilles devis et facture j'ai fait des changements de couleurs avec la mise en forme conditionnelle.

Le problème est que je voudrais pouvoir utiliser la liste comme référence de mots.

Ceci permettra à la personne de simplement ajouter les mots clé dans la liste pour qu'il soit automatiquement de la bonne couleur.

Pour info ils sont tous en orange sauf "Sous total" qui doit être en vert.

Je ne sais pas si cela est possible avec la mise en forme conditionnelle ou s'il faut passer par macro.

Je vous fournit mon fichier sans les formules et les macros et avec juste les feuilles concernées pour raison de confidentialité.

12test.xlsm (34.82 Ko)

Bonjour

Pour info ils sont tous en orange sauf "Sous total" qui doit être en vert.

Je ne sais pas si cela est possible avec la mise en forme conditionnelle ou s'il faut passer par macro.

Puisque vous avez déjà des macros dans votre fichier, le mieux est de continuer dans ce sens. d'où vous pourriez simplement mettre les couleurs de votre choix en colonne L de la feuille Données et dès que choisis dans la feuille Devis ou Facture, la couleur se mettrait automatiquement

A voir si cela convient avant d'aller plus loin

Cordialement

Bonjour,

j'ai essayé mais je n'arrive pas à utiliser la colonne de mot comme consigne pour le changement de couleur.

Bonjour,

j'ai essayé mais je n'arrive pas à utiliser la colonne de mot comme consigne pour le changement de couleur.

Faite ceci :

- Supprimez les mises en forme conditionnelle que vous avec placées entre les lignes 24 et 60
- Mettez la couleur de votre choix en colonne L dans la feuille "Vos données"
- Faite un click droite sur l'onglet Devis ou Facture et choisissez "Visualiser le code"
- A gauche, dans la fenêtre VBA Project, faite un double click sur THISWORKBOOK
- Mettez le code ci-dessous dans la fenêtre

Option Compare Text
Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Range)
Dim Lig As Byte

If Sh.Name = "DEVIS" Or Sh.Name = "FACTURE" Then

    With Sheets(Sh.Name)
        If Not Intersect(Target, .Range("C24:C60")) Is Nothing Then
            On Error Resume Next
            Lig = Sheets("Vos données").Range("L2:L" & Sheets("Vos données").Range("L" & Rows.Count).End(xlUp).Row).Find(Target, LookIn:=xlValues, lookat:=xlWhole).Row
            If Err.Number > 0 Then
                Range("C" & Target.Row & ":G" & Target.Row).Interior.Color = xlNone
                Exit Sub
            End If
            Range("C" & Target.Row & ":G" & Target.Row).Interior.Color = Sheets("Vos données").Range("L" & Lig).Interior.Color

        End If
    End With
End If
End Sub

- Faites les changements dans vos feuilles Devis et Facture

Cordialement

merci pour le code

je viens de tester et cela ne fonctionne pas je vous envoi en privé le fichier complet car il y a des formules dans la facture et c'est peut-être cela qui bloque.

encore mille merci pour l'aide.

Merci de votre fichier

Faites ceci :
- dans les deux feuilles DEVIS et FACTURE, désactiver les deux macros
- Dans THISWORKBOOK, mettez le code ci-dessous

Private Sub Workbook_SheetChange(ByVal sh As Object, ByVal Target As Range)

If sh.Name = "DEVIS" Or sh.Name = "FACTURE" Then
    If Target.Address = "$G$6" Then
        Call MiseForme(sh)
    End If
End If
End Sub

- Dans un Module (le module 4 par exemple), mettez ce code juste avant la Sub form_devis()

Option Explicit
Option Compare Text

Sub MiseForme(sh As Object)
Dim cel As Range
Dim Lig As Byte, i As Byte

If sh.Name = "FACTURE" Then i = 1 Else i = 2

With Sheets(sh.Name).ListObjects("Tableau" & i)

    .ListColumns(4).DataBodyRange.ClearContents
    .DataBodyRange.Interior.Color = xlNone

    For Each cel In .ListColumns(1).DataBodyRange
        On Error Resume Next
        Lig = Sheets("Vos données").Range("L2:L" & Sheets("Vos données").Range("L" & Rows.Count).End(xlUp).Row).Find(cel.Value, LookIn:=xlValues, lookat:=xlWhole).Row
        If Err.Number = 0 Then
            .ListRows(cel.Row - 23).Range.Interior.Color = Sheets("Vos données").Range("L" & Lig).Interior.Color
            Lig = 0
        End If
    Next cel

End With
End Sub

Faites un test

Sinon j'ai regardé votre fichier ailleurs il y a d'autres codes que j'aurais modifiés. Notamment éviter le Rowssource dans l'USF. On risque d'avoir des soucis par fois avec cette fonction

Cordialement

Bonjour,

Un grand merci à Dan qui a résolu mon PB avec une facilité déconcertante.

chapeau l'artiste.

Une bonne journée à tous

Rechercher des sujets similaires à "mise forme"