Mettre en gras et en couleurs des mots - Exclure des cellules d'un filtre
Bonjour,
Je suis novice dans les macros et j'ai quelques difficultés pour une problématique qui je pense devrait être réalisable.
Je vous explique, j'ai besoin d'imprimer pour mon équipe de production, la feuille "Liste col" de mon fichier.
Pour qu'ils aient + de facilité, nous avons déjà une série de filtre et données mis en évidence avec des changements macro. (je reprends ce fichier d'un ancien collaborateur et essaie d'y ajouter des nouveautés).
Pour l'instant, la feuille "Liste col" est triée par ordre alphabétique par rapport à la colonne des références de nos articles (colonne B).
J'aimerais que toutes les lignes de cette feuille dont les cellules de la colonne D contiennent "BRILLANT" ou "PROTECTION" ne soient pas concernée par ce tri.
Il faudrait pour bien faire, que toutes les lignes qui contiennent ces mots en colonne D soient répertoriées en fin de feuille.
Encore mieux, si en fin de feuille, toutes ces lignes contenant ces mots seraient retriées par ordre alphabétique en fonction toujours de cette colonne B. (je ne sais pas si cette dernière étape est réalisable).
Egalement, j'ai mis en gras certains termes avec le code suivant :
' remplacer des termes '
Columns("D:D").Replace "|Finition:Mat", ""
Columns("D:D").Replace "|Couche protectrice:Sans", ""
Columns("D:D").Replace "Finition:Brillant", "BRILLANT"
Columns("D:D").Replace "Couche protectrice:Plastification premium", "PROTECTION"
' mettre BRILLANT et PROTECTION en gras '
mot = "BRILLANT"
For Each c In Range("D2:D" & [D65000].End(xlUp).Row)
p = InStr(UCase(c), UCase(mot))
If p > 0 Then c.Characters(Start:=p, Length:=Len(mot)).Font.Bold = True
Next c
mot = "PROTECTION"
For Each c In Range("D2:D" & [D65000].End(xlUp).Row)
p = InStr(UCase(c), UCase(mot))
If p > 0 Then c.Characters(Start:=p, Length:=Len(mot)).Font.Bold = True
Next cJ'aimerais pouvoir rajouter une couleur sur les mots "BRILLANT" et "PROTECTION", du rouge par exemple.
Cordialement,
Kévin
Bonjour Kevcharlier et
Une petite présentation ICI serait la bienvenue
Si vous ne l'avez pas encore fait, je vous invite à lire la charte du forum [A LIRE AVANT DE POSTER]
qui vous aidera dans vos demandes et réponses sur ce forum et notamment
Je regarde le fichier envoyé par lien en MP (car trop lourd et avec données personnelles)
Merci de votre participation
Cordialement
Re,
Dans le fichier bon nombre de Sub peuvent être regroupées dans un même module
et beaucoup sont vides, peuvent être supprimés (click droit)
Sinon voici le code pour effectuer le tri comme demandé
Sub TriListeCol()
Dim dLig As Long, Lig As Long
With ThisWorkbook.Sheets("Liste col")
dLig = .Range("A" & Rows.Count).End(xlUp).Row
' Désactiver les évènements
Application.EnableEvents = False
' Parcourir les lignes et modifier la ref de celles avec BRILLANT ou PROTECTION
For Lig = 2 To dLig
If InStr(1, .Range("D" & Lig), "BRILLANT") > 0 Or _
InStr(1, .Range("D" & Lig), "PROTECTION") > 0 Then
' Modifier la référence temporairement
.Range("B" & Lig).Value = "Z_" & .Range("B" & Lig).Value
End If
Next Lig
' Réactiver les évènements
Application.EnableEvents = True
' Trier
With .Sort
With .SortFields
.Clear
.Add2 Key:=Range("B2:B" & dLig), SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal
End With
.SetRange Range("A1:D" & dLig)
.Header = xlYes
.MatchCase = False
.Orientation = xlTopToBottom
.SortMethod = xlPinYin
.Apply
End With
' Remettre les ref à la normal
.Range("B2:B" & dLig).Replace What:="Z_", Replacement:="", LookAt:=xlPart, _
SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, _
ReplaceFormat:=False, FormulaVersion:=xlReplaceFormula2
End With
End SubPour ce qui concerne la couleur, voici
' mettre BRILLANT et PROTECTION en gras et en ROUGE '
mot = "BRILLANT"
For Each c In Range("D2:D" & [D65000].End(xlUp).Row)
p = InStr(UCase(c), UCase(mot))
If p > 0 Then
With c.Characters(Start:=p, Length:=Len(mot)).Font
.Bold = True
.Color = 255
End With
End If
Next c
mot = "PROTECTION"
For Each c In Range("D2:D" & [D65000].End(xlUp).Row)
p = InStr(UCase(c), UCase(mot))
If p > 0 Then
With c.Characters(Start:=p, Length:=Len(mot)).Font
.Bold = True
.Color = 255
End With
End If
Next cA tester
A+
Re,
Oui en effet, j'ai repris le document en ma possession hier seulement et j'ai remarqué qu'il faudrait mettre dans de l'ordre dans tout cela, dans un premier temps, je vais résoudre ma problématique et j'y reviendrai.
Merci pour votre aide, le tri fonctionne bien, les cellules de la colonne D contenant "BRILLANT" ou "PROTECTION" s'affiche bien plus bas et également par odre alphabétique en colonne B !
J'aurais une dernière petite demande si c'est possible, je voudrais que tout les "BRILLANT|PROTECTION " , "BRILLANT " et "PROTECTION" soient groupé ensemble les un en dessous des autres en colonne D.
Vous pourrez voir sur la capture d'écran suivante, il faudrait que les lignes contenant "BRILLANT|PROTECTION" se suivent, pareil pour celles contenant "BRILLANT" et également pour celle contenant "PROTECTION".
Merci beaucoup pour votre aide !
Re,
Comme on fait un classement alphabétique, c'est compliqué
J'essaye de voir, mais pas certain
A+
Re,
Voici un code à essayer
Sub TriListeCol()
Dim dLig As Long, Lig As Long
Dim Deb As Long, sTmp As String
Dim Sht As Worksheet
' Désactiver les évènements
Application.EnableEvents = False
' Définir la feuille de travail
Set Sht = ThisWorkbook.Sheets("Liste col")
' Dernière ligne remplie
dLig = Sht.Range("A" & Rows.Count).End(xlUp).Row
' Parcourir les lignes et modifier la ref de celles avec BRILLANT ou PROTECTION
For Lig = 2 To dLig
' Si la cellule de la colonne D contient les arguments
If InStr(1, Sht.Range("D" & Lig), "BRILLANT") > 0 Or _
InStr(1, Sht.Range("D" & Lig), "PROTECTION") > 0 Then
' Copier les ref en colonne E
Sht.Range("E" & Lig).Value = Sht.Range("B" & Lig).Value
' Récupérer le libellé de la référence
sTmp = Sht.Range("D" & Lig).Value
' Trouver la première occurence de BRILLANT ou PROTECTION
Deb = InStr(1, sTmp, "|")
Do While Mid(sTmp, Deb + 1, 2) <> "BR" And Mid(sTmp, Deb + 1, 2) <> "PR"
Deb = InStr(Deb + 1, sTmp, "|")
Loop
' Modifier la référence temporairement en inscrivant une peudo référence
Sht.Range("B" & Lig).Value = "Z_" & Mid(sTmp, Deb)
End If
Next Lig
' Trier
With Sht.Sort
With .SortFields
.Clear
.Add2 Key:=Sht.Range("B2:B" & dLig), SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal
End With
' On tri les colonnes A à E (référence si BRILLANT ou PROTECTION)
.SetRange Sht.Range("A1:E" & dLig)
.Header = xlYes
.MatchCase = False
.Orientation = xlTopToBottom
.SortMethod = xlPinYin
.Apply
End With
' Remettre les ref à la normal
'.Range("B2:B" & dLig).Replace What:="Z_", Replacement:="", LookAt:=xlPart, _
SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, _
ReplaceFormat:=False, FormulaVersion:=xlReplaceFormula2
' Parcourir les lignes
For Lig = 2 To dLig
' Si la colonne E contient une référence
If Sht.Range("E" & Lig) <> "" Then
' La remettre à sa place
Sht.Range("B" & Lig).Value = Sht.Range("E" & Lig).Value
' Effacer la colonne E
Sht.Range("E" & Lig).ClearContents
End If
Next Lig
' Effacer la variable objet
Set Sht = Nothing
' Réactiver les évènements
Application.EnableEvents = True
End SubA+
Bonjour Bruno,
Un énorme merci pour ton aide, cela fonctionne parfaitement !
J'ai juste un petit problème, quand je clique sur "CLICK ALL" (module 40), tout les boutons présent sur la feuille "Boutons" s'exécutent.
Le problème est que le code que vous m'avez transmis ne s'exécute pas, il ne s'exécute que lorsque je reclique sur le bouton "GENERER LISTE COL" (module 32).
Voici le fichier en pièce jointe.
Re,
Vous ne devez/pouvez pas déposer sur ce forum un fichier avec des données personnelles
Revoyez votre code de transformation de "|Finition:Brillant" en "|BRILLANT"
Voici ce que j'ai avant exécution du code donné
Ce n'est pas ce que j'avais sur le précédent
Je recherche le caractère "|" dans la cellule, si je le trouve, je vérifie si les 2 caractères d'après sont "BR" ou "PR"
Ce qui du coup, n'est absolument pas le cas.
A+
Oui justement, en cliquant sur le bouton "GENERER LISTE COL" de la première feuille après avoir cliqué sur "CLICK ALL", cela résou le problème. C'est cela que je ne comprends pas, normalement "click all" devrait exécuter correctement tout le "GENERER LISTE COL", la ce n'est pas le cas.
PS: ce sont des données de liste de production, ce n'est pas sensible du tout.
Re,
PS: ce sont des données de liste de production, ce n'est pas sensible du tout.
Et les adresses mail
En effet, il n'y en avait pas beaucoup car j'avais justement raccourci mon fichier avec juste qq tests, dans celui-ci, je viens de modifier les données au hasard.
Désolé pour le fichier précédent.