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é.
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