RECHERCHE V avec deux valeurs identiques à chercher et à rapatrier dans plusieurs colonnes

Alexis L

XLDnaute Nouveau
Bonjour,

Je cherche à rapatrier plusieurs informations d'une BDD, sur un nouvel onglet du même fichier excel.
Je dois donc utiliser la recherche V.
La problématique est que pour ma valeur cherchée (seule clé d'entrée communes entre les différents fichier) correspond à 5/6 ou 7 lignes dans la BDD. Lorsque je l'effectue naturellement elle me rapatrie qu'une seule ligne or je voudrais l'ensemble des lignes dans les colonnes que j'ai prévu à cet effet.

J'aimerais que les informations recherchés dans la BDD apparaissent de la plus récente à la plus ancienne.
(Ex : C&D : 2018 ; E&F 2017...)

Vous allez certainement me dire de faire simplement un TCD mais cela n'est pas possible car je veux faire une macro ensuite.

Je vous joins le fichier, dans le premier onglet se trouve la BDD, dans le second, les informations que je voudrais rapatrier (je viens enrichir la colonne A en faisant un copié/collé d'un fichier extérieur)

Quelle formule faut-il utiliser?

D'avance merci pour votre aide

Ps: Désolé si je n'ai pas été très clair
 

Pièces jointes

  • Excel test macro debrief.xlsx
    13.2 KB · Affichages: 25

Dranreb

XLDnaute Barbatruc
Si un simple classement par les moyens d'Excel n'est pas suffisant, ou que la présentation souhaitée est plus sophistiquée que ce qu'il permet, on peut utiliser la fonction Gigogne, en précisant les numéros de colonnes successifs derrière la plage source spécifiée en premier (au moins sa 1ère ligne.). La Fonction s'exécute en l'invoquant, soit en affectant par un Set sa valeur à une variable As Collection soit directement dans le 1er For Each SsGrDeNiveauGlobal In Gigogne(etc.
 

Dranreb

XLDnaute Barbatruc
Bonjour.
Je joins ici un classeur d'aide à la mise au point d'une expression utilisant la fonction Gigogne.
Je joins aussi une nouvelle version du classeur précurseur de complément GigIdx, parce que sa mise au point a fait apparaitre quelque bogues et insuffisances dans la gestion du ParamArray ColOrd, lorsqu'on a besoin de le transmettre en aveugle du fait qu'il est variable.
 

Pièces jointes

  • AuditGigogne.xlsm
    200.6 KB · Affichages: 18
  • GigIdx.xlsm
    83.5 KB · Affichages: 19

Alexis L

XLDnaute Nouveau
Re-bonjour Dranreb,

En fait, je me permets, ce qu'il faudrait dans la feuille d'aide Gigogne c'est des impressions écran afin de visualiser, où , les modifs doivent être faites. Après j'imagine que le public cible n'est pas novice comme moi, bref, encore merci pour votre patience, personnellement j'aurais déjà jeé l'éponge!

Ce que j'ai compris, une fois le module complémentaire installé, je dois créer un nouveau module d'objet et y insérer mes variables ( définir les SsGR avec ID, CO...). Ensuite, quelques points d'ombres persistants :

- Je dois insérer ces paramétrages dans ce module d'objet : ?

upload_2018-8-29_18-36-17.png



- Concernant l’exécution, j'ai bien compris qu'on ne l’exécutait pas comme une macro, et qu'elle s'invoquer à l’ouverture de la feuille. Cependant, il me faudrait, un bouton sur la feuille "attendu" pour permette d'appliquer la procédure, car la liste d'EAN (colonne A) à vocation à être modifié.

Je souhaite avoir les informations une en dessous les autres, comme vous me l'aviez suggéré :

EAN
Nom du prospectus (colonne 4)
Mécanique ( colonne 82) / Montant de la mécanique ( Colonne 83) --> si possible concaténer la mécanique & son montant
Volume global (55)
Volume XP (100)
Volume CT (101)
Volume SM(102)
Volume HM(103)
CA (54)
Taux de destruction (57)

Merci
 

Pièces jointes

  • upload_2018-8-29_18-36-9.png
    upload_2018-8-29_18-36-9.png
    12.8 KB · Affichages: 29
Dernière édition:

Dranreb

XLDnaute Barbatruc
La fonction Gigogne est surtout pratique pour sortir tout. Tous les Ean existants. On est très mal à l'aise s'il faut filtrer sur une partie seulement.
Edition: À moins d'utiliser un auxiliaire du module MTableaux: la fonction TableUnique. Il est alors possible de fusionner la table des Ean désirés avec le tableau de la base de façon à ne reproduire que ceux qui figurent dans celle ci. Mais il vaudrait mieux trouver un critère général du genre ne sortir que les Ean qui totalisent une certaine valeur minimale dans une certaine colonne.
Ce ne sont pas bien entendu des infos de natures différentes qu'il faudrait mettre les unes en dessous des autres mais les infos de mêmes natures, et ce au lieu de les disperser dans de nombreux jeux de colonnes identiques. Il faudrait donc en plus, me semble-t-il, une colonne Année ?
Mais j'ai l'impression qu'on n'arrivera pas à sortir beaucoup mieux qu'en classant simplement la bdd sur la colonne 1, puis sur l'année ? Puis sur le prospectus ? … quitte à mettre une mise en forme conditionnelle qui n'affiche pas les Ean identiques à ceux de la ligne au dessus, et efface la bordure supérieure, et en masquant les colonnes autres que celles désirées.
 
Dernière édition:

Alexis L

XLDnaute Nouveau
Un assistanat à distance présente ses limites, malgré vos explications, je nage encore.
Je pense qu'il faut déjà avoir fait quelques manips, pour pouvoir réaliser cela.
J'essaierai de comprendre en regardant le résultat.
Si vous avez la possibilité, s'il vous plaît, d'opérer la modification pour moi ça serai chouette et très gentil !
 

Dranreb

XLDnaute Barbatruc
Donc vous tenez à cette liste qui restreint les Ean à sortir, il n'y a pas d'autre critère possible ? Et l'ordre de classement Ean, Année, Prospectus, c'est bon ?
Vous voulez tout le détail ? Pourquoi un simple classement de la bdd sur ces 3 colonnes ne convient pas ?
 

Alexis L

XLDnaute Nouveau
La liste d'EAN de la feuille 2 vont constamment changer et j'ai besoin du détail de chaque année donc à prioiri un simple classement dans la bdd, ne ferai pas l'affaire.
Pour le classement, j'aimerais que ça soit un tableau qui ressemble plus ou moins à cela :





EAN
Année 2017
NOM Prospectus Janvier 1
Mevanique AC 30
Volume global 11 000
Volume XP 2000
Volume CT 3000
Volume SM 3500
Volume HM 2500​
CA 52000
Taux de destruction 80%​










 

Dranreb

XLDnaute Barbatruc
Non je ne comprends pas. En tout cas ceci sort quelque chose :
VB:
Sub X()
Dim TRés(1 To 20000, 1 To 12), L As Long, C As Long, EAN As SsGr, Année As SsGr, Détail
For C = 1 To 12: TRés(1, C) = Choose(C, "EAN", "Année", "Prospectus", "Mécanique", "Montant", _
   "Vol global", "Vol XP", "Vol CT", "Vol SM", "Vol HM", "CA", "Taux destr"): Next C
L = L + 1
For Each EAN In Gigogne(Feuil1.[A2:CY2], 1, -3, Null, 4)
   TRés(L + 1, 1) = EAN.Id
   For Each Année In EAN.Co
      TRés(L + 1, 2) = Année.Id
      For Each Détail In Année.Co
         L = L + 1
         For C = 3 To 12
            TRés(L, C) = Détail(Choose(C - 2, 4, 82, 83, 55, 100, 101, 102, 103, 54, 57))
            Next C, Détail, Année, EAN
Feuil2.[C9].Resize(20000, 12).Value = TRés
End Sub
'EAN
'Nom du prospectus (colonne 4)
'Mécanique ( colonne 82) / Montant de la mécanique ( Colonne 83) --> si possible concaténer la mécanique & son montant
'Volume global (55)
'Volume XP(100)
'Volume CT(101)
'Volume SM(102)
'Volume HM(103)
'CA (54)
'Taux de destruction (57)
 

Dranreb

XLDnaute Barbatruc
Si vous tenez à restreindre le résultat aux EAN spécifiés dans la liste :
VB:
Sub X()
Dim TEAN(), DicEAN As New Dictionary
Dim TRés(1 To 20000, 1 To 12), L As Long, C As Long, EAN As SsGr, Année As SsGr, Détail
TEAN = Feuil2.[A7].Resize(Feuil2.[A1000].End(xlUp).Row - 6).Value
For L = 1 To UBound(TEAN, 1): DicEAN(TEAN(L, 1)) = Empty: Next L
L = 1
For C = 1 To 12: TRés(1, C) = Choose(C, "EAN", "Année", "Prospectus", "Mécanique", "Montant", _
   "Vol global", "Vol XP", "Vol CT", "Vol SM", "Vol HM", "CA", "Taux destr"): Next C
For Each EAN In Gigogne(Feuil1.[A2:CY2], 1, -3, Null, 4)
   If DicEAN.Exists(EAN.Id) Then
      TRés(L + 1, 1) = EAN.Id
      For Each Année In EAN.Co
         TRés(L + 1, 2) = Année.Id
         For Each Détail In Année.Co
            L = L + 1
            For C = 3 To 12
               TRés(L, C) = Détail(Choose(C - 2, 4, 82, 83, 55, 100, 101, 102, 103, 54, 57))
               Next C, Détail, Année: End If
   Next EAN
Feuil2.[C9].Resize(20000, 12).Value = TRés
End Sub
Activez la référence Microsoft Scripting Runtime.
 

Alexis L

XLDnaute Nouveau
Bon vous risquez vraiment de me prendre pour un incapable... En tous pour la énième fois, merci!

J'ai bien activé la référence Microsoft Scripting Runtime, j'ai un doute, sur où dois-je insérer le code, dans un module objet comme ci-dessous, ou dans les fenêtres de la feuil 2 ou thisworkboot?

upload_2018-8-30_10-12-51.png


Ensuite comment j’exécute?


Merci
 

Dranreb

XLDnaute Barbatruc
Vous l'avez mis dans Module1, apparemment, c'est bien, c'est un module standard, non un module objet.
Vous pouvez l'affecter un un contrôle de formulaire dans la feuille où vous voulez pouvoir le lancer, bouton, image, ce que vous voulez, vous pouvez même en faire une commande personnalisée du ruban ou de la barre de lancement rapide.
Attention, j'ai des doutes quant à la référence GigIdx. Est-elle bien cochée ?
 

Alexis L

XLDnaute Nouveau
Bonjour,


C'est génial ça fonctionne sur la première BDD, encore une petite question de novice, mais qui cette fois devrait se résoudre rapidement :

upload_2018-8-31_14-23-48.png



Je souhaite adapter la formule à une autre BDD, il suffit donc je suppose de changer la référence de la feuille (la BDD comporte exactement le même nombre de colonnes).
J'ai essayé de bidouiller des noms de feuille, en vain.
Comment j'adapte cette référence ?


Encore, et encore, et.. encore MERCI.
 

Dranreb

XLDnaute Barbatruc
Feuil2 ce n'était pas un nom Excel de feuille mais un nom d'objet Worksheet de la rubrique Microsoft Excel Objets la représentant. Cette formulation n'est valable que pour les feuilles du classeur portant la macro.
Mais si votre macro est dans un classeur de macros et que vous voulez qu'elle puisse marcher sur la feuille active de n'importe quel classeur vous pouvez mettre ActiveSheet. Mais si les données sont sur une autre feuille on n'y coupe pas de devoir mettre Woksheets("BdD").[A2:CY2]
 
Dernière édition:

Discussions similaires

Statistiques des forums

Discussions
312 163
Messages
2 085 863
Membres
103 007
dernier inscrit
salma_hayek