Rechercher une donnée plusieurs fois dans une colonne

Cra49

XLDnaute Nouveau
Bonjour à tous,

Une nouvelle fois je sollicite votre aide, qui m'est précieuse =)

Je joint un fichier exemple pour pouvoir illustrer ce que je voudrais obtenir,
En gros,

J'ai un classeur "donnée" qui regroupe un tas de données, dont certaines me sont inutiles. Ces données ne sont pas classées. J'en ai beaucoup beaucoup, et elles sont toujours sur le même onglet de ce classeur (appelons le "catalogue")

J'ai un autre classeur, "TriageDesDonnées" sur lequel je voudrais pouvoir récapituler les informations qui m'interresse.
Pour cela, je voudrais rechercher dans la colonne "Functionnal Location" du classeur "donnée" toutes les lignes contenant par exemple la donnée "HUS2";
Dès que je trouve cette valeur, je copie la case description et la case intervention correspondant à cette ligne de mon classeur "donnée" vers mon classeur "TriageDesDonnées", onglet "synthèse", puis je recherche la prochaine valeur "HUS2" et ainsi de suite.

Sur le classeur "Triage de données", j'ai mis 2 exemples de ce que je voudrais obtenir, l'un au plus simple je pense, le second ca serait le must du must =)

L'idéal en gros serait que le nombre de ligne de mon tableau récapitulatif "synthèse" s'adapte au nombre de ligne nécessaire pour remplir ce tableau (exemple : HUS 2 : 3 lignes, HUS3 : 4 lignes puis le jour suivant HUS2 2 lignes, HUS 3 9 lignes ...)

Cette synthèse serait une synthèse que je réaliserais toutes les semaines/ voir tous les jours, d'où un tableau qui s'adapte

J'espère être à peu près claire,

Merci d'avance pour votre aide !

Coraline

PS : Petite précision : mes deux classeurs seront toujours ouverts en même temps, ca peut peut-être être utile de la préciser =)
 

Pièces jointes

  • TriageDesDonnées.xlsx
    11.7 KB · Affichages: 42
  • Données.xlsx
    8.6 KB · Affichages: 67
  • TriageDesDonnées.xlsx
    11.7 KB · Affichages: 40
  • Données.xlsx
    8.6 KB · Affichages: 40
  • TriageDesDonnées.xlsx
    11.7 KB · Affichages: 51
  • Données.xlsx
    8.6 KB · Affichages: 37

Modeste

XLDnaute Barbatruc
Re : Rechercher une donnée plusieurs fois dans une colonne

Bonjour Coraline,

Il y a sans doute des choses qui te paraissent évidentes ... mais qui le sont beaucoup moins pour ceux qui te lisent, sans connaître tes fichiers, ton boulot, etc.
Pourrais-tu prendre une dizaine de minutes pour préciser certains points:
...
  • Quelles sont les données qu'il faudrait synthétiser? Précisément les 4 que tu as listées dans ton "triage de données" et uniquement ces quatre-là?
  • Comment reconnaître "H2" dans, par exemple, "03-HUS2-ffff" :confused: S'il y a des constantes ou des règles qui président à la création des "références" ... il faut les indiquer
  • Quel seraient les volumes à traiter? Dans le fichier "Données", 300 lignes ou 60.000? Et dans le second fichier?
Il y a sans doute d'autres questions qui surviendront par la suite, mais il serait utile que tu commences par "baliser" un peu le terrain :)
 
Dernière édition:

Cra49

XLDnaute Nouveau
Re : Rechercher une donnée plusieurs fois dans une colonne

Bonjour Modeste, le Forum,

Effectivement c'est ptet pas très claire, rien que décrire le pb n'était pas très facile ^^

Alors, dans le vrai classeur donnée (classeur source) je voudrais retrouver environ 30 références (j'ai simplifié avec 4 ici). Les références ont toujours une unique abbréviation dans le classeur source, colonne "functionnal location", mais cette abbréviation est dans des "phrases" qui varient. Exemple pour ma machine HUS2, on trouvera dans le classeur source cette abbréviation sous forme 033-HUS2 mais aussi 033-HUS2-sup1 ou encore 033-HUS2-sup2-sup3,... (je viens d'essayer d'illustrer sur le classeur donnée avec un jeu de couleur)

J'ai modifier mon classeur "triagedesdonnées" pour faire apparaitre HUS2 au lieu de H2 dans la synthèse (ce qui simplifie peut être la recherche). Donc dans mon fichier triage de données, je voudrais regrouper toutes les infos du classeur "donnée" contenant l'abbréviation "HUS2" dans la colonne "functionnal location"

Le volume à traiter ... très bonne question, j'en ai pour l'instant aucune idée, vu que le logiciel est tout nouveau je n'ai pas eu le tps de tester, je dirai à peu près 1 000 informations pour le fichier "données"... mais je pensais utiliser le code permettant d'aller jusqu'à a dernière ligne écrite pour traiter tout le tableau.
Pour le classeur "triagede données" je dois avoir environ 1000 informations à traiter

J'espère être un peu plus claire :s Mais je me rend compte que c'est complexe à expliquer :s
 

Pièces jointes

  • TriageDesDonnées.xlsx
    13.1 KB · Affichages: 28
  • Données.xlsx
    13.7 KB · Affichages: 43
  • TriageDesDonnées.xlsx
    13.1 KB · Affichages: 32
  • Données.xlsx
    13.7 KB · Affichages: 34
  • TriageDesDonnées.xlsx
    13.1 KB · Affichages: 22
  • Données.xlsx
    13.7 KB · Affichages: 26

Modeste

XLDnaute Barbatruc
Re : Rechercher une donnée plusieurs fois dans une colonne

Re-bonjour,

Comme tu n'avais pas répondu à cette question, j'ai considéré que tu déterminais toi-même la liste des machines à retrouver. Pour aboutir à la présentation que tu qualifiais de "must", j'ai mis cette liste des machines en feuille "Synthèse", colonne K, de ton fichier "TriageDesDonnées".
Les résultats (si je ne me suis pas trompé!) apparaissent en colonnes A, B et C de cette même feuille.

... Tu nous diras ...
 

Pièces jointes

  • TriageDesDonnées.xlsm
    22.3 KB · Affichages: 32

Cra49

XLDnaute Nouveau
Re : Rechercher une donnée plusieurs fois dans une colonne

Re Modeste, re le forum,

ça a effectivement l'air de fonctionner nickel, mais je ne comprend pas le code, pourrais tu me l'expliquer ? Je pourrais ainsi l'adapter à mes vrais fichiers.

Code:
Sub créerListe()
    Set src = Workbooks("Données.xlsx").Sheets("Données") 'si classeur toujours ouvert -- Classeur source
    Set dest = ThisWorkbook.Sheets("Synthèse") 'déclaration du classeur destination
    Set listeMachines = CreateObject("scripting.dictionary") 'Qu'est ce que ce "scripting.dictionary ???
    ligne = 2 ' ???

    dest.Cells(2, 1).Resize(dest.[A1].CurrentRegion.Rows.Count, 3).ClearContents ' Je ne connais pas non plus ceci :s
    For machine = 2 To dest.[K5000].End(xlUp).Row ' Je ne comprend pas cette boucle
        listeMachines(dest.Cells(machine, 11).Value) = ""
    Next machine

    For lig = 2 To src.Cells(src.Rows.Count, 4).End(xlUp).Row 'Idem :s je ne connais pas cette expression
        For Each k In listeMachines.keys
            If InStr(1, src.Cells(lig, 4), k, 1) > 0 Then listeMachines(k) = listeMachines(k) & lig & "#": Exit For 'Idem
        Next k
    Next lig

    For Each k In listeMachines.keys 'Idem, traduction ?
        first = True
        lesLignes = Split(listeMachines(k), "#")
        For x = 0 To UBound(lesLignes) - 1
            If first Then dest.Cells(ligne, 1) = k: first = False
            dest.Cells(ligne, 2) = src.Cells(lesLignes(x), 3)
            dest.Cells(ligne, 3) = src.Cells(lesLignes(x), 5)
            ligne = ligne + 1
        Next x
        ligne = ligne + 1
    Next k

End Sub

Bon je me rends compte que je ne comprend pas du tout ce code :s et question peut-être bête, mais pourquoi on ne fait pas de déclaration de variable en début (pour ligne,leslignes,x, k,...)?
 

Modeste

XLDnaute Barbatruc
Re : Rechercher une donnée plusieurs fois dans une colonne

Salut Coraline,

Avant de voir que tu avais glissé des questions dans le code lui-même, j'avais préparé la réponse ci-dessous. Pour ce qui est de l'obet Dictionary, consulte l'aide, en plus de mes quelques explications.
En ce qui concerne la déclaration des variables, certains ne manqueront pas de te dire que je m'en abstiens, parce que je suis un jeune homme indiscipliné et un peu fainéant (il y a une contre-vérité dans l'affirmation qui précède!)
Voici ma réponse initiale:

J'utilise un objet de type "Dictionary". Chaque clé (key) correspond au nom d'une machine renseignée en colonne K. Dans un premier temps, la valeur (Item) pour chaque clé est une chaîne de texte vide.

Je parcours ensuite toutes les valeurs de la colonne D du fichier "Données" et, pour chaque valeur, si le nom d'une des machines y figure, je stocke le numéro de la ligne suivie du caractère '#', comme élément de donnée pour l'entrée correspondante dans le dico.
Lorsque cette partie du code achève son exécution, j'ai donc un dico, avec autant de clés qu'il y a de machines différentes en colonne K de la feuille "Triage" et, pour chaque clé, la liste des n° de lignes, en feuille Données" où le nom de cette machine est trouvé.

La dernière boucle inscrit en colonne A (à partir de la ligne 2) le nom de la machine, chaque fois qu'on passe à une nouvelle clé du dico. Pour les items, le 'Split' permet de convertir la chaîne représentant les n° de lignes et stockée sous la forme "3#7#11#12#" en un petit tableau (dont le dernier élément sera vide).
Ne reste plus alors qu'à "coller" les valeurs renseignées dans chacune des lignes de ta feuille "Triage", les unes en-dessous des autres (en ajoutant une ligne vide avant de passer à la clé suivante du dico).

N'hésite pas à le dire si quelque chose n'est pas clair!


Attention: je ne prétends en aucun cas que ce code soit le plus performant: je suis parti sur une idée qui me semblait "viable" et qui fonctionne sur base de ton exemple. Il est tout à fait possible (voire même plus que probable! :p) qu'on puisse optimiser la chose.

Note de la rédaction: il serait utile (surtout si le volume à traiter est plus conséquent) d'ajouter, au début du code, un 'Application.ScreenUpdating=False' et, après la dernière boucle: 'Application.ScreenUpdating=True'
 
Dernière édition:

Jacou

XLDnaute Impliqué
Re : Rechercher une donnée plusieurs fois dans une colonne

bonsoir le forum,
petite erreur de frappe de Modeste, il s'agit des instructions Application.ScreenUpdating=False et Application.ScreenUpdating=true
Bonne soirée à tous
 

JCGL

XLDnaute Barbatruc
Re : Rechercher une donnée plusieurs fois dans une colonne

Bonjour à tous,

N'apporte rien à la discussion

Tant que tu es dans la correction...

Notre amie se prénomme Coraline :D

A++ mon ami et bises chez toi

A+ à tous
 

Modeste

XLDnaute Barbatruc
Re : Rechercher une donnée plusieurs fois dans une colonne

Re,
Salut mon JC (c'est facile de se moquer des petits avec des lunettes ;))

Notre amie se prénomme Coraline :D
Ah mias cette fios, ce sont les veyolles de mon claveir qiu s'envirsent

Vous ne me croyez pas!?
Bon ben il ne me reste plus qu'à relire tous mes messages depuis mars 2008! ... et à me traîner à genoux devant Coraline, en implorant son pardon! Et puis pardon aussi à tous ceux et toutes celles dont j'ai pu écorcher le nom, pardon pour les fichiers oubliés, pour les 'r' manquants dans 'Screen', pour les demandes mal comprises, pour les solutions inadaptées, pour les âneries diverses ... et j'en passe :rolleyes:

[Edit:] don't worry, Jean-Claude, c'est pas demain la veille que j'en prendrai ombrage (sinon, on finit avec un cancer ou un truc comme ça! :rolleyes:)
 
Dernière édition:

JCGL

XLDnaute Barbatruc
Re : Rechercher une donnée plusieurs fois dans une colonne

Bonjour à tous,

Puisses-tu encore longtemps nous permettre de se moquer, gentiment, de tes étourderies dues à la précipitation d'aider les âmes désespérées d'XLD...

A++ mon Luc
 

Cra49

XLDnaute Nouveau
Re : Rechercher une donnée plusieurs fois dans une colonne

Bonjour à tous,

Vu toute l'aide et toutes les explications apportées, tu es amplement pardonné pour ce changement de place de voyelle ^^ =)
Encore merci, j'ai compris tes explications, plus qu'à voir si je suis capable de les interpréter pour mon fichier ! (je n'ai pas pu essayer aujourd'hui :( )

Merci à tous !

Bonne soirée =)

cOrAline ^^

PS : je connais ce problème de caractères restant dans le clavier -_-'
 

Cra49

XLDnaute Nouveau
Re : Rechercher une donnée plusieurs fois dans une colonne

Re,

Je viens d'essayer avec des nouveaux "faux" fichiers ... j'ai un bug dans le code :( J'ai juste changé le nom du classeur "src" en "classeur1", le fichier est ouvert, mais ça me met "erreur d'exécution '9' : L'indice n'appartient pas à la selection"
Je vous met en image la zone surlignée dans le code, si ça peut aider -_-'

Merci =)

Coraline
 

Pièces jointes

  • Image1.jpg
    Image1.jpg
    54.5 KB · Affichages: 30
  • Image1.jpg
    Image1.jpg
    54.5 KB · Affichages: 38
  • Image1.jpg
    Image1.jpg
    54.5 KB · Affichages: 35

Modeste

XLDnaute Barbatruc
Re : Rechercher une donnée plusieurs fois dans une colonne

Bonsoir Coraline (z'avez vu, même pas trompé ;))

À distance et sur une image, ça va être compliqué!
L'extension est bien '.xls' et pas '.xlsx'? Tu as bien aussi, dans ce "classeur1" une feuille qui se nomme précisément "Feuil1"?
 

Discussions similaires

Statistiques des forums

Discussions
312 321
Messages
2 087 266
Membres
103 501
dernier inscrit
talebafia