Liste déroulante avec données dans classeur fermé

Bonjour à vous chers internautes adeptes de excel. Ma question est simple à comprendre mais à résoudre ...

Je souhaite réaliser des listes déroulantes dans plusieurs fichiers seulement je ne veut garder qu'une seule base pour mes données.

Donc mes données sont dans un classeur fermé et je veux que mes listes puissent s'y référer.

Comment faire help !!

J'ai lu plusieurs choses notamment une histoire de ActiveX ComboX que je n'ai pas compris.

Merci de votre aide à plus

Bonjour,

Où veux tu tes listes déroulantes?

Dans une feuille excel ou dans un Formulaire?

A mon avis, quoiqu'il en soit il faudra faire ouvrir tes fichiers sources en arrière plan afin d'aller y puiser les données souhaitées.

Ou bien copier temporairement tes données dans le fichier "d'exploitation" et les supprimer une fois l'usage terminé.

Et bien je veux que mes listes soient dans un onglet excel, une liste par cellule. Ce sont des listes de choix pour l'utilisateur. J'aimerai justement ne pas avoir à ouvrir le classeur contenant les bases de données pour une liste. Et même si je copié l'onglet contenant les données dans mon classeur à son ouverture. Mes listes seraient inactives à moins que je les paramètre au préalable avec le bon nom de l'onglet que je vais copier.

Qui a des idées svp c'est un travail que je fais pour mon responsable donc je souhaiterai que ce soit propre.

Tu peux copier les les données dans ton classeur,Dans un onglet caché a l ouverture.

Ensuite tu initialises l alimentation de tes listes via une validation a partir de l'onglet qui contient tes données

Pourrais tu nous passer une copiebde tes fichiers?

Je ne peux pas vraiment te transferer mes fichiers car ils contiennent des données confidentielles. Mais je pense que l'idée de copier l'onglet à l'ouverture est bonne je vais essayer sa

Re à ceux qui suivent mon problème. J'ai décidé de copier à l'ouverture de mon classeur l'onglet (de l'autre classeur) contenant ma base de données. Seulement j'ai un problème à la ligne _Workbooks("Feuille_Offre_Customer.xlsm").Worksheets("Feuille pour Liste").Range("A1").Activate_

Private Sub Workbook_Activate()

Cheminx = ThisWorkbook.Path & "\Commun\00 - CHALLENGE\A.Pagano\CONSTRUCTION DOSSIER COMMANDE CLIENT\00-Portes QOC\"

Cheminx = Replace(Cheminx, "\Offre QOC", "")

estouvert = False

For Each fich In Workbooks

If fich.Name = "Feuille_Commande_Client.xlsm" Then estouvert = True

Next

If estouvert = False Then

Workbooks.Open Filename:=Cheminx & "Feuille_Commande_Client.xlsm"

'Workbooks.Open(Cheminx + "Feuille_Commande_Client.xlsm").Activate

End If

Workbooks("Feuille_Commande_Client.xlsm").Worksheets("Feuille pour Listes").Cells.Copy

Workbooks("Feuille_Offre_Customer.xlsm").Worksheets("Feuille pour Liste").Range("A1").Activate

ActiveSheet.Paste

Workbooks("Feuille_Commande_Client.xlsm").Close

End Sub


Il me mettent erreur '1004' mais je pense qu'il ne peut pas selectionner la range puisqu'il a des valeurs copiées encore selectionnées. Qui aurait donc une astuce pr contourner el problemo

Bonjour Toinou, bonjour le fil

Tu peux utiliser la technique ADO pour remplir ta Combobox

Voici le code principal

Sub RemplirCbx(ObjCbx As MSForms.ComboBox, sPathBdD As String, sTable As String, sCol As String)
  ' ObjCbx = Objet Combobox qui va recevoir le remplissage
  ' sPathBdD = Chemin complet + nom de la base Excel
  ' sTable = nom de l'onglet dans le fichier
  ' sCol = Lettre de la colonne dont la valeur est à retourner
  Dim sSQL As String, sField As String, IdField As Integer
  Dim MaCol As New Collection
  ' Calculer le numéro du champ à récupérer
  IdField = Range(sCol & "1").Column - 1
  ' Créer une nouvelle instance ADO
  Set Cnn = New ADODB.Connection
  ' Créer la connection
  Cnn.Open "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & sPathBdD & ";Extended Properties='Excel 8.0;HDR=Yes'"
  ' Vider la combobox en question
  ObjCbx.Clear
  ' Préparer la requête
  If InStr(1, sTable, " ") > 0 Then
    sSQL = "SELECT * FROM ['" & sTable & "$']"
  Else
    sSQL = "SELECT * FROM [" & sTable & "$]"
  End If
  ' Créer le Recordset
  Set Rs = New ADODB.Recordset
  With Rs
    .Open sSQL, Cnn, adOpenStatic
    Do While Not .EOF
      ' Mémoriser le contenu du champ n° col-1
      On Error Resume Next
      sField = Rs.Fields(IdField).Value
      MaCol.Add sField, sField
      ' Si aucune erreur
      If Err.Number = 0 Then
        ObjCbx.AddItem sField
        ObjCbx.List(ObjCbx.ListCount - 1, 1) = Rs.Fields(0)
        ObjCbx.List(ObjCbx.ListCount - 1, 2) = Rs.Fields(2)
        ObjCbx.List(ObjCbx.ListCount - 1, 3) = Rs.Fields(3)
      End If
      Err.Clear
      On Error GoTo 0
      ' Enregistrement suivant
      .MoveNext
    Loop
    .Close
  End With
  ' Fermeture de la Bdd
  Set Rs = Nothing
  Cnn.Close: Set Cnn = Nothing
End Sub

Et la ligne que j'utilise pour lancer la procédure

Call RemplirCbx(Me.CbB_Poste, sPath & sBdD, "PERSONNEL", "H")

A+

Salut bruno and the others, alors j'ai vu ton post avec la méthode des combobox. Je te remercie mais en l'occurence je me suis affranchi de cette méthode car je travaille directement sur le classeur. J'ai trouvé la solution à mon problème. Voici comment copier coller l'onglet d'un classeur dans un autre à l'ouverture. Attention de bien utiliser le "_Open" dans thisworkbook. C'est vraiment une méthode basique :

Private Sub Workbook_Open()

Application.ScreenUpdating = False

Application.Visible = False

Cheminx = ThisWorkbook.Path & "\Commun\00 - CHALLENGE\A.Pagano\CONSTRUCTION DOSSIER COMMANDE CLIENT\00-Portes QOC\"

Cheminx = Replace(Cheminx, "\Offre QOC", "")

Workbooks.Open Filename:=Cheminx & "Feuille_Commande_Client.xlsm"

Workbooks("Feuille_Commande_Client.xlsm").Worksheets("Feuille pour Listes").Cells.Copy

Workbooks("Feuille_Offre_Customer.xlsm").Activate

Sheets("Feuille pour Liste").Activate

Range("A1").Select

ActiveSheet.Paste

Sheets("Feuille de saisies").Activate

Range("B27").Select

Application.DisplayAlerts = False

Workbooks("Feuille_Commande_Client.xlsm").Close

Application.ScreenUpdating = True

Application.Visible = True

End Sub

Re,

Dans ce cas, pourquoi ne pas utiliser OLE automation (plus propre)

  Dim CheminX As String, Wbk As Workbook
  CheminX = ThisWorkbook.Path & "\Commun\00 - CHALLENGE\A.Pagano\CONSTRUCTION DOSSIER COMMANDE CLIENT\00-Portes QOC\"
  CheminX = Replace(CheminX, "\Offre QOC", "")
  ' Récupérer des données d'un classeur fermé par OLE automation
  ' Ouverture de l'objet en question
  Set Wbk = GetObject(PathName:=CheminX & "Feuille_Commande_Client.xlsm")
  ' Copie des données
  Wbk.Worksheets("Feuille pour Listes").Cells.Copy _
      Destination:=Workbooks("Feuille_Offre_Customer.xlsm").Sheets("Feuille pour Liste").Range("A1")
  ' Fermeture de l'objet (workbook) sans sauvegarde
  Wbk.Close SaveChanges:=False
  ' Activer la feuille de saisie (au cas ou)
  Sheets("Feuille de saisies").Activate
  Range("B27").Select

A+

J'ai bien fais de relook ce post. Un grand merci à toi Bruno je ne connaissait pas cette méthode mais elle est bien plus propre que du basique comme j'avais pu le faire.

Encore merci ça marche niquel et ça m'évitera des petits bug entre fichiers !!

++

Rechercher des sujets similaires à "liste deroulante donnees classeur ferme"