Filtre ou fonction excel

Fermé
jeremy - 5 sept. 2006 à 14:11
Gallygun Messages postés 5 Date d'inscription mercredi 11 juin 2008 Statut Membre Dernière intervention 12 juin 2008 - 12 juin 2008 à 08:41
Bonjour,
je cherche de l'aide sur une fonction ou un filtre ou autre qui pourrait réaliser une action très utile à mon travail.

je possède un fichier excel contenant plusieurs onglets et j'aimerai selectionner (ou retranscrire sur une nouvelle feuille excel) des lignes qui possèdent une particularité (cad à partir de la 2eme colonne jusqu'à la dernière, toutes les données dans les cellules sont en couleur bleu).

Resumé : j'aimerai donc selectionner toutes les lignes ecrites en police bleue des onglets formant mon fichier excel.

Merci d'avance pour la réponse.
Jeremy.
A voir également:

16 réponses

Kobaya Messages postés 282 Date d'inscription vendredi 28 mai 2004 Statut Membre Dernière intervention 10 janvier 2008 214
5 sept. 2006 à 17:02
bonjour jeremy,

Je te soumets ce code. Avant de la faire tourner assure-toi que la couleur bleue que j'ai utilisé comme référence est bien celle que tu recherches. Dans la fenêtre Exécution du VBE, exécute cette commande : ?activecell.Font.Color. Si c'est 16711680, c'est OK, sinon il faudra remplacer vbBlue par la valeur que tu auras ainsi obtenue.
Sub Bilan()
    Dim rngPlage        As Range
    Dim blnCouleur      As Boolean
    Dim intColonne      As Integer
    Dim lngLigneFin     As Long
    Dim lngIndex        As Long
    Dim lngIndexCopie   As Long
    Dim wshFeuille      As Worksheet
    Dim wshBilan        As Worksheet
    
    ' création de l'onglet Bilan où seront recopiées les lignes répondant à la condition (texte en bleu)
    Set wshBilan = Sheets.Add
    wshBilan.Name = "Bilan"
    
    ' parcourir toutes les feuilles (sauf Bilan)
    lngIndexCopie = 1               ' 1ere ligne où copier les données dans la feuille Bilan
    For Each wshFeuille In Sheets
        wshFeuille.Select
        If wshFeuille.Name <> "Bilan" Then
            Set rngPlage = wshFeuille.Range("A1:" & wshFeuille.Cells.SpecialCells(xlCellTypeLastCell).Address)
            ' nombre de lignes utilisées dans la feuille
            lngLigneFin = rngPlage.Rows.Count
            For lngIndex = 1 To lngLigneFin
                ' par défaut on considère que le texte est en bleu
                blnCouleur = True
                For intColonne = 2 To 256
                    If wshFeuille.Cells(lngIndex, intColonne).Font.Color <> vbBlue Then
                        ' si le texte de la colonne intColonne n'est pas en bleu
                        blnCouleur = False
                    End If
                Next
                ' si toute la ligne a le texte en bleu
                If blnCouleur Then
                    ' la copier dans la feuille Bilan
                    wshFeuille.Cells(lngIndex, 1).EntireRow.Copy Destination:=wshBilan.Cells(lngIndexCopie, 1)
                    lngIndexCopie = lngIndexCopie + 1
                End If
            Next
        End If
    Next
    Application.CutCopyMode = False
    
    wshBilan.Select
    Set rngPlage = Nothing: Set wshFeuille = Nothing: Set wshBilan = Nothing
End Sub

1
Merci beaucoup kobaya,
cela fonctionne très bien et tes explications etaient très claires.


Encore mille merci, je vais m'eviter des heures de boulot supplémentaires.

Jeremy.
0
Kobaya Messages postés 282 Date d'inscription vendredi 28 mai 2004 Statut Membre Dernière intervention 10 janvier 2008 214
8 sept. 2006 à 23:13
content de t'avoir rendu service.
:-)
0
Bonjour,

J'ai un fichier Excel avec plusieurs onglets, je voudrais pouvoir réaliser un filtre sur les données des différentes feuilles ou onglets. Chaque onglet contient un tableau identique avec des données parfois identiques, le but est de comptabilser le tout dans un tableau unique. J'ai environ 150 onglets donc je voudrais éviter de tout me faire à la main, d'après vous est-ce possible ?

Par avance merci de vos réponses.

Sumacnaj
0
J'ai utilisé le code donné par Kobaya le 8 septembre 2006 pour copier dans un onglet nommé bilan les enregistrements d'une base de données Excel écrits en bleu.

Cela fonctionne partiellement. La feuille bilan est créée. La dernière ligne de la feuille active est bien trouvée mais en réponse dans bilan, il manque des lignes qui sont colorées en bleu dans la feuille active. Je ne comprends pas pourquoi les derniers enregistrements ne sont pas pris en compte. Kobaya peut-il me répondre ?

J'ai copié le code que j'ai utilisé.

Sub Bilan()
Dim rngPlage As Range
Dim blnCouleur As Boolean
Dim intColonne As Integer
Dim lngLigneFin As Long
Dim lngIndex As Long
Dim lngIndexCopie As Long
Dim wshFeuille As Worksheet
Dim wshBilan As Worksheet

' création de l'onglet Bilan où seront recopiées les lignes répondant à la condition (texte en bleu)
Set wshBilan = Sheets.Add
wshBilan.Name = "Bilan"

' parcourir toutes les feuilles (sauf Bilan)
lngIndexCopie = 1 ' 1ere ligne où copier les données dans la feuille Bilan
For Each wshFeuille In Sheets
wshFeuille.Select
If wshFeuille.Name <> "Bilan" Then
Set rngPlage = wshFeuille.Range("A1:" & wshFeuille.Cells.SpecialCells(xlCellTypeLastCell).Address)
' nombre de lignes utilisées dans la feuille
lngLigneFin = rngPlage.Rows.Count
For lngIndex = 1 To lngLigneFin
' par défaut on considère que le texte est en bleu
blnCouleur = True
For intColonne = 2 To 256
If wshFeuille.Cells(lngIndex, intColonne).Font.Color <> vbBlue Then
' si le texte de la colonne intColonne n'est pas en bleu
blnCouleur = False
End If
Next
' si toute la ligne a le texte en bleu
If blnCouleur Then
' la copier dans la feuille Bilan
wshFeuille.Cells(lngIndex, 1).EntireRow.Copy Destination:=wshBilan.Cells(lngIndexCopie, 1)
lngIndexCopie = lngIndexCopie + 1
End If
Next
End If
Next
Application.CutCopyMode = False

wshBilan.Select
Set rngPlage = Nothing: Set wshFeuille = Nothing: Set wshBilan = Nothing
End Sub
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
eriiic Messages postés 24603 Date d'inscription mardi 11 septembre 2007 Statut Contributeur Dernière intervention 15 décembre 2024 7 247
15 janv. 2008 à 19:43
Bonsoir,

es-tu sûr à 100% que ce soit le même bleu ?
de plus il contrôle que toute la ligne (à part la 1ère cellule) soit en bleu
eric
0
Tout d'abord, merci pour le message.

Oui, j'ai vérifié, il s'agit bien du même bleu car j'obtiens la même valeur dans la fenêtre exécution du VBE à savoir 16711680. La seule différence avec la question de Jérémy, c'est que je n'ai qu'un onglet dans mon classeur, mais je ne pense pas que ce soit la raison.

Au cours de l'éxécution du code, la dernière cellule de la plage est trouvée, mais en fin d'exécution, c'est le contenu d'une cellule située 68 lignes au-dessus qui est inscrit dans la zone d'édition d'Excel. Peux-tu me trouver la solution ?
0
eriiic Messages postés 24603 Date d'inscription mardi 11 septembre 2007 Statut Contributeur Dernière intervention 15 décembre 2024 7 247
16 janv. 2008 à 11:02
Bonjour,

Difficile de dire pourquoi ça bugue sans ta feuille avec le code...
Si tu pouvais la déposer sur www.cijoint.fr et coller le lien ici.
eric
0
Je continue à essayer de comprendre. J'ai mis plusieurs onglets dans mon classeur. J'ai recommencé plusieurs fois le code. Tous les enregistrements ne sont pas copiés. Sur un échantillon de 28 lignes, il me manque 3 enregistrements dans bilan, 4ème, 21 ème et 27ème ligne. Je désespère !!
0
Après avoir recommencé le code et en vérifiant ceux qui ne sortaient pas, j'ai constaté que toute la ligne n'était pas colorée pour certains. Ceci explique tout et je te remercie. Ton aide a été précieuse. Pourrais-tu me dire s'il est possible de rectifier le code pour que le test ne se fasse que sur les cellules de la première colonne ? Cela m'éviterait de me coltiner un travail de titan pour vérifier que toutes les lignes en bleu soient entièrement colorées. Mon fichier de base fait 36000 lignes !!

http://www.cijoint.fr/cij11829823931558.xls
0
eriiic Messages postés 24603 Date d'inscription mardi 11 septembre 2007 Statut Contributeur Dernière intervention 15 décembre 2024 7 247
16 janv. 2008 à 14:54
le pb était donc bien sur la feuille.
dans
For intColonne = 2 To 256 
(pour les colonnes de 2 à 256...)
remplace 256 par le n° de la dernière colonne que tu souhaites tester.

eric
0
C'est ce que j'ai fait en attendant une réponse. Je suis complètement débutante en VBE mais j'ai fait de la programmation dans mon jeune temps et je connais bien Excel. Malheureusement, le résultat obtenu est le même. C'est comme si Excel reconnaissait un code pour la coloration du rang d'un seul coup ( position à l'extrême gauche de la souris pour sélectionner le rang) et un autre pour la coloration d'une plage d'un rang même si toutes les cellules de la plage sont colorées.

Ce n'est que si tout le rang est coloré que le code fontionne. Essaie sur le fichier échantillon que j'ai adressé et dis-moi si tu trouves pareil.

Cordialement,
Ménilmuche
0
eriiic Messages postés 24603 Date d'inscription mardi 11 septembre 2007 Statut Contributeur Dernière intervention 15 décembre 2024 7 247
16 janv. 2008 à 15:49
Je viens de regarder ton fichier.
Les lignes 18 et 24 sont absentes du bilan en effet.
Mais si tu regardes la couleur de police pour B18 et D24 tu peux voir qu'elle est sur 'automatique'.

Fais plus simple et contrôle la 1ère colonne uniquement, je suppose qu'elle doit tjs être remplie, que si celle ci est bleue lautres cellules de la ligne sont supossées l'être aussi. Et tu peux voir la couleur.
Donc:
For intColonne = 1 To 1
(pour garder la structure de boucle au cas ou ça reserve...)

eric
0
Un immense MERCI !!!

Ça fonctionne super bien ! J'ai même pu reconstituer un autre code pour sélectionner les enregistrements d'une autre couleur dans un autre onglet nommé autrement que bilan. Super !!

Ça fait du bien d'être aidée, je me sens moins seule, j'ai souvent passé des heures devant mon ordi pour avancer.

Cela me donne envie d'approfondir le VBE. Merci Éric !!

Cordialement,
Ménilmuche
0
eriiic Messages postés 24603 Date d'inscription mardi 11 septembre 2007 Statut Contributeur Dernière intervention 15 décembre 2024 7 247
16 janv. 2008 à 17:43
De rien
Au fait c'est VBA hein... ;-)
Bonne soirée
0
amenoo Messages postés 1 Date d'inscription mercredi 30 avril 2008 Statut Membre Dernière intervention 30 avril 2008
30 avril 2008 à 14:52
Bonjour,

Je vous explique mon problème... Je suis un débutant sur excel, j'aimerai savoir comment dois je faire pour créer une feuille Bilan sur laquelle les informations d'une cellule particulière par exemple (comme la cellule F53 dans mon cas) sont retranscrit automatiquement dans la feuille bilan. mais ceci doit etre appliquer à toutes les feuilles de mon classeur.

merci d'avance de consacrer un peu de votre temps sur mon problème

Amenoo
0
Gallygun Messages postés 5 Date d'inscription mercredi 11 juin 2008 Statut Membre Dernière intervention 12 juin 2008
11 juin 2008 à 11:22
Bonjour a tous,

je viens juste de me mettre a excel et j'ai un petit soucis..
je dispose d'un bareme de materiel a vendre sur une feuille et d'une feuille de chiffrage destinée au client sur une autre feuille. Je souhaiterais inserer dans ma feuille chiffrage les lignes de la feuille bareme dont la colonne "quantité" est superieur a 0.
mon probleme est donc le meme que Jeremy mais 2 choses differe:
_ je veux filtrer des quantités, a savoir tout ce qui est superieur a 0.
_ ensuite inserer ces données dans un tableau deja creer, la section du tableau dans la quelle je veux inserer comporte une suite a ne pas modifier, d'ou l'utilité de l'insertion.

Comme je debute completement, j'ai juste a peu pres compris comment fonctionne le code de kobaya mais je ne sais pas comment le modifier. Je me doute ayant quelques notion tres petites de C++ qu'il faudra supprimer la definition des variables concernant les couleurs mais je ne sais pas par quoi les remplacer,etc...

enfin bref, je suis completement impuissant donc un peu d'aide serait la bienvenue

merci d'avance a tous
0
eriiic Messages postés 24603 Date d'inscription mardi 11 septembre 2007 Statut Contributeur Dernière intervention 15 décembre 2024 7 247
11 juin 2008 à 14:18
Bonjour,

Crée ta propre discusion si tu veux que le maximum de personne puisse répondre.
Ton besoin est assez éloigné de celui de jeremy et ne nécessite peut-être pas l'emploi de vba.
Le mieux est de faire un fichier exemple et le déposer sur cijoint.fr et coller dans ta nouvelle discussion le lien fourni.
eric
0
Gallygun Messages postés 5 Date d'inscription mercredi 11 juin 2008 Statut Membre Dernière intervention 12 juin 2008
12 juin 2008 à 08:41
Tu as raison, donc je viens de creer le sujet!!
Titre: Filtre et copie de ligne sur excel
le fichier exemple y est joint.

Merci
0