Microsoft 365 macro qui s'adapte selon liste déroulante

virdg

XLDnaute Nouveau
bonjour à tous , tout d'abord un grand merci a fanch55 qui m'a bcp aidé a faire ce que je veux ne voulant pas abuser , je suis presqu'a la fin de mon projet.
je suis "créateur" de teintes a partir de plusieurs encres , dans le fichier que je fourni il y a sur la première page la fiche couleur on est explique comment ca fonctionne.
le soucis c'est que j'ai des autres fournisseurs d'encres dont j'ai rajouté les références des nouvelle teintes que j'ai créées sur une autre feuille (qui porte le nom du fabricant) je voudrais modifier la macro pour qu'elle s'adapte a ma liste déroulante quand je choisi tel ou tel fabriquant. bref je crois que ce sera plus clair quand vous ouvrirez le fichier .
si qqun a une solution (de dont je ne doute pas :)...
 

Pièces jointes

  • Teintes VBA.xlsm
    211.4 KB · Affichages: 5

virdg

XLDnaute Nouveau
ah , forcement dans la macro on precise de lire le tableau DIC comme suit :

For Each C In Lob.Parent.Range(Lob.Name & "[[1327]:[RHT]]").Rows(Rw).Cells[/CODE]

cela ne peut pas marcher pour la feuille AKZO, ce ne sont pas les mêmes noms
 

sylvanu

XLDnaute Barbatruc
Supporter XLD
Bonjour,
ah déjà on avance
Si les explications avaient été plus claires dès le début, on aurait avancé plus vite. :)
Bon, ma toute dernière PJ car ça devient complexe à modifier puisque toute la structure est basé que sur un fabricant.
Alors dans l'ordre :
1- La colonne D va devenir une usine à gaz puisqu'il faudra tenir compte des trois fabricants dans la formule.
Donc j'ai mis une fonction perso :
VB:
Function Encres(Fabricant, CelI)
    Application.Volatile
    Select Case Fabricant
        Case "DIC":     Encres = FabDIC(CelI)
        Case "AKZO":    Encres = FabAKZO(CelI)
        Case "SUN":    Encres = FabSUN(CelI)
    End Select
End Function
Chaque fabricant renvoie à une fonction. Par ex DIC est remplie :
Code:
Application.Volatile
FabDIC = ""
Select Case CelI
    Case "":        FabDIC = ""
    Case "40413":   FabDIC = "YELLOW 40413 TO-2400"
    Case "20400":   FabDIC = "RED 20400 TO-4407"
    Case "70400":   FabDIC = "VIOLET 70400 TO-6400"
    Case "60403":   FabDIC = "BLUE 60403 TO-5402"
    Case "60400":   FabDIC = "BLUE 60400 TO-5425"
    Case "50403":   FabDIC = "GREEN 50403 TO-7400"
    Case "41413":   FabDIC = "YELLOW 41413 TO-2408"
    Case "40407":   FabDIC = "YELLOW 40407 TO-2405"
    Case "40401":   FabDIC = "YELLOW 40401 TO-2402"
    Case "30403":   FabDIC = "ORANGE 30403 TO-3404"
    Case "21425":   FabDIC = "RED 21425 TO-4423"
    Case "20420":   FabDIC = "RED 20420 TO-4406"
    Case "20413":   FabDIC = "RED 20413 TO-4402"
    Case "81400":   FabDIC = "BLACK 81400 TO-9426"
    Case "RHT":     FabDIC = "RED TO-4408"
    Case "OHT":     FabDIC = "ORANGE TO-3426"
    Case "91400":   FabDIC = "BROWN 91400 TO-8420"
    Case "91404":   FabDIC = "SILVER 91404 TO-0400"
    Case "1327":    FabDIC = "WHITE TONED TO-1327"
    Case "10404":   FabDIC = "WHITE 10404 TO-1400"
    Case "1660":    FabDIC = "WHITE TU-1660 "
    Case "laque":   FabDIC = "CLEAR TO-1402"
End Select
End Function
il faut faire de même avec les deux autres :
Code:
Function FabAKZO(CelI)
Application.Volatile
FabAKZO = ""
Select Case CelI
    Case "":        FabAKZO = ""
    ' A remplir, idem syntaxe que pour DIC
End Select
End Function
Function FabSUN(CelI)
Application.Volatile
FabSUN = ""
Select Case CelI
    Case "":        FabSUN = ""
    ' A remplir, idem syntaxe que pour DIC
End Select
End Function

2- J'ai modifié le code :
Code:
           ' On définit la plage à scruter dans la bonne feuille
            Select Case Feuille
                Case "DIC":     Set Plage = Lob.Parent.Range(Lob.Name & "[[1327]:[RHT]]")
                Case "AKZO":    Set Plage = Lob.Parent.Range(Lob.Name & "[[10]:[Alu]]")
                Case "SUN":     Set Plage = Lob.Parent.Range(Lob.Name & "[[10]:[Alu]]")
            End Select
            ' On cherche les différents composants
            For Each C In Plage.Rows(Rw).Cells
De façon à définir la bonne feuille et la bonne plage où chercher les informations.

Je vous laisse le soin de terminer.
Il faut déjà remplir quelques lignes des deux fonctions AKZO et SUN pour pouvoir tester plus avant.
 

Pièces jointes

  • Teintes VBA (5).xlsm
    208.6 KB · Affichages: 1

sylvanu

XLDnaute Barbatruc
Supporter XLD
Re,
Je pense que vous allez galérer pour la mise au point.
Rien n'est pire que votre configuration, avec une feuille au départ, et ensuite on rajoute des feuilles non prévues. Ca casse tout et la mise au point est toujours compliquée.

En PJ une autre approche :
1- Pour chaque fabricant j'ai créé une ligne en haut du tableau où on met le Texte désiré pour la couleur.
( Je l'ai fait pour DIC, pour les autres, évidemment je ne sais pas )
2- J'ai créé une feuille Travail ( qui est masquée )
Quand on change de fabricant, on copie la bonne feuille dans Travail. Donc ensuite on ne travaille que sur cette feuille. D'où l'intérêt.
Dans Fiche Couleur, j'ai tout viré formule, MFC, ex colonne I.
Et tout est reconstruit par VBA, ce qui donne une macro très simple.
A tester si vous le désirez.
( J'ai mis la PJ en xlsb pour ne pas dépasser les 1Mo fatidique, vous pouvez l'enregistrer telle quelle ou l'enregistrer en xlsm. Les deux sont compatibles sous Windows mais pas sous Android.
 

Pièces jointes

  • Teintes VBA (6).xlsb
    705.8 KB · Affichages: 1

virdg

XLDnaute Nouveau
Bonjour,

Si les explications avaient été plus claires dès le début, on aurait avancé plus vite. :)
Bon, ma toute dernière PJ car ça devient complexe à modifier puisque toute la structure est basé que sur un fabricant.
Alors dans l'ordre :
1- La colonne D va devenir une usine à gaz puisqu'il faudra tenir compte des trois fabricants dans la formule.
Donc j'ai mis une fonction perso :
VB:
Function Encres(Fabricant, CelI)
    Application.Volatile
    Select Case Fabricant
        Case "DIC":     Encres = FabDIC(CelI)
        Case "AKZO":    Encres = FabAKZO(CelI)
        Case "SUN":    Encres = FabSUN(CelI)
    End Select
End Function
Chaque fabricant renvoie à une fonction. Par ex DIC est remplie :
Code:
Application.Volatile
FabDIC = ""
Select Case CelI
    Case "":        FabDIC = ""
    Case "40413":   FabDIC = "YELLOW 40413 TO-2400"
    Case "20400":   FabDIC = "RED 20400 TO-4407"
    Case "70400":   FabDIC = "VIOLET 70400 TO-6400"
    Case "60403":   FabDIC = "BLUE 60403 TO-5402"
    Case "60400":   FabDIC = "BLUE 60400 TO-5425"
    Case "50403":   FabDIC = "GREEN 50403 TO-7400"
    Case "41413":   FabDIC = "YELLOW 41413 TO-2408"
    Case "40407":   FabDIC = "YELLOW 40407 TO-2405"
    Case "40401":   FabDIC = "YELLOW 40401 TO-2402"
    Case "30403":   FabDIC = "ORANGE 30403 TO-3404"
    Case "21425":   FabDIC = "RED 21425 TO-4423"
    Case "20420":   FabDIC = "RED 20420 TO-4406"
    Case "20413":   FabDIC = "RED 20413 TO-4402"
    Case "81400":   FabDIC = "BLACK 81400 TO-9426"
    Case "RHT":     FabDIC = "RED TO-4408"
    Case "OHT":     FabDIC = "ORANGE TO-3426"
    Case "91400":   FabDIC = "BROWN 91400 TO-8420"
    Case "91404":   FabDIC = "SILVER 91404 TO-0400"
    Case "1327":    FabDIC = "WHITE TONED TO-1327"
    Case "10404":   FabDIC = "WHITE 10404 TO-1400"
    Case "1660":    FabDIC = "WHITE TU-1660 "
    Case "laque":   FabDIC = "CLEAR TO-1402"
End Select
End Function
il faut faire de même avec les deux autres :
Code:
Function FabAKZO(CelI)
Application.Volatile
FabAKZO = ""
Select Case CelI
    Case "":        FabAKZO = ""
    ' A remplir, idem syntaxe que pour DIC
End Select
End Function
Function FabSUN(CelI)
Application.Volatile
FabSUN = ""
Select Case CelI
    Case "":        FabSUN = ""
    ' A remplir, idem syntaxe que pour DIC
End Select
End Function

2- J'ai modifié le code :
Code:
           ' On définit la plage à scruter dans la bonne feuille
            Select Case Feuille
                Case "DIC":     Set Plage = Lob.Parent.Range(Lob.Name & "[[1327]:[RHT]]")
                Case "AKZO":    Set Plage = Lob.Parent.Range(Lob.Name & "[[10]:[Alu]]")
                Case "SUN":     Set Plage = Lob.Parent.Range(Lob.Name & "[[10]:[Alu]]")
            End Select
            ' On cherche les différents composants
            For Each C In Plage.Rows(Rw).Cells
De façon à définir la bonne feuille et la bonne plage où chercher les informations.

Je vous laisse le soin de terminer.
Il faut déjà remplir quelques lignes des deux fonctions AKZO et SUN pour pouvoir tester plus avant.
ah super je vais tester ça dans la journée, je suis sur excel qu'a mon boulot, ;) je vous tiens au courant
merci
 

Discussions similaires