Affichage de données avec plusieurs paramètres

Bonjour,

J'ai une base de données qui contient des noms d'opérateurs ainsi que des numéros d'outil.

Je dois pouvoir insérer cette base de données dans un fichier :"FINAL", Le soucis c'est qu'il faut pouvoir associer certain outils à certaine personne directement et d'autre outil avec l'aide d'une liste déroulante car tout les outils sont des outils à utilisation commune. Il faut que en fonction du nom d'opérateur qui est rentré ça affiche automatiquement les numéros d'outil qu'il peut utiliser. C'est à dire que quand un outil lui appartient il puisse seulement sélectionner cette outil et quand il doit utiliser un autre outils il puisse choisir le numéro de l'outil qu'il s'apprête à utiliser.

J'avais essayé la fonction RECHERCHEV mais j'ai l'impression que j'ai trop de paramètre pour l'utiliser dans ce cas de figure.

Merci d'avance pour votre aide, si vous pouvez m'aider à remplir la colonne "NUMAR INVENTAR" de la feuille FINAL de mon fichier ça m'aiderait beaucoup.

Bien Cordialement.

https://www.cjoint.com/c/HExiUABJaPS

Bonjour,

Voilà un fichier avec une macro qui se lance automatiquement lorsque l'on sélectionne la cellule.

Dites moi si ça vous convient

cordialement

Merci beaucoup pour votre retour je vais essayer de regarder en modifiant certain détail de ma feuille 2 et voir si votre code fonctionne toujours.

Mais vous m'avez déjà beaucoup avancer, merci.

Je suis malheureusement très débutant sur la programmation vba et il est pour difficile de comprendre votre code.

Bien cordialement

Néanmoins, je viens de trouver un problème dans votre codage, je ne sais pas si c'est modifiable, mais quand je déroule la liste déroulante d'un type d'outil, actuellement la liste déroulante propose tous les numéros d'outils. Sauf qu'il faudrait que la liste déroulante d'une catégorie d'outil n'affiche seulement pas les numéros d'outil appartenant à cette catégorie.

Comprenez-vous mes attentes ?

Cordialement,

Merci d'avance.

Bonjour,

Effectivement, c'est une liste déroulante qui affiche tous les outils car c'est ainsi que je l'ai paramétré.

C'est donc modifiable.

Sinon, pour le code, je vous met le détail ci après avec des commentaires

Private Sub worksheet_selectionchange(ByVal Target As Range)
'ici, c'est le début de la macro et elle se lance quand vous selectionner la plage
If Not Intersect(Target, Range("E6:E105")) Is Nothing Then 'adapter la plage au besoin
lieu = Target.Address
'toutes les variables nécessaires sont introduites ici avec string pour le texte, range pour la position (B1, A6...), long pour les nombres
Dim colnom As Range
Dim DernLigne As Long
Dim lignom As Range
Dim nom As String
Dim personel As String
Dim materiel As String

Target.Select
'ici, j'affecte le nom de l'outils à la variable nom
nom = ActiveCell.Offset(0, 1).Value

If ActiveCell.Offset(0, -1).Value = "" Then 'si la cellule ne contient rien alors...
personel = ActiveCell.Offset(0, -1).End(xlUp).Value
Else
personel = ActiveCell.Offset(0, -1).Value
End If

'ci après, la recherche de l'emplacement de la référence de l'outil dans la feuil2 (avec la ligne correspondant au nom de l'employé et la 'colonne avec le nom de l'outil) 
Set colnom = Sheets("Feuil2").Cells.Find(nom)
place = colnom.Address
place = Sheets("Feuil2").Range(place).Address
col = Range(place).Column
Set lignom = Sheets("Feuil2").Cells.Find(personel)
place = lignom.Address
place = Sheets("Feuil2").Range(place).Address
lig = Range(place).Row

'affectation de la référence de l'outil a la variable materiel (la référence peut être vide si l’outil ne lui appartient pas)
materiel = Sheets("Feuil2").Cells(lig, col).Value

' literalement : si la cellule contenant la reference est differente de rien alors... -->l'outil lui appartient
If materiel <> "" Then
'comme l'outils lui appartient, on place la reference dans la cellule de la feuille "Final"
Target.Value = materiel
Else
'Sinon, on crée une liste déroulante dans la cellule de la feuille "Final"
    Range(lieu).Select
    With Selection.Validation
        .Delete
        .Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, Operator:= _
        xlBetween, Formula1:="='Liste outils'!$C$3:$C$34" 'c'est ici que l'on modifie la référence de la liste déroulante 
        .IgnoreBlank = True
        .InCellDropdown = True
        .InputTitle = ""
        .ErrorTitle = ""
        .InputMessage = ""
        .ErrorMessage = ""
        .ShowInput = True
        .ShowError = True
    End With
End If
End If
End Sub

Pour la liste modifiable, j'y travaille et je modifie dès que possible.

Si vous avez d'autres questions, n'hésitez pas!

Cordialement

Merci pour ce code avec les explications c'est déjà légèrement plus compréhensible pour moi ^^

Oui j'ai d'autre question : - que signifie : "débogage" c'est qu'il y a un problème dans le code?

Et sinon j'ai remarqué également que par exemple avec l’opérateur "OC" quand je veux changer la ligne "CHEIE DINAMOMETRICA" ça m'affiche CHEIE DINAMOMETRICA dans la colonne "NUMAR INVENTAR" je ne comprend pas ?

Merci pour votre aide

Les 2 problèmes que vous relevez (et que je n'avais pas vu ) sont en fait les mêmes.

Pour le débogage, c'est effectivement qu'Excel ne comprend pas le code (si vous cliquez dessus, il vous amène à la ligne qui pose problème).

Pour l'explication de ces problèmes, c'est parce que l'opérateur n'est pas dans le tableau de la feuil2 (exemple : CMA) donc soit excel ne comprend pas, soit il renvoi une mauvaise valeur.

J'ai corrigé ceci dans le fichier joins (avec une boucle si)

Dites moi si ça vous convient désormais

Cordialement

Bonjour et merci, c'est déjà beaucoup mieux.

Encore quelques questions :

j'ai modifié dans ma feuille 2 une cellule (cellule violette) car j'avais temporairement inscrit deux numéros de série avec un "/" j'ai voulu retirer ce "/" en créant une liste déroulante mais quand je crée ma liste déroulante sur la feuille 2 ça supprime la liste déroulante de la feuille FINAL...Est ce que ma liste déroulante n'est pas correcte où c'est à cause du codage ?

Comment est ce possible de régler ça ? Car maintenant je souhaite détailler tous les opérateurs qui possède 2 mêmes outils, c'est-à-dire supprimer les / et ne laisser uniquement une liste déroulante avec 2 choix possible.

https://www.cjoint.com/c/HEygrUJlgqS

Je viens aussi de remarquer que j'ai encore des messages de débogage qui s'affiche avec certain opérateur, ce débogage est associé à la boucle SI.

Re,

Pour la boucle si et le débogage, c'est réglé (un pb que je n'explique pas ).

Par contre, pour la liste déroulante, c'est tout a fait normal. En effet, Excel ne détecte pas de liste dans la feuil2 mais une valeur.

Or, dans le code, j'ai écris que si le programme détecte une valeur dans la cellule, il la transpose dans la feuille finale : la liste déroulante précédente disparait donc. donc le"problème" provient du codage.

J'ai corrigé le code. Par contre, la liste déroulante avec les valeurs voulue ne s'affiche que dans la feuille "Final" (la macro recherche le caractère "/" pour déterminer les outils)

cordialement

Avec le bon fichier...

ReBonjour, merci pour le temps que vous m'accordez.

Avec ce fichier ça m'affiche une erreur avec débogage. L'erreur vient de la ligne de code Target.Select

(la macro recherche le caractère "/" pour déterminer les outils) je ne comprend pas bien ce que vous avez voulu dire même si je vois clairement votre ligne de code à ce propos.

Est t-il possible de supprimer ce "/" afin que l'opérateur puisse choisir entre un de ces deux outils ?

Merci d'avance

Re,

Pour le débogage, le problème n'apparait plus pour moi a la seconde ouverture du fichier (après téléchargement)

Concernant le caractère "/", je j'utilise pour déterminer les référence

Par exemple, si la cellule en feuil2 contient "1709 / 1784"; la macro va automatiquement comprendre qu'il y a 2 référence dans la cellule. Ainsi, dans la feuille "Final", une liste déroulante apparait avec les 2 références.

En espérant avoir été plus clair

Cordialement

Une question pour mon début de culture général dans vba:

Dans le bout de code ci-dessous je ne comprend pas bien ça signifie que si materiel = un de ces symboles alors il se passe quelques chose ? Est ce des appellation interne à vba ? car dans mon fichier il n'y a pas de tel caractère..

If materiel <> "" Then

If materiel = "*" & "/" & "*" Then

Dim numun As Long

Dim numdeux As Long

numun = Left(materiel, InStr(materiel, "/") - 1)

numdeux = Right(materiel, InStr(materiel, "/") - 1)

Range(lieu).Select

Re,

En VBA, "<>" (se trouve sur le clavier, tout a gauche, a coté du W, (en faisant majuscule pour changer le sens)) signifie "différent de..."

Donc, dans le code, cela signifie : "si materiel et différent de rien alors..."

les deux guillemet signifient "rien" ou "vide"

le "*" signifie en VBA "tout ce que vous voulez". En clair, l'étoile permet résumer tous les caractères (ça remplace n'importe quoi, de n'importe quel taille, tant des chiffres que du texte...)

le "&" : en VBA, ce symbole permet de concaténer des variables, c'est l'équivalent d'un "+"

Ainsi, "If materiel = "*" & "/" & "*" Then" signifie littéralement : "si materiel égal quelque chose et "/" et quelque chose alors..."

Soit, en français courant : si materiel contient "/" alors...

cordialement,

D'accord merci pour ces informations sur le codage.

Est t-il possible que ça ne m'affiche pas 7637 / 7682 par exemple mais plutôt en liste déroulante 7637 et 7682 ?

Comprenez vous ce que je veux dire ? je ne suis pas sur d’être clair ^^

Pour le tableau en feuil2, ça me semble malheureusement impossible. Sinon, la liste déroulante ne s'affichera plus dans le tableau Final.

En fait, la liste sera soit dans la feuille "FINAL", soit dans la "Feuil2". Mais pour que les 2 feuilles affiche une liste en même temps, je ne voit pas d'autre solution que de passer par une zone de liste déroulante.

Cordialement,

D'accord merci !

Sinon, si je rajoute une colonne avec soit une boucle si 2 numéros d'outils par propriétaire détecté alors affiché dans la colonne une autre liste déroulante qui sélectionne un des deux outils : mais ça me parait difficile...sinon juste avec une colonne ou l'opérateur peut rentrer le numéro à la main ?

Cordialement

Bonjour,

J'ai essayé de changer les noms du fichier, mais ça m'indique "indicateur introuvable", j'ai vu que c'est parce que vous l'avez inscrit dans le code, mais est il possible que la liste déroulante s'affiche également quand le nom de l'opérateur est plus long ?

Cordialement,

Re,

Sinon, si je rajoute une colonne avec soit une boucle si 2 numéros d'outils par propriétaire détecté alors affiché dans la colonne une autre liste déroulante qui sélectionne un des deux outils : mais ça me parait difficile...sinon juste avec une colonne ou l'opérateur peut rentrer le numéro à la main ?

là, j'ai pas compris ce que vous voulez faire

J'ai essayé de changer les noms du fichier, mais ça m'indique "indicateur introuvable", j'ai vu que c'est parce que vous l'avez inscrit dans le code, mais est il possible que la liste déroulante s'affiche également quand le nom de l'opérateur est plus long ?

oui c'est possible, il faudrait simplement rajouter "*" dans les recherche.

exemple :

Set lignom = Sheets("Feuil2").Range("C3:C22").Cells.Find(personel & "*")

la recherche serait alors : "rechercher tous les opérateurs dont le nom commence par "CQ_CN" pour les 5 premières lignes du tableau "Final" et ainsi de suite.

cordialement

Rechercher des sujets similaires à "affichage donnees parametres"