Microsoft 365 VBA - Attribuer mise en forme en fonction de valeur cellule d'une liste

Laliepomm

XLDnaute Junior
Bonjour,

Malgré plusieurs recherches sur internet et plusieurs essais infructueux car je suis novice en vba, je n'ai pas réussi à trouver la macro me permettant de mettre en couleur mes cellules en fonction d'une mise en forme définie dans un autre tableau.
Plusieurs informations:
1. la mise en forme est déterminée dans un tableau nommé "Products_list" présent dans l'onglet "Lijst"
2. il y a 2 onglets - "Form3" & "Barcode" - qui servent de matrice pour la création d'autres feuilles avec les informations présentes dans l'onglet "Data"
3. la mise en forme doit "déborder" sur plusieurs lignes dès lors que la valeur de la cellule est identique à celle de la cellule du tableau "Products_list".
Exemple: valeur trouvée dans Form3 en A7, application mise en forme présente dans products_list/Colonne B "Product description" dans les Form3/ de A5 à A8 et ainsi de suite.
4. Il faut que la mise en forme s'applique sur tous les onglets qui seront "créés".

Je vous joins un fichier avec les informations et notamment dans l'attendu pour les onglets "form3" et "barcode".

pour info: la mise en forme conditionnelle n'est pas une option car il y a évidemment bien plus de références dans mon tableau original que dans celui-ci.

D'avance merci pour votre support, je vous souhaite une bonne journée

Lalie.
 

Pièces jointes

  • Couleur Test AZB.xlsm
    114.8 KB · Affichages: 7

herve62

XLDnaute Barbatruc
Supporter XLD
Bonsoir
J'essaye de "décortiquer" car pas dans le contexte
Exemple: valeur trouvée dans Form3 en A7, application mise en forme présente dans products_list/Colonne B "Product description" dans les Form3/ de A5 à A8 et ainsi de suite.
Donc afin d'avoir un "dégrossi" du vba il est bon d'expliquer au plus clair & simple ce que l'on veut !
EX :Je suis LA , Je fais ça & ça ....etc et je veux que ça donne ça !!!
En fait c'est un fil de logique , reste plus qu'à interpréter en VBA
Si réponse adéquat , je regarderais
 

TooFatBoy

XLDnaute Barbatruc
Effectivement, je n'ai pas eu le temps de répondre depuis midi car il a fallu que je tonde le gazon dans le jardin, pis après j'avais les essais libres 1 de F1, pis après j'avais les essais libres 2 de F1, pis après j'ai passé l'aspirateur dans la salle à manger et dans le salon, pis après j'ai mangé, et nous voilà déjà arrivés à 21 heures.

Tu voulais te garder cette question pour toi tout seul ?
Bien que j'ai fait une proposition, rien ne t'empêche de répondre à la question, d'autant que le code de ma proposition n'est pas vraiment optimum...


Regadre là : https://excel-downloads.com/threads/nbre-de-mois-entre-2-dates.20081781/#post-20633792
Je viens de répondre à une question posée hier, et dont la dernière réponse date aussi de ce midi (enfin... 13h53).
Ah zut, pourquoi ai-je répondu à cette question alors que tu n'y interviens pas. Je me suis trompé sûrement... 🙄
 
Dernière édition:

Laliepomm

XLDnaute Junior
Bonjour,

Proposition en pièce jointe.
Coucou,

Merci pour la proposition
Elle répond aux points 1 & 3: pour l'attribution de la couleur du tableau products_list aux onglets form3 & barcode.
Maintenant je vais regarder si j'arrive à:
  • créer une boucle pour remplir les colonnes avec la couleur comme suit :
    • Form3: de A7 à F44
    • Barcode: de A4 à F53
    • puis faire en sorte que la couleur des lettres change aussi.
  • Pouvoir faire en sorte que la couleur s'applique lors que je crée les nouveaux onglets sur base de Form3 et Barcode. Une piste sera peut-être de dire de colorier tous les onglets à l'exception de ceux qui ne le doivent pas (data & list)?
Et merci d'avoir pris le temps après ta journée de dur labeur ;)😁

Lalie
 

Laliepomm

XLDnaute Junior
Bonsoir
J'essaye de "décortiquer" car pas dans le contexte

Donc afin d'avoir un "dégrossi" du vba il est bon d'expliquer au plus clair & simple ce que l'on veut !
EX :Je suis LA , Je fais ça & ça ....etc et je veux que ça donne ça !!!
En fait c'est un fil de logique , reste plus qu'à interpréter en VBA
Si réponse adéquat , je regarderais
Bonjour,
Merci, il est vrai que vous n'êtes pas dans ma tête 😅

Donc voilà:
A/ Dans ma feuille "data", je renseigne les produits contenus dans différents "karren".
B/ Je crée ensuite une feuille récapitulative pour chaque Kar comme suit :
  • Matrice "Form3" - J'obtiens les feuilles nommées: "1 - Z1A" et "2 - Z1B".
  • Matrice "Barcode" - J'obtiens les feuilles nommées:"II -1 - Z1A" et "II -2 - Z1B".
C/ Le but de chaque matrice est de compléter chaque Kar physiquement par les magasiniers (form3) et d'identifier chaque emplacement (barcode). Pour faciliter ces tâches, nous attribuons différentes mises en forme pour chaque produit (products_list).

Donc ce que je cherche, c'est qu'une fois les onglets de chaque kar créé,
  • chaque produit apparait par emplacement (emplacement défini dans les matrices : "Form3" plage: A7 à F44 / "Barcode" plage A4 à A53)
  • la mise en forme par produit est reproduite selon la mise en forme définie pour ce produit dans le tableau products_list.
  • que cette mise en forme s'applique sur plusieurs cellules qui représente un même emplacement

Selon la logique je suppose qu'il faut:
1. Définir les plages à renseigner dans chaque matrice
2. Définir où se trouve la mise en forme à reproduire (Products_list)
3. Définir la zone de remplissage au sein de chaque plage ((cf point 3 de mon poste original pour comment par matrice)
2. Indiquer que la mise en forme doit se faire dans chaque onglet créé sur base de la matrice concernée (boucle?)
3. Attribuer la mise en forme en fonction du produit et des zones de remplissage
4. faire en sorte que cette mise en forme s'applique sur les 2 plages ("Form3" plage: A7 à F44 / "Barcode" plage A4 à A53)

J'espère que c'est plus claire.

Bonne journée!
Lalie
 

TooFatBoy

XLDnaute Barbatruc
Elle répond aux points 1 & 3: pour l'attribution de la couleur du tableau products_list aux onglets form3 & barcode.
De ce que j'en ai compris de #1, ça répond aux 4 points et non seulement à 1 et 3.

As-tu cliqué sur le bouton que j'ai ajouté ?



Maintenant je vais regarder si j'arrive à:
  • créer une boucle pour remplir les colonnes avec la couleur comme suit :
    • Form3: de A7 à F44
    • Barcode: de A4 à F53
    • puis faire en sorte que la couleur des lettres change aussi.
  • Pouvoir faire en sorte que la couleur s'applique lors que je crée les nouveaux onglets sur base de Form3 et Barcode. Une piste sera peut-être de dire de colorier tous les onglets à l'exception de ceux qui ne le doivent pas (data & list)?
Est-ce que la proposition de #3 ne le fait pas déjà ???

Si tu n'as pas encore de données dans le tableau, la proposition de #3 telle quelle ne peut pas colorier le fond des cellules.
Si tes couleurs sont fixes, tu mets des MFC et on n'en parle plus.
 

Laliepomm

XLDnaute Junior
@TooFatBoy
J'ai bien testé ta proposition et dans les conditions souhaitées.
Si tu regardes de ton côté, lorsque tu cliques sur "Création Karren" ou "Creation Barcode list Karren", cela crée de nouveaux onglets et remplit les cases vides, puis en cliquant sur le bouton coloriage, les couleurs ne changent pas sur ces onglets (concerne le point 4 - le point 2 précisant que les onglets Form3 et Barcode sont des modèles/matrices), seul les onglets Form3 et Barcode changent si on ajoute un numéro de Kar.

J'aurai préféré faire des MFC, mais je n'ai pas que 5 produits, ce serait trop long à toutes les créer, de plus, il n'est pas dit que ceux qui vont s'en servir ne vont pas changer les couleurs. Il est donc plus facile de leur laisser l'onglet list à travailler pour leur couleur que de leur expliquer comment modifier les MFC.

Ensuite, la macro est créée pour fonctionner colonne par colonne, je voudrais voir s'il est possible sans répéter pour chaque colonne la même "formule" (certes il n'y en a que 6, mais je voudrais comprendre comment fonctionne les boucles et pour l'instant je n'ai pas de succès avec mes tests.)

J'espère que cela répond à tes interrogations sur mon retour.
Grâce à toi j'ai déjà une base solide pour travailler sur la macro que je veux.
 

TooFatBoy

XLDnaute Barbatruc
Si tu regardes de ton côté, lorsque tu cliques sur "Création Karren" ou "Creation Barcode list Karren", cela crée de nouveaux onglets et remplit les cases vides, puis en cliquant sur le bouton coloriage, les couleurs ne changent pas sur ces onglets (concerne le point 4 - le point 2 précisant que les onglets Form3 et Barcode sont des modèles/matrices), seul les onglets Form3 et Barcode changent si on ajoute un numéro de Kar.
Évidemment, j'ai fait une macro générique pour colorier le fond des cellules des colonnes A, B et D de la feuille dont on donne le nom, et j'ai mis deux exemples.
Ensuite c'est à toi de l'appeler comme il faut et où il faut !


OK. Pas de MFC. ;)
 

Laliepomm

XLDnaute Junior
Bonjour,
Je reviens vers vous car je sèche.
J'ai trouvé comment faire la boucle pour que cela s'applique sur toutes les colonnes de 1 à 6.
J'ai trouvé comment appliquer également la même couleur des lettes (font.color)
J'ai trouvé comment appliquer la macro à la création de mes nouveaux onglets.
Ouf! Merci @TooFatBoy j'ai compris comment fonctionnait ta macro

Mais pour une raison que je n'arrive pas à identifier malgré plusieurs tests: La macro ne colorie pas dès les lignes souhaitées.
Pour l'onglet Form3: pas de coloration des lignes 5 à 8
pour l'onglet Barcode: pas de coloration des lignes 4 à 8

ci-joint le fichier avec mes trouvailles - la nouvelle sub "Coloriage2" - se trouve dans les modules 6 & 7.
pour tester il suffit de cliquer sur "Creation Karren" et "Creation Barcode"

Merci de m'aider, c'est mon dernier point bloquant.

et voici le code

VB:
 Sub ColorBarcode()

'Création des feuilles pour chaque KAR
    Dim oShModele As Worksheet
    Dim oShListe As Worksheet
   
    Dim iLigFin As Integer
    Dim iLig As Integer
    Dim oShNew As Worksheet
    Dim sNomOnglet As String
    
    Set oShModele = Worksheets("Barcode")
    Set oShListe = Worksheets("Data")
  
     Application.DisplayAlerts = False
     
    iLigFin = oShListe.Range("Q" & Rows.Count).End(xlUp).Row
    
    For iLig = 3 To iLigFin
        If oShListe.Range("Q" & iLig).Value <> "" Then
            sNomOnglet = oShListe.Range("Q" & iLig).Value & " - " & oShListe.Range("E" & iLig).Value
                      
            If OngletExist(sNomOnglet) Then
                Set oShNew = Worksheets(sNomOnglet)
                  Call Coloriage2(sNomOnglet, 5, 1)  'appliquer mise en forme aux cellules
            Else
                oShModele.Copy After:=Worksheets(Worksheets.Count)
                Worksheets(Worksheets.Count).Name = sNomOnglet
                Set oShNew = Worksheets(Worksheets.Count)
                          
                    
            End If
            oShNew.Range("Kar_nummer").Value = oShListe.Range("Q" & iLig).Value 'Karren
            
            'lien hypertext
     ' oShNew.Hyperlinks.Add Anchor:=oShListe.Range("Q" & iLig), Address:="", SubAddress:="'" & sNomOnglet & "'!T1", TextToDisplay:=oShListe.Range("Q" & iLig).Value
      ' Set oShNew = Nothing
    End If
    Next iLig
    
   
    
    'oShAlarm.Select
    
   ' Set oShListe = Nothing
    'Set oShModele = Nothing
    

    
End Sub


Sub Coloriage2(Mafeuille As String, NbLig As Integer, NbCol As Integer)


Dim LigDeb As Long, LigFin As Long, LigEnCours As Long, ColDeb As Long, ColEnCours As Long, ColFin As Long
Dim MaCell As Range, CellTrouvee As Range

    Application.ScreenUpdating = False

    LigDeb = 7
    ColDeb = 1
    ColFin = 6

    With Sheets(Mafeuille)
    
        MaCol = 1
        LigFin = .Cells(.Rows.Count, ColDeb).End(xlUp).Row
             
       
   For ColEnCours = ColDeb To ColFin Step NbCol
            For LigEnCours = LigDeb To LigFin Step NbLig
                Set MaCell = .Cells(LigEnCours, ColEnCours)
                If MaCell <> "" Then
                    Set CellTrouvee = Range("Products_list[Product description]").Find(MaCell.Value)
                    If Not CellTrouvee Is Nothing Then MaCell.Offset(-2, 0).Resize(4, 1).Interior.Color = CellTrouvee.Interior.Color
                    MaCell.Offset(-2, 0).Resize(4, 1).Font.Color = CellTrouvee.Font.Color
                    
            End If
          
            
          Next LigEnCours
   Next ColEnCours

End With


End Sub


Private Function OngletExist(psNom As String) As Boolean
'ne pas créer une nouvelle feuille/onglet si l'onglet pour le collaborateur est déjà créé
    Dim oSh As Worksheet
    Dim lErr As Long
    Dim sErr As String
    
    On Error Resume Next
    Set oSh = Worksheets(psNom)
    lErr = Err.Number
    sErr = Err.Description
    On Error GoTo 0
    
    If lErr = 0 Then
        OngletExist = True
    ElseIf lErr = 9 Then
        OngletExist = False
    Else
        MsgBox "Erreur n°" & lErr & vbCrLf & sErr, vbExclamation
    End If
    
    Set oSh = Nothing
    
End Function

D'avance merci
Lalie
 

Pièces jointes

  • Couleur Test AZB (suite).xlsm
    121.6 KB · Affichages: 4
Dernière édition:

TooFatBoy

XLDnaute Barbatruc
Tu as deux macros identiques qui portent le même nom. Vu qu'elles sont identiques, je ne comprends pas pourquoi tu les doubles.

Tu as deux fonctions identiques qui portent le même nom. Vu qu'elles sont identiques, je ne comprends pas pourquoi tu les doubles.



Si tu crées deux macros différentes pour le coloriage des deux modèles de feuille, pourquoi leur passer des valeurs par paramètre ???
 
Dernière édition:

TooFatBoy

XLDnaute Barbatruc
Essaye cette version en pièce jointe.

Si ça ne colore pas le premier groupe de lignes, c'est parce que tu ne remplies pas correctement ce groupe : tes modèles ne comportent pas de formule en ligne n° 7.
 

Pièces jointes

  • Couleur Test AZB (suite).xlsm
    110.5 KB · Affichages: 4
Dernière édition:

Discussions similaires

Statistiques des forums

Discussions
314 698
Messages
2 112 018
Membres
111 399
dernier inscrit
KDM