[Résolu] INDEX + EQUIV en VBA

Polobe36

XLDnaute Occasionnel
Bonjour à tous,

Suite au plantage d'un fichier, je cherche à l'optimiser et éviter la redondance d'information. Certaines valeurs sont inutiles puisqu'on les retrouvent ailleurs.

Ici, je cherche à supprimer les colonnes C, D et E, et par la même occasion utiliser un équivalent (que je ne connais pas) de Index+Equiv en VBA permettant de retrouver les valeurs correspondantes aux critères de recherche.

exemple:
Pour le critère évènement, retrouver le CodeActeur dans la même table T_Evenement et le CodeRapport dans la table T_Rapport selon le CodeEvenement renseigné.
Pour le critère d'acteur (correspondant au CodeEvenement), retrouver l'équipe et la spécialité dans les tables dédiées (T_Equipe et T_Specialite) selon le CodeActeur spécifié.

En espérant avoir été suffisamment précis, merci de votre aide

Cordialement
 

Pièces jointes

  • Classeur1.xls
    58.5 KB · Affichages: 50
  • Classeur1.xls
    58.5 KB · Affichages: 48
  • Classeur1.xls
    58.5 KB · Affichages: 58

Dranreb

XLDnaute Barbatruc
Re : INDEX + EQUIV en VBA

Bonjour.

La meilleure façon en VBA de remplacer INDEX/EQUIV pour un traitement répétitif c'est d'utiliser des Dictionary.
Beaucoup les utilisent via des variables déclarées As Object. Moi je vous conseille plutôt de cocher "Microsoft Scripting Runtime" dans la liste Références disponibles, menus Outils, Références… Vous pourrez ainsi les déclarer As Dictionary, les initialiser par Set MonDico = New Dictionary, et dès la frappe d'un point derrière une de vos variables vous aurez la liste des propriétés et méthodes suggérées dans une liste.
 

Polobe36

XLDnaute Occasionnel
Re : INDEX + EQUIV en VBA

Bonsoir Dranreb,

Merci pour la réponse. Vous aviez déjà répondu à une de mes questions par le passé et je m'étais dit à ce moment là que l'on était pas sur la même planète, lol. Et bien j'avoue ne pas avoir tout compris là non plus, mais je vais néanmoins essayer, puis revenir vers vous si je n'avance pas.
 

Dranreb

XLDnaute Barbatruc
Re : INDEX + EQUIV en VBA

Voici :
VB:
Option Explicit
Dim DicÉv As Dictionary

Sub Test()
Dim T(), L&, Clé As String
T = Feuil1.[A2].Resize([A60000].End(xlUp).Row - 1).Value
Set DicÉv = New Dictionary
For L = 1 To UBound(T): DicÉv(T(L, 1)) = L: Next L

Rem. Vérification
Clé = "Evènement 3"
If Not DicÉv.Exists(Clé) Then Exit Sub
L = DicÉv(Clé)
T = Feuil1.[A2:E60000].Rows(L).Value
MsgBox Clé & ": " & T(1, 2) & ", " & T(1, 3) & ", " & T(1, 4) & ", " & T(1, 5)
End Sub
Ne pas oublier de cocher la référence "Microsoft Scripting Runtime" sinon Erreur de compilation sur Dictionary : Type défini par l'utilisateur non défini.
 
Dernière édition:

Polobe36

XLDnaute Occasionnel
Re : INDEX + EQUIV en VBA

Bonjour à tous, Bonjour Dranreb,

J'ai testé avec succès la solution proposée en recherchant les valeurs sur d'autres feuilles. Comment faire pour obtenir les valeurs dans chaque champs de mon userform et plus dans une msgbox?
 

Dranreb

XLDnaute Barbatruc
Re : INDEX + EQUIV en VBA

Bonjour.

Dans les Userform vous pouvez mettre des ComboBox, appelées zones de listes modifiables, mais ce sont plutôt des zones de textes avec liste. Ceux ci ont déjà par eux même un pouvoir de recherche puisqu'il portent une propriété List et une autre ListIndex qui indique le décalage de la valeur tapée oui choisie dans la liste par rapport à son 1er élément.

Qu'ils soient redonnés par un Dictionary constitué lors de la Userform_Initialize ou par le ListIndex + 1 d'un ComboBox dont la List y a été garnie, la manière de récupérer l'ensemble des valeurs d'une ligne est la même, simplement il faut affecter ensuite les T(1, C) aux propriétés Text de TextBox et Caption de Label.
 
Dernière édition:

Discussions similaires

Statistiques des forums

Discussions
312 582
Messages
2 089 951
Membres
104 314
dernier inscrit
Tuubibumi