Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

Tri par couleur automatique

9 réponses
Avatar
Gabriel
Bonjour,

Je souhaite réaliser un tableau avec Excel 2003 ou les lignes seraient
triées lors du changement de couleur. les lignes en noir au début et
les lignes en rouges à la fin et chacune des 2 couleurs triées
alphabétiquement (première colone).

En faite actuellement mon tableau se tri automatiquement par ordre
alphabétique (sur la première colonne) à chaque nouvelle ligne ajoutée.
grace à un VBA trouvé sur l'excellent site de JB
(http://boisgontierjacques.free.fr/)

Et je souhaiterai que les lignes que je passe en rouge viennent se
mettre à la fin du tableau mais triées également par odre alphabétique
(les noires en haut triées par ordre alphabétique et les rouges en bas
triées par ordre alphabétique)

est-ce jouable ?

Merci.

--

Cordialement,
Gabriel

9 réponses

Avatar
Gabriel
Gabriel a émis l'idée suivante :
Bonjour,

Je souhaite réaliser un tableau avec Excel 2003 ou les lignes seraient triées
lors du changement de couleur. les lignes en noir au début et les lignes en


[...]

oups, j'ai oublié le fichier actuel :
http://www.cijoint.fr/cjlink.php?file=cj200912/cijZYCM4xq.xls

--

Cordialement,
Gabriel
Avatar
FFO
Salut à toi

Je te propose ce code :

For Each c In Range("A3", "A" & Range("A65535").End(xlUp).Row - 1)
If c.Font.ColorIndex = -4105 Then
Range("G" & c.Row) = 1
End If
Next
Range("A3", "G" & Range("A65535").End(xlUp).Row - 1).Sort
Key1:=Range("G3"), Order1:=xlAscending
Columns("G:G").Clear


Une fois le tri alphabétique réalisé tu l'exécutes

La colonne G est utilisée pour marquer les cellules de la colonne A qui sont
en noir
Je suppose que c'est sur ces cellules sur lesquelles on doit se baser pour
basculer ou non les lignes en fin de liste

Cette colonne G doit donc restée disponibles au fonctionnement de ce code

Si tu veux utiliser une autre colonne il suffit de changer dans le code tous
les "G" par la nouvelle lettre correspondant à cette autre colonne (elle doit
être aprés celles utilisées par tes données)

Pour la colonne H celà donnra :

For Each c In Range("A3", "A" & Range("A65535").End(xlUp).Row - 1)
If c.Font.ColorIndex = -4105 Then
Range("H" & c.Row) = 1
End If
Next
Range("A3", "H" & Range("A65535").End(xlUp).Row - 1).Sort
Key1:=Range("H3"), Order1:=xlAscending
Columns("H:H").Clear

Sur ce lien ton fichier adapté ainsi

Aprés l'avoir récupéré ouvres le et actives le bouton "Tri Couleur"

Fais des essais et dis moi !!!!!

http://www.cijoint.fr/cjlink.php?file=cj200912/cijtgKaen7.xls
Avatar
michdenis
Bonjour,

A ) Si tu modifies la couleur d'une cellule en utilisant l'içone
affichant le tableau des couleurs, la procédure
n'est pas déclenchée -> donc pas de mise à jour
tu dois double-cliquer sur une cellule de la colonne A:A
pour provoquer la mise à jour après avoir modifié la
couleur du texte d'une cellule.

B ) ta ligne de formule : =NBVAL(A1:A2)
Tu la places juste en dessous de ta ligne d'étiquettes
ça te permettra d'ajouter toutes les lignes que tu veux
sans venir perturber ta procédure !

Dans le module feuille, tu remplaces ta procédure par celle-ci

Cette procédure de la colonne G:G, donc je suppose
qu'elle est disponible !
'------------------------------------------
Private Sub Worksheet_Change(ByVal Target As Range)
Dim Rg As Range
If Target.Column = 1 And Target.Count = 1 Then
Application.ScreenUpdating = False
Application.EnableEvents = False
nom = Target
Set Rg = Range("G4:G" & Range("A65536").End(xlUp).Row)
Rg.NumberFormat = "General"
Rg.Formula = "=Couleur(" & Rg(1).Offset(, -6). _
Address(0, 0) & ")"
Rg.Value = Rg.Value
With Rg.Offset(, -6).Resize(, 7)
.Sort key1:=.Item(1, 7), order1:=xlAscending, _
Key2:=.Item(1, 1), Order2:=xlAscending
End With
[A:A].Find(what:=nom).Select
Rg = ""
Application.EnableEvents = True
Application.ScreenUpdating = True
End If
End Sub
'------------------------------------------
Dans un module standard, tu copies ceci :
'-------------------------------------------
Function Couleur(Rg As Range)
Couleur = Rg.Font.ColorIndex
End Function
'-------------------------------------------




"Gabriel" a écrit dans le message de groupe de discussion :

Bonjour,

Je souhaite réaliser un tableau avec Excel 2003 ou les lignes seraient
triées lors du changement de couleur. les lignes en noir au début et
les lignes en rouges à la fin et chacune des 2 couleurs triées
alphabétiquement (première colone).

En faite actuellement mon tableau se tri automatiquement par ordre
alphabétique (sur la première colonne) à chaque nouvelle ligne ajoutée.
grace à un VBA trouvé sur l'excellent site de JB
(http://boisgontierjacques.free.fr/)

Et je souhaiterai que les lignes que je passe en rouge viennent se
mettre à la fin du tableau mais triées également par odre alphabétique
(les noires en haut triées par ordre alphabétique et les rouges en bas
triées par ordre alphabétique)

est-ce jouable ?

Merci.

--

Cordialement,
Gabriel
Avatar
michdenis
Une information supplémentaire,

Comme dit précédemment, l'usage de l'icône pour modifier la couleur du texte d'une cellule
ou le fond de celle-ci ne déclenche pas de procédure événementielle. Cependant, tu peux
faire ceci :

Dans une plage de cellules, à titre d'exemple...
la ligne sous l'étiquette des colonnes, tu insères
un texte quelconque dont tu formates le texte
de ces cellules avec les couleurs que tu auras de
besoin en A:A pour ton application.

Si tu utilises l'outil "Le balai" de la barre d'outils
pour applique la couleur d'une de ces cellules de ta
plage exemple vers ta cellule de ton choix en A:A,
ceci déclenchera la mise à jour automatiquement.




"michdenis" a écrit dans le message de groupe de discussion :

Bonjour,

A ) Si tu modifies la couleur d'une cellule en utilisant l'içone
affichant le tableau des couleurs, la procédure
n'est pas déclenchée -> donc pas de mise à jour
tu dois double-cliquer sur une cellule de la colonne A:A
pour provoquer la mise à jour après avoir modifié la
couleur du texte d'une cellule.

B ) ta ligne de formule : =NBVAL(A1:A2)
Tu la places juste en dessous de ta ligne d'étiquettes
ça te permettra d'ajouter toutes les lignes que tu veux
sans venir perturber ta procédure !

Dans le module feuille, tu remplaces ta procédure par celle-ci

Cette procédure de la colonne G:G, donc je suppose
qu'elle est disponible !
'------------------------------------------
Private Sub Worksheet_Change(ByVal Target As Range)
Dim Rg As Range
If Target.Column = 1 And Target.Count = 1 Then
Application.ScreenUpdating = False
Application.EnableEvents = False
nom = Target
Set Rg = Range("G4:G" & Range("A65536").End(xlUp).Row)
Rg.NumberFormat = "General"
Rg.Formula = "=Couleur(" & Rg(1).Offset(, -6). _
Address(0, 0) & ")"
Rg.Value = Rg.Value
With Rg.Offset(, -6).Resize(, 7)
.Sort key1:=.Item(1, 7), order1:=xlAscending, _
Key2:=.Item(1, 1), Order2:=xlAscending
End With
[A:A].Find(what:=nom).Select
Rg = ""
Application.EnableEvents = True
Application.ScreenUpdating = True
End If
End Sub
'------------------------------------------
Dans un module standard, tu copies ceci :
'-------------------------------------------
Function Couleur(Rg As Range)
Couleur = Rg.Font.ColorIndex
End Function
'-------------------------------------------




"Gabriel" a écrit dans le message de groupe de discussion :

Bonjour,

Je souhaite réaliser un tableau avec Excel 2003 ou les lignes seraient
triées lors du changement de couleur. les lignes en noir au début et
les lignes en rouges à la fin et chacune des 2 couleurs triées
alphabétiquement (première colone).

En faite actuellement mon tableau se tri automatiquement par ordre
alphabétique (sur la première colonne) à chaque nouvelle ligne ajoutée.
grace à un VBA trouvé sur l'excellent site de JB
(http://boisgontierjacques.free.fr/)

Et je souhaiterai que les lignes que je passe en rouge viennent se
mettre à la fin du tableau mais triées également par odre alphabétique
(les noires en haut triées par ordre alphabétique et les rouges en bas
triées par ordre alphabétique)

est-ce jouable ?

Merci.

--

Cordialement,
Gabriel
Avatar
Gabriel
FFO a présenté l'énoncé suivant :
Salut à toi

Je te propose ce code :




Merci beaucoup ça fonctionne très bien mais moins automatique que la
version de michdenis qui a ma préférence vu que c'est destiné à des
utilisateurs qui on parfois jusqu'a la fleme de cliquer sur un bouton,
ça me va très bien. Cependant je garde ton exemple sous le coude ça
pourra me servir.

Encore merci.

--

Cordialement,
Gabriel
Avatar
Gabriel
michdenis vient de nous annoncer :
Une information supplémentaire,




sublissime, ça me va parfaitement.
Un gros merci à toi et à FFO qui m'avez solutionné mon problème, c'est
beau l'entraide, vive les newsgroups :D

--

Cordialement,
Gabriel
Avatar
Gabriel
Bonjour à tous et meilleurs voeux,

http://www.cijoint.fr/cjlink.php?file=cj201001/cijXHNGF5X.xls

Suite à ma question initiale et la réponse de michdenis ci-dessous, que
je remercie de nouveau au passage, j'aimerai ajouter une colonne F avec
des montants (voir fichier joint) et sur le coté du tableau :
- en I3 et I4 avoir le nombre de lignes écrites en noir (ou plutôt
"couleur automatique")et le nombre de lignes en rouge
- en J3 / J4 le montant total (PV HT) des lignes noires et le montant
total des lignes rouges.

J'ai essayé de le faire tout seul avec des VBA trouvés sur internet
mais losrque j'appel la fonction depuis le script de michdenis (avec
"Call ThisWorkbook.mon_script") j'ai l'impression qu'Excel entre en
boucle infini et je suis obligé de le "killer" avec le gestionnaire de
tâches.

De plus ce sera certainement plus propre d'ajouter ces modifications en
parallèle dans le code existant mais je ne sais pas le faire c'est
pourquoi je sollicite votre aide à nouveau.

En plus avec l'ajout d'une colonne je suppose que le script VBA de
michdenis doit être modifié. Selon ce que je comprend je pense qu'il
faut faire les modifications suivantes mais est-ce exacte ? :

Private Sub Worksheet_Change(ByVal Target As Range)
Dim Rg As Range
If Target.Column = 1 And Target.Count = 1 Then
Application.ScreenUpdating = False
Application.EnableEvents = False
nom = Target
Set Rg = Range("H4:H" & Range("A65536").End(xlUp).Row)
Rg.NumberFormat = "General"
Rg.Formula = "=Couleur(" & Rg(1).Offset(, -7). _
Address(0, 0) & ")"
Rg.Value = Rg.Value
With Rg.Offset(, -7).Resize(, 8)
.Sort key1:=.Item(1, 8), order1:=xlAscending, _
Key2:=.Item(1, 1), Order2:=xlAscending
End With
[A:A].Find(what:=nom).Select
Rg = ""
Application.EnableEvents = True
Application.ScreenUpdating = True
End If
End Sub

Merci d'avance pour votre aide précieuse.



Bonjour,

A ) Si tu modifies la couleur d'une cellule en utilisant l'içone
affichant le tableau des couleurs, la procédure
n'est pas déclenchée -> donc pas de mise à jour
tu dois double-cliquer sur une cellule de la colonne A:A
pour provoquer la mise à jour après avoir modifié la
couleur du texte d'une cellule.

B ) ta ligne de formule : =NBVAL(A1:A2)
Tu la places juste en dessous de ta ligne d'étiquettes
ça te permettra d'ajouter toutes les lignes que tu veux
sans venir perturber ta procédure !

Dans le module feuille, tu remplaces ta procédure par celle-ci

Cette procédure de la colonne G:G, donc je suppose
qu'elle est disponible !
'------------------------------------------
Private Sub Worksheet_Change(ByVal Target As Range)
Dim Rg As Range
If Target.Column = 1 And Target.Count = 1 Then
Application.ScreenUpdating = False
Application.EnableEvents = False
nom = Target
Set Rg = Range("G4:G" & Range("A65536").End(xlUp).Row)
Rg.NumberFormat = "General"
Rg.Formula = "=Couleur(" & Rg(1).Offset(, -6). _
Address(0, 0) & ")"
Rg.Value = Rg.Value
With Rg.Offset(, -6).Resize(, 7)
.Sort key1:=.Item(1, 7), order1:=xlAscending, _
Key2:=.Item(1, 1), Order2:=xlAscending
End With
[A:A].Find(what:=nom).Select
Rg = ""
Application.EnableEvents = True
Application.ScreenUpdating = True
End If
End Sub
'------------------------------------------
Dans un module standard, tu copies ceci :
'-------------------------------------------
Function Couleur(Rg As Range)
Couleur = Rg.Font.ColorIndex
End Function
'-------------------------------------------




"Gabriel" a écrit dans le message de groupe de
discussion :
Bonjour,

Je souhaite réaliser un tableau avec Excel 2003 ou les lignes seraient
triées lors du changement de couleur. les lignes en noir au début et
les lignes en rouges à la fin et chacune des 2 couleurs triées
alphabétiquement (première colone).

En faite actuellement mon tableau se tri automatiquement par ordre
alphabétique (sur la première colonne) à chaque nouvelle ligne ajoutée.
grace à un VBA trouvé sur l'excellent site de JB
(http://boisgontierjacques.free.fr/)

Et je souhaiterai que les lignes que je passe en rouge viennent se
mettre à la fin du tableau mais triées également par odre alphabétique
(les noires en haut triées par ordre alphabétique et les rouges en bas
triées par ordre alphabétique)

est-ce jouable ?

Merci.



--
Cordialement,
Gabriel
Avatar
michdenis
Ton fichier en retour.
http://cjoint.com/?bguNBwhqjs

Avec des trucs basés sur la couleur du texte, le même principe
s'applique... si tu modifies le format "couleur" du texte avec
le bouton "couleur texte" de la barre d'outil, cela ne déclenche
aucun événement et les fonctions ne sont pas calculées sauf si
tu appuies sur la touche F9.
dans la fonction, le premier paramètre, c'est la plage de cellules,
le deuxième "Cell" c'est une cellule de référence contenant le
bon format (couleur du texte) que tu veux calculer.



"Gabriel" a écrit dans le message de groupe de discussion :

Bonjour à tous et meilleurs voeux,

http://www.cijoint.fr/cjlink.php?file=cj201001/cijXHNGF5X.xls

Suite à ma question initiale et la réponse de michdenis ci-dessous, que
je remercie de nouveau au passage, j'aimerai ajouter une colonne F avec
des montants (voir fichier joint) et sur le coté du tableau :
- en I3 et I4 avoir le nombre de lignes écrites en noir (ou plutôt
"couleur automatique")et le nombre de lignes en rouge
- en J3 / J4 le montant total (PV HT) des lignes noires et le montant
total des lignes rouges.

J'ai essayé de le faire tout seul avec des VBA trouvés sur internet
mais losrque j'appel la fonction depuis le script de michdenis (avec
"Call ThisWorkbook.mon_script") j'ai l'impression qu'Excel entre en
boucle infini et je suis obligé de le "killer" avec le gestionnaire de
tâches.

De plus ce sera certainement plus propre d'ajouter ces modifications en
parallèle dans le code existant mais je ne sais pas le faire c'est
pourquoi je sollicite votre aide à nouveau.

En plus avec l'ajout d'une colonne je suppose que le script VBA de
michdenis doit être modifié. Selon ce que je comprend je pense qu'il
faut faire les modifications suivantes mais est-ce exacte ? :

Private Sub Worksheet_Change(ByVal Target As Range)
Dim Rg As Range
If Target.Column = 1 And Target.Count = 1 Then
Application.ScreenUpdating = False
Application.EnableEvents = False
nom = Target
Set Rg = Range("H4:H" & Range("A65536").End(xlUp).Row)
Rg.NumberFormat = "General"
Rg.Formula = "=Couleur(" & Rg(1).Offset(, -7). _
Address(0, 0) & ")"
Rg.Value = Rg.Value
With Rg.Offset(, -7).Resize(, 8)
.Sort key1:=.Item(1, 8), order1:=xlAscending, _
Key2:=.Item(1, 1), Order2:=xlAscending
End With
[A:A].Find(what:=nom).Select
Rg = ""
Application.EnableEvents = True
Application.ScreenUpdating = True
End If
End Sub

Merci d'avance pour votre aide précieuse.



Bonjour,

A ) Si tu modifies la couleur d'une cellule en utilisant l'içone
affichant le tableau des couleurs, la procédure
n'est pas déclenchée -> donc pas de mise à jour
tu dois double-cliquer sur une cellule de la colonne A:A
pour provoquer la mise à jour après avoir modifié la
couleur du texte d'une cellule.

B ) ta ligne de formule : =NBVAL(A1:A2)
Tu la places juste en dessous de ta ligne d'étiquettes
ça te permettra d'ajouter toutes les lignes que tu veux
sans venir perturber ta procédure !

Dans le module feuille, tu remplaces ta procédure par celle-ci

Cette procédure de la colonne G:G, donc je suppose
qu'elle est disponible !
'------------------------------------------
Private Sub Worksheet_Change(ByVal Target As Range)
Dim Rg As Range
If Target.Column = 1 And Target.Count = 1 Then
Application.ScreenUpdating = False
Application.EnableEvents = False
nom = Target
Set Rg = Range("G4:G" & Range("A65536").End(xlUp).Row)
Rg.NumberFormat = "General"
Rg.Formula = "=Couleur(" & Rg(1).Offset(, -6). _
Address(0, 0) & ")"
Rg.Value = Rg.Value
With Rg.Offset(, -6).Resize(, 7)
.Sort key1:=.Item(1, 7), order1:=xlAscending, _
Key2:=.Item(1, 1), Order2:=xlAscending
End With
[A:A].Find(what:=nom).Select
Rg = ""
Application.EnableEvents = True
Application.ScreenUpdating = True
End If
End Sub
'------------------------------------------
Dans un module standard, tu copies ceci :
'-------------------------------------------
Function Couleur(Rg As Range)
Couleur = Rg.Font.ColorIndex
End Function
'-------------------------------------------




"Gabriel" a écrit dans le message de groupe de
discussion :
Bonjour,

Je souhaite réaliser un tableau avec Excel 2003 ou les lignes seraient
triées lors du changement de couleur. les lignes en noir au début et
les lignes en rouges à la fin et chacune des 2 couleurs triées
alphabétiquement (première colone).

En faite actuellement mon tableau se tri automatiquement par ordre
alphabétique (sur la première colonne) à chaque nouvelle ligne ajoutée.
grace à un VBA trouvé sur l'excellent site de JB
(http://boisgontierjacques.free.fr/)

Et je souhaiterai que les lignes que je passe en rouge viennent se
mettre à la fin du tableau mais triées également par odre alphabétique
(les noires en haut triées par ordre alphabétique et les rouges en bas
triées par ordre alphabétique)

est-ce jouable ?

Merci.



--
Cordialement,
Gabriel
Avatar
Gabriel
michdenis a formulé ce mercredi :
Ton fichier en retour.
http://cjoint.com/?bguNBwhqjs

Avec des trucs basés sur la couleur du texte, le même principe
s'applique... si tu modifies le format "couleur" du texte avec
le bouton "couleur texte" de la barre d'outil, cela ne déclenche
aucun événement et les fonctions ne sont pas calculées sauf si
tu appuies sur la touche F9.
dans la fonction, le premier paramètre, c'est la plage de cellules,
le deuxième "Cell" c'est une cellule de référence contenant le
bon format (couleur du texte) que tu veux calculer.




Y a rien à dire à part un gros merci et pour paraphraser mon précédent
message merci également à tout ceux qui donnent de leur temps sur les
forum pour aider les plus novices.

à bientôt

--
Cordialement,
Gabriel