XL 2010 index par valeur de label

guigui76

XLDnaute Occasionnel
Bonjour, je suis bloqué sur un simple index en vba
pour faire simple en appelant une userform, l'opérateur choisir les analyses effectuer ainsi il trouvera les derniers résultat.
j'ai bien réussi la création de l'userform des différents Label et leur attribuer leur nom avec des variables, mais la recherche des valeurs je bloque.

Dans l'onglet "Temp" se trouve les analyses importées d'un fichier log
Dans l'onglet "Para" les analyses demandées ainsi que la liste des produits.

l'userform comporte un combobox ou l'on choisi le produit. et des labels qui indiquent les analyses et les résultats.
je bloque sur cette dernière partie.

Merci pour votre aide je continue de chercher
 

Pièces jointes

  • log userform .xlsm
    34.2 KB · Affichages: 35

Paf

XLDnaute Barbatruc
Re : index par valeur de label

bonjour guigui76,

A priori il y aurait plus simple que application.index pour alimenter les Label, mais on ne peut pas se baser sur le code existant pour comprendre ce que vous voulez faire.

une explication plus précise vous apporterait certainement davantage de réponse.

A+
 

guigui76

XLDnaute Occasionnel
Re : index par valeur de label

Merci pour votre réponse et votre soutient.
j'ai continué dans mon projet mais toujours avec "index",je joins la nouvelle monture.

Le besoin vient du faite que nous devons actuellement recopier sur une feuille papier les valeurs provenant de notre analyseur puis nous inscrivons ces même valeurs sur un fichier excel.
Celui-ci enregistre à chaque fois ces valeurs sur un fichier .log.

Pour éviter toute les recopie, j'ai pensé à faire ceci:
_Activation de la macro par un bouton placer sur l'onglet "para" .
_Sélection du type de produit.
_Par sélection l'importation des valeurs seront faite, j'ai retiré pour le moment cette macro (c'est déjà assez le bazar), une fois l'importation faite:
_ le type d'analyse est affiché sur l'userform par label, pour cela je vais chercher le type d'analyse par produit dans l'onglet "para"
_ les analyses précédente par type d'analyse
_ et les dernière analyses par type d'analyse
une fois ceci fait l'opérateur pourra inscrire manuellement sur le fichier destinataire les résultats (je garde cette partie pour avoir un oeil humain sur la process.

Si vous avez une solution plus propre je suis preneur.
Merci

Guigui76
 

Pièces jointes

  • log userform .xlsm
    32 KB · Affichages: 29
Dernière édition:

guigui76

XLDnaute Occasionnel
Re : index par valeur de label

Je ne comprends pas, je viens de "terminer " mais les valeurs afficher sur les labels ne correspondent pas.
exemple si je demande "Suivi R1000 et MT" la densité de la précédente analyse ne correspond pas.
aussi si je repasse sur un autre type de produit les labels des dernières analyses restent actif avec les vielles valeurs.
je suis déboussolé.
 

Pièces jointes

  • log userform .xlsm
    35 KB · Affichages: 27

Paf

XLDnaute Barbatruc
Re : index par valeur de label

Re,

si je repasse sur un autre type de produit les labels des dernières analyses restent actif avec les vielles valeurs.

pour éviter cela, il faut systématiquement vider les Labels avant d'afficher les nouveaux:

dans Private Sub ComboBox1_Change() rajouter en début de sub:
Code:
'******* RaZ Labels *****
For i = 1 To 45
    Me("Label" & i).Caption = ""
Next
'******* Fin Raz  *******


Concernant les Labels de Type d'analyse, il ne sert à rien de renseigner les Labels de 1 à 30, puisque seuls les 15 premiers sont concernés.

Toujours dans Private Sub ComboBox1_Change()
on pourrait remplacer avantageusement:
Code:
With Sheets("para")
equiv = Application.Match(Me.ComboBox1.Value, .Range("c1:v1"), 0)
ligne = 0

Label1.Caption = Application.Index((.Range("c2:j2").Offset(ligne, 0)), equiv)
ligne = ligne + 1
Label2.Caption = Application.Index((.Range("c2:j2").Offset(ligne, 0)), equiv)
ligne = ligne + 1
Label3.Caption = Application.Index((.Range("c2:j2").Offset(ligne, 0)), equiv)
ligne = ligne + 1
Label4.Caption = Application.Index((.Range("c2:j2").Offset(ligne, 0)), equiv)
ligne = ligne + 1
Label5.Caption = Application.Index((.Range("c2:j2").Offset(ligne, 0)), equiv)
ligne = ligne + 1
Label6.Caption = Application.Index((.Range("c2:j2").Offset(ligne, 0)), equiv)
ligne = ligne + 1
Label7.Caption = Application.Index((.Range("c2:j2").Offset(ligne, 0)), equiv)
ligne = ligne + 1
Label8.Caption = Application.Index((.Range("c2:j2").Offset(ligne, 0)), equiv)
ligne = ligne + 1
Label9.Caption = Application.Index((.Range("c2:j2").Offset(ligne, 0)), equiv)
ligne = ligne + 1
Label10.Caption = Application.Index((.Range("c2:j2").Offset(ligne, 0)), equiv)
ligne = ligne + 1
Label11.Caption = Application.Index((.Range("c2:j2").Offset(ligne, 0)), equiv)
ligne = ligne + 1
Label12.Caption = Application.Index((.Range("c2:j2").Offset(ligne, 0)), equiv)
ligne = ligne + 1
Label13.Caption = Application.Index((.Range("c2:j2").Offset(ligne, 0)), equiv)
ligne = ligne + 1
Label14.Caption = Application.Index((.Range("c2:j2").Offset(ligne, 0)), equiv)
ligne = ligne + 1
Label15.Caption = Application.Index((.Range("c2:j2").Offset(ligne, 0)), equiv)
ligne = ligne + 1
Label16.Caption = Application.Index((.Range("c2:j2").Offset(ligne, 0)), equiv)
ligne = ligne + 1
Label17.Caption = Application.Index((.Range("c2:j2").Offset(ligne, 0)), equiv)
ligne = ligne + 1
Label18.Caption = Application.Index((.Range("c2:j2").Offset(ligne, 0)), equiv)
ligne = ligne + 1
Label19.Caption = Application.Index((.Range("c2:j2").Offset(ligne, 0)), equiv)
ligne = ligne + 1
Label20.Caption = Application.Index((.Range("c2:j2").Offset(ligne, 0)), equiv)

End With
par
Code:
equiv = ComboBox1.ListIndex + 3
With Sheets("para")
'******** Labels de type 1 à 15 ******
For i = 1 To 15
Me("Label" & i).Caption = .Cells(i + 1, equiv).Value
Next
'******* fin labels 1 à 15
End With


Pour le décalage de ligne dans l'affichage des résultats, cela provient du fait que la recherche de dernière ligne

With Sheets("Temp")
DernLigne = Range("A" & .Rows.Count).End(xlUp).Row


ne s'effectue pas sur la bonne feuille, il faudrait :
With Sheets("Temp")
DernLigne = .Range("A" & .Rows.Count).End(xlUp).Row


A+
 

guigui76

XLDnaute Occasionnel
Re : index par valeur de label

Bonjour, merci pour ta réponse.
j'ai fait une refonte de la macro ce matin.
Cela me semble plus facile comme ça, intégration de boucle pour les divers label
la premier boucle efface tout les label de 1 à 45
la deuxième boucle pour les labels de la ligne supérieure
etc...

je te remercie pour ton intérêt.

Code:
Private Sub ComboBox1_Change()
Dim DerniereLigne As Long, NombreValeurs As Long
On Error Resume Next

'effacement de tout les labels compris entre 1 & 45
For effacement = 1 To 45
Me.Controls("Label" & effacement).Caption = ""
Next effacement

' calcul du nombre d'analyses distincte par produit
z = Sheets("para").Range("d2:s2").Find(Me.ComboBox1.Value).Column
DerniereLigne = Cells(65536, z).End(xlUp).Row
NombreValeurs = DerniereLigne - 2

For q = 1 To NombreValeurs 'numérotation du premier Label jusqu'au dernier
D = Sheets("para").Range("d2:s2").Find(Me.ComboBox1.Value).Offset(q, 0).Value
 
Me.Controls("Label" & q).Caption = D
'Stop
DernLigne = Sheets("Temp").Range("A" & Rows.Count).End(xlUp).Row

s = Sheets("Temp").Rows(DernLigne).Find(D).Offset(-1, 1).Value

r = q + 15
Me.Controls("Label" & r).Caption = s

u = Sheets("Temp").Rows(DernLigne).Find(D).Offset(0, 1).Value
T = r + 15
Me.Controls("Label" & T).Caption = u
Next q
'Stop
Label50.Caption = Right(Sheets("Temp").Range("d" & Rows.Count).End(xlUp), 10)
Label51.Caption = Right(Sheets("Temp").Range("d" & Rows.Count).End(xlUp).Offset(-1, 0), 10)
End Sub
 

Discussions similaires

Membres actuellement en ligne

Aucun membre en ligne actuellement.

Statistiques des forums

Discussions
312 508
Messages
2 089 143
Membres
104 050
dernier inscrit
Pepito93100