Liste déroulante avec deux classeurs

Bonjour à tous,

Je viens de tomber sur un problème. Voici donc l'explication:

J'ai actuellement deux classeurs, l'un avec ma page principale et l'autre avec mes références. Sur ma page principale, j'ai 3 listes déroulantes qui découlent de celle en A (Type). Lorsque je choisis comme type "Arduino" j'ai alors en colonne ID la possibilité entre Dev1 et Dev2. Si j'ai "Jetter" alors j'aurais 0 ou 1. Même principe avec les signaux. J'ai alors séparer mes deux fichiers afin de mettre mes références sur le réseau et que personne les modifies. Malheureusement, j'ai mon programme qui fonctionne plus alors que tous les noms sont bien présents.

image

Dès lors que je modifie ma première colonne je tombe sur une erreur:

image image

C'est possiblement du à un soucis de localisation du fichier référence.

Voici mes fichiers:

7test.xlsm (24.20 Ko)
7refdata.xlsx (12.75 Ko)

Merci d'avance pour votre aide!

Bonjour

Essayez déjà ceci :

Sub affichage()
Dim i As Integer
Dim tabtype

With Workbooks("refdata.xlsx").Worksheets("refData")
    For i = 2 To .Range("A" & Rows.Count).End(xlUp).Row
        tabtype = tabtype & .Range("A" & i) & ","
    Next i
End With
With ThisWorkbook.Worksheets("Main")

    For i = 2 To 10
        With .Range("A" & i).Validation
            .Delete
            .Add xlValidateList, Formula1:=tabtype
        End With
    Next i
End With
End Sub

NB :
- Attention que votre fichier refdata doit être ouvert !
- Vous pouvez supprimer le nom tabtype dans votre fichier

Cordialement

Edit : Bête question mais pourquoi vous ne créez pas une feuille refdata dans votre fichier test ?

Re Edit : attention vous devez mettre un point devant Range("A" & i). J'ai corrigé dans le code ci-dessus

Bonjour, Merci Dan pour ta réponse je viens de modifié mon fichier avec tes conseils. Voici le nouveau fichier:

9test.xlsm (18.81 Ko)

Cependant j'ai une erreur au lancement:

error error2

Selon moi cela vient du faite que dans la création on utilise un formula1 qui fais plus de 255 caractère. Mais je ne voit pas comment résoudre de pb. Est ce que quelqu'un aurait une idée.

Effectivement j'ai aussi ce souci sur le fichier

Ok j'ai trouvé votre souci. C'est un peu de ma faute

Dans le code que je vous ai proposé lorsque vous arrivez à la dernière ligne de la colonne A, le code ajoute aussi une virgule dans la liste de validation alors qu'il n'en faut pas. La boucle doit être comme ceci :

    For i = 2 To .Range("A" & Rows.Count).End(xlUp).Row
        If i < .Range("A" & Rows.Count).End(xlUp).Row Then
            tabtype = tabtype & .Range("A" & i) & ","
        Else: tabytype = tabtype & Range("A" & i)
        End If
    Next i

Par contre pourquoi bouclez-vous à l'avance sur 10 lignes pour y placer toutes les listes de validation. En colonne A, vous auriez pu ajouter une liste de validation dès que la cellule précédente en contient une. Exemple vous ajoutez avec le code une liste en A1, dès que votre choix est fait, cela ajoute une liste en A2. et ainsi de suite.

Si ok, je vous donnerai le code Worksheet_change

Bonjour merci de votre aide, je vais tester votre solution. Et oui c'est totalement ce que je veux. Dès que l'on à choisi une réponse en A1 cela influe sur les listes en B1 et C1.

Bien à vous

J'ai toujours la même problème avec la modification. Je vous mets les fichiers mis à jours:

10test.xlsm (22.68 Ko)
7refdata.xlsm (13.22 Ko)

Bonjour

En fait le souci vient bien de ce que vous aviez écrit plus haut. La liste de validation est limitée à 255 caractères
Donc le mieux est de travailler en créant des noms et en les utilisant dans la liste de validation.
Le souci reste puisque vous utilisez deux fichiers
Je reviens donc à ma question précédente, pourquoi ne mettez-vous pas la feuille refData dans votre fichier ?

Cordialement

Edit : sinon une autre solution c'est de créer une userform et de mettre des combobox qui récupèrent les infos du fichier refdata

Bonjour Dan, j'utilise deux fichiers séparément car l'un peut être modifier par l'utilisateur en faisant un copie et l'autre "Refdata" est positionné sur le réseau de mon entreprise et ne doit pas être modifier sinon cela pourrait poser problème à tout les autres utilisateurs. C'est pour cela que j'utilise deux fichiers séparément.

J'ai trouvé ce matin une solution à mon problème mais il y a un pb qui vient avec. J'avais pensé à supprimer toutes les liste dès lors que je ferme mon fichier et à les faire réapparaitre dès que je le réouvre. Cela résout le pb mais je suis obligé de sauvegarder mon fichier à chaque fois que je le fermé et cela est pas très bien.

Bonjour à tous

avec 365 le plus simple est fiable est de récupérer les sources de listes déroulantes par une requête PowerQuery : ainsi c'est toujours à jour.

J'ai trouvé une solution ! Si a chaque fois que j'ouvre mon fichier je copie colle le RefData dans le fichier principale j'aurais plus aucun soucis

RE

Il n'y a pas pire que le copier coller alors que les requêtes sont dynamiques...

J'ai trouvé que ça comme solution

J'ai trouvé une solution ! Si a chaque fois que j'ouvre mon fichier je copie colle le RefData dans le fichier principale j'aurais plus aucun soucis

Désolé pour le retard.

Une solution est celle-ci. A l'ouverture du fichier Refdata, on importe la feuille refdata dans le fichier test
Ensuite on créé un nom pour chaque liste tabtype, tabbinaire, etc... et les listes de validation comme actuellement
Une fois terminé, on referme le fichier refdata et on sauvegarde le fichier test.
A la fermeture du fichier test et vu que vous supprimez les listes de validation, on ajoute la suppression de la feuille refdata

dites moi ce que vous en pensez et je vous fais le code

Bonjour Dan, j'ai déjà parcouru cette idée, le problème c'est que lorsque vous supprimé les liste avant la fermeture il faut sauvegarder. Cela veut dire que le fichier ne peux pas être fermé sans sauvegarde. J'ai donc abandonné cette solution pour celle que j'ai évoqué plus haut qui marche parfaitement bien.

Merci de votre aide je vais passer le sujet comme résolue.

re,

1. si vous parlez de la solution copier coller --> https://forum.excel-pratique.com/s/goto/1066585 c'est celle que je vous propose justement plutot que de faire un copier coller, on copie la feuille d'un classeur vers l'autre avec cette ligne de code juste au début de la macro Affichage

Workbooks("Refdata.xlsm").Worksheets("RefData").Copy After:=ThisWorkbook.Sheets(1)

Après le code affichage est différent et beaucoup plus court

2. le problème c'est que lorsque vous supprimé les liste avant la fermeture il faut sauvegarder.

Ce n'est pas un souci, à la fermeture il suffit de sauvegarder sans faire apparaitre un message excel dès que les listes sont supprimées

NB : pour passer en un fil résolu, c'est comme ceci :

Rechercher des sujets similaires à "liste deroulante deux classeurs"