Fonction Vlookup en vba userform

jlp035

XLDnaute Occasionnel
Bonjour au Forum,
Je suis à la recherche d'un petit morceau de programme en vba qui utiliserai l'équivalent de la fonction rechercheV soit Vlookup en vba.
J'ai actuellement une feuille Excel "Taux qui récapitule la valeur des indices de réévaluation de devis.
Actuellement dans mon userform:
- je choisi l'année dans la combobox "date indice 1" (ca marche)
- je choisi la colonne de l'indice "index indice 1" (ca marche"
Je souhaite que la valeur qui corresponde au croisement des 2 sélections ci dessus soit affichée dans la texbox "valeur indice 1" mais je ne connais pas le morceau de programme qui est nécessaire pour ce résultat.
Merci de m'apporter votre aide.
Jean-Luc
 

Fichiers joints

mapomme

XLDnaute Barbatruc
Supporter XLD
Re : Fonction Vlookup en vba userform

Bonjour jlp035,

Pour ce que j'en ai compris:

On a bâti une fonction Recherche(xDate, yEnTete) dans le module du userform :

  • avec deux paramètres dont le premier est une date et le second un texte
  • qui retourne la valeur de la ListView1 à l'intersection de la ligne correspondant au premier paramètre et de la colonne dont l'en-tête correspond au second paramètre.

Pour l'exemple (en utilisant les deux TextBox à fond jaune):

Dans le code de la procédure évènementielle B_Choix_Date_Indice_1_Change(), on a inséré la ligne:
VB:
Valeur_Indice_Coeff1 = Recherche(B_Choix_Date_Indice_1, B_Choix_Index_1_Indice_1)
Dans le code de la procédure évènementielle B_Choix_Index_1_Indice_1_Change(), on a inséré la même ligne:
VB:
Valeur_Indice_Coeff1 = Recherche(B_Choix_Date_Indice_1, B_Choix_Index_1_Indice_1)
Le code de la fonction Recherche :
VB:
Function Recherche(xDate, yEnTete) As String
Dim i&, j&, nlig&, ncol
  nlig = -1
  For i = 1 To ListView1.ListItems.Count
  If xDate = ListView1.ListItems(i).ListSubItems(1).Text Then
      nlig = i
      Exit For
    End If
  Next i
  If nlig = -1 Then Exit Function
  
  ncol = -1
  For i = 1 To ListView1.ColumnHeaders.Count
  If yEnTete = ListView1.ColumnHeaders.Item(i).Text Then
      ncol = i
      Exit For
    End If
  Next i
  If ncol = -1 Then Exit Function
  
  Recherche = ListView1.ListItems(nlig).ListSubItems(ncol - 1).Text
End Function
Edit: Voir fichier v2 dans le message #3
 
Dernière édition:

mapomme

XLDnaute Barbatruc
Supporter XLD
Re : Fonction Vlookup en vba userform

Re,

Une v2 après avoir appliqué la même méthode aux autres contrôles. Le code de la fonction Recherche() a été très légèrement modifié:
VB:
Function Recherche(xDate, yEnTete) As String
Dim i&, nlig, ncol
  For i = 1 To ListView1.ListItems.Count
  If xDate = ListView1.ListItems(i).ListSubItems(1).Text Then
      nlig = i
      Exit For
    End If
  Next i
  If IsEmpty(nlig) Then Exit Function
  
  For i = 1 To ListView1.ColumnHeaders.Count
  If yEnTete = ListView1.ColumnHeaders.Item(i).Text Then
      ncol = i
      Exit For
    End If
  Next i
  If Not IsEmpty(ncol) Then Recherche = ListView1.ListItems(nlig).ListSubItems(ncol - 1).Text
End Function
 

Fichiers joints

jlp035

XLDnaute Occasionnel
Re : Fonction Vlookup en vba userform

Bonjour mapomme,
Un grand merci pour le travail que tu as réalisé, car j'étais bloqué.
J'ai encore quelque amélioration à apporter au programme, a savoir :

Quand dans les cases Coef N°1-Coef N°2-Coef N°3, si je saisi un point sur le clavier j'ai un message d'erreur, connait tu une fonction qui permette de verrouiller ou contrôler la saisie ?

Dans l'userform en mode programmation,j'ai bien une image qui représente une formule, mais quand le programme fonctionne cette image n'est pas présente.

Actuellement ma colonne de date est rentrée dans la combobox avec le gestionnaire de nom et un formule en décaler , existe t'il une autre façon de le réalisé en vba.

Actuellement ma colonne de menu est réaliser suivant le programme ci dessous, en B1:L1 , comment modifier L1 pour prendre en compte les cases remplie genre NBVAL et povoir modifier par la suite mon fichier "Taux"
Code:
Private Sub Chargement_Menu()
'
Dim i As Range
With Sheets("Taux")
 Set i = .Range("B1:L1")
End With
  B_Choix_Index_1.List = Application.Transpose(Range("B1:L1").Value)
  B_Choix_Index_2.List = Application.Transpose(Range("B1:L1").Value)
  B_Choix_Index_3.List = Application.Transpose(Range("B1:L1").Value)
Merci par avance si tu peux m'accorder quelques réponse.
Jean-Luc:eek:
 

Fichiers joints

jlp035

XLDnaute Occasionnel
Re : Fonction Vlookup en vba userform

Bonjour mapomme,
Je m'excuse pour mon retour très tardif a ta réponse.
Mon pc est tomber en panne à été réparer sous garantie au bout d'un mois et 1/2 mais est revenu avec un avec un formatage du disque dur.
Je continu le programme et te tiens au courant du fonctionnement..
Je te remercie encore pour ton travail.
Bonne fin d'année 2015.
Jean-Luc
 

Discussions similaires


Haut Bas