XL 2016 RechercheV inversée par VBA

Dje2208

XLDnaute Nouveau
Bonjour à tous,

Je suis nouveau sur le forum alors je vais me présenter brièvement.
Je suis Jérôme, technicien de maintenance et j'utilise beaucoup excel pour mon travail car je 'développe' actuellement une GMAO.

Depuis un petit moment je recherche une fonctionnalité nouvelle a mon fichier.
et je souhaiterai remplacé cette formule matricielle (présent sur toute une colonne) :
=MAX(SI('Listing des opérations'!L:L=C3;'Listing des opérations'!B:B;0))
par un VBA automatique.

J'ai cherché sur ce forum mais je ne trouve pas.
Quelqu'un pourrait-il m'aider?

Merci d'avance.

Jérôme
 

Dranreb

XLDnaute Barbatruc
Bonjour.
Assez probable que ma fonction Gigogne permettrait de l'établir assez facilement.
Surtout si on peut classer au passage la liste sur la colonne C, ou même faire l'inventaire de ce qui existe dans cette feuille Listing des opérations.
Classeur précurseur du complément la contenant joint.
 

Pièces jointes

  • GigIdx.xlsm
    63.5 KB · Affichages: 10

Dranreb

XLDnaute Barbatruc
Bonjour.
Cette solution ne le ralentira pas?
Tout le monde est toujours étonné par la rapidité d'exécution des procédures correctement construites à l'aide de la fonction Gigogne.
Mais houla il est compliqué votre classeur.
Quelles formules voudriez vous vous débarrasser ?
Y a-t-il un des deux tableaux qui peut être entièrement déduit de l'autre ?
Parce que c'est surtout pour ça qu'il est puissant.
 

Dje2208

XLDnaute Nouveau
Oui il faut que les procédures soit correctement construites...
Je souhaiterai me débarrassé de la formule de la colonne R de l'onglet 'Gestion des stocks'. Il n'y a que 2 formules pour le moment mais le but est de remplir environ 1000 lignes.
Je ne comprend pas le sens de votre deuxième question...
 

Dranreb

XLDnaute Barbatruc
Activez les références Microsoft Scripting Runtime et GigIdx, et dans le le module de l'objet Worksheet Feuil1 qui représente la feuille "Gestion des stocks" :
VB:
Option Explicit
Private Sub Worksheet_Activate()
   Dim Dic As New Dictionary, RéfPièce As SsGr, TDon(), L&
   For Each RéfPièce In Gigogne(Feuil1.[B2:L2], 11, Null, -1)
      Dic(RéfPièce.Id) = RéfPièce.Co(1)(1)
      Next RéfPièce
   TDon = ColUti(Me.[C3]).Value
   For L = 1 To UBound(TDon, 1): TDon(L, 1) = Dic(TDon(L, 1)): Next L
   Me.[R3].Resize(UBound(TDon, 1)).Value = TDon
   End Sub
 

Hasco

XLDnaute Barbatruc
Repose en paix
Bonjour,

Dans le fichier joint plusieurs solutions possibles,

1- par macro (voir dans module2) et évènement change dans le code de la feuille 'Gestion des Stocks' ( à décommenter avant utilisation) A mon avis c'est pas la meilleure.

2- par PowerQuery + rechercheV, ma préférée même si elle est à mettre à jour par 'Données/Actualiser', voir comment intégrer cela dans le projet final.
3- par Extraction avancée des références sur un autre emplacement (par Données/Trier et Filtrer/avancé) ou macro

Bon après midi

Edit: Oups fichier .xlsm trop volumineux. Voir .zip à dézipper
 

Pièces jointes

  • HISTO MAINT.zip
    448.1 KB · Affichages: 8

Dje2208

XLDnaute Nouveau
Le code de Dranreb fonctionne à merveille, mais sur les 200 premières ligne... Quel est l'argument a changer pour faire les 1000?

Pourrais-tu expliquer (vite fait...) ce code afin que je comprenne et puisse, peut être un jour, le réutiliser?

Et si vous avez d'autre idées pour accélérer ce fichier (a savoir qu'il est utiliser sur un serveur informatique et qu'il met encore plus de temps a se charger...), je suis preneur!!

Merci beaucoup,
 

Dranreb

XLDnaute Barbatruc
Normalement il fait tout ce qu'il y a de renseigné dans la UsedRange dans les colonnes à partir de B2:L2
Simplement il ne renvoie rien au dela de la ligne 311 parce qu'il nya que des références qui n'existent pas.
Cherchez d'abord des réponses dans la feuille d'aide du GigIdx.xlsm, et s'il y a des détails que vous ne comprenez pas dites le moi.
Cette version renseigne toutes les lignes :
VB:
Private Sub Worksheet_Activate()
   Dim Dic As New Dictionary, RéfPièce As SsGr, TDon(), L&
   For Each RéfPièce In Gigogne(Feuil1.[B2:L2], 11, Null, -1)
      Dic(RéfPièce.Id) = RéfPièce.Co(1)(1)
      Next RéfPièce
   TDon = ColUti(Me.[C3]).Value
   For L = 1 To UBound(TDon, 1):
      If Dic.Exists(TDon(L, 1)) Then
         TDon(L, 1) = Dic(TDon(L, 1))
      Else
         TDon(L, 1) = TDon(L, 1) & " ?": End If
      Next L
   Me.[R3].Resize(UBound(TDon, 1)).Value = TDon
   End Sub
 
Dernière édition:

Dje2208

XLDnaute Nouveau
Je vous remercie, je vais regarder l'aide du gigldx.xlsm demain a tête reposé...
Oui a partir de la 311 je n'avais pas encore rentrer mes pièces en stock mais il ne mettais pas les date a partir de la ligne 200. Mais le Pb est résolu, le fichier met les date la ou je le souhaite!!

Encore merci
 

Statistiques des forums

Discussions
312 169
Messages
2 085 923
Membres
103 041
dernier inscrit
Ousmane