XL 2010 [Résolu] Créer liste dans formulaire depuis fichier fermé

jmh1

XLDnaute Occasionnel
Bonjour le forum,

Je voudrai créer un formulaire VBA utilisable par plusieurs utilisateurs en même temps.
Ce formulaire devra récupérer une liste de clients et de références dans un autre fichier Excel qui restera fermé.

Pour le formulaire, je pensais passé par une macro complémentaire. est-ce la bonne solution ?

Il me semblait avoir vu une solution pour récupérer une liste dans un fichier fermé !! Impossible de retrouver quelque chose !! Quelqu'un se souvient-il avoir cela en stock ?

Est-ce que mon projet est réalisable ou suis-je trop ambitieux ?

Merci pour votre aide
 

jmh1

XLDnaute Occasionnel
Bonjour Bruno,

Merci pour ta réponse.

J'ai essayé ton code en l'adaptant à mon fichier et j'ai un message d'erreur (ligne en rouge dans le code ci-dessous) :

"La formule que vous avez tapée contient une erreur"

Code:
With UserForm1
    .ComboBox1.Clear
    Chemin = "" & ThisWorkbook.Path & "\"
    Fichier = "[List_Clt_Ref.xlsx]"
    Onglet = "Liste'!"
   
        For k = 1 To 65000
            ChampALire = "R" & k & "C1"
            tx = Application.ExecuteExcel4Macro(Chemin & Fichier & Onglet & ChampALire)
Vois-tu où j'ai fait une erreur ?

Merci
 

jmh1

XLDnaute Occasionnel
Code:
With UserForm1
    .ComboBox1.Clear
    Chemin = "" & ThisWorkbook.Path & "\"
    Fichier = "[List_Clt_Ref.xlsx]"
    Onglet = "Liste'!"
   
        For k = 1 To 65000
            ChampALire = "R" & k & "C1"
            tx = Application.ExecuteExcel4Macro(Chemin & Fichier & Onglet & ChampALire)
 

youky(BJ)

XLDnaute Barbatruc
Je mets le code afin de pouvoir le copier
VB:
Sub vachercher()
Set dico = CreateObject("Scripting.Dictionary")
With UserForm1
.ComboBox1.Clear
Chemin = "'" & ThisWorkbook.Path & "\" 'le même dossier
Fichier = "[charpente.xls]" ' le nom du fichier à lire
Onglet = "Tuiles'!" 'le nom de l'onglet à lire
For k = 7 To 65000 'commencer à lire à la ligne 7
ChampALire = "R" & k & "C1" ' k est la ligne incrémentée C1 est col A C2 est B ainsi de suite
tx = Application.ExecuteExcel4Macro(Chemin & Fichier & Onglet & ChampALire)
  If tx = 0 Then Exit For
dico(tx) = ""
Next
a = dico.keys 'Obtient les éléments
For k = 0 To UBound(a) - 1 'trie éléments
For b = k + 1 To UBound(a)
   If a(b) < a(k) Then
   temp = a(b)
   a(b) = a(k)
   a(k) = temp
   End If
Next
Next
For k = 0 To dico.Count - 1 'mets éléments
.ComboBox1.AddItem a(k)
Next
.Show
End With
End Sub
Bruno
 

jmh1

XLDnaute Occasionnel
Merci beaucoup cela fonctionne à merveille

Peux-tu m'expliquer le fonctionnement des boucles et conditions après a=dico.keys,
le résultat est OK mais c'est juste pour ma culture personnelle.

Merci
 

youky(BJ)

XLDnaute Barbatruc
Bonjour,
Bravo d'essayer de piger c'est comme ça qu'on avance et retiens et découvre des trucs.
a=le tableau des éléments
La boucle suivante trie les éléments en ordre croissant
For k = 0 To UBound(a) - 1 'trie éléments
For b = k + 1 To UBound(a)
....jusqu'au 2 Next
Tu peux t'en passer si pas besoin de trier
Tu peux aussi te passer du dico si tu n'as pas de doublon
Voici un code ............sans dico ni trie
Possibilité de faire un combobox à 2 colonnes pour mettre tx et dx(code supplémentaire)
Bruno
VB:
Sub vachercher()
With UserForm1
.combobox1.Clear
Chemin = "'" & ThisWorkbook.Path & "\" 'le même dossier
Fichier = "[charpente.xls]" ' le nom du fichier à lire
Onglet = "Tuiles'!" 'le nom de l'onglet à lire
For k = 7 To 65000 'commencer à lire à la ligne 7
ChampALire = "R" & k & "C1" ' k est la ligne incrémentée C1 est col A C2 est B ainsi de suite
'ChampALire2 = "R" & k & "C2" 'ici on prend en col B
tx = Application.ExecuteExcel4Macro(Chemin & Fichier & Onglet & ChampALire)
'dx = Application.ExecuteExcel4Macro(Chemin & Fichier & Onglet & ChampALire2)
  If tx = 0 Then Exit For
  .combobox1.AddItem tx
Next
.Show
End With
End Sub
 

jmh1

XLDnaute Occasionnel
Merci pour tes explications.

J'ai une erreur à chaque fois que je quitte l'USF, à savoir :

Erreur d'exécution 91, Variable Objet ou variable de bloc With non définie.

Pourquoi cette erreur ? dois-je définir toutes les variables ? (je n'ai pas mis Option explicit dans mon code)

Merci de ta collaboration.
 

jmh1

XLDnaute Occasionnel
Bonsoir,

Je ne pense pas qu'il me manque de "End if", ci-dessous mon code si quelqu'un voit quelque chose

Merci

Code:
Sub RecupClt()

Set dico = CreateObject("Scripting.Dictionary")

    With UfAppli
        .LbClt.Clear
        Chemin = "'" & ThisWorkbook.Path & "\" 'le même dossier
        Fichier = "[BdD_Clt_Ref.xlsx]" ' le nom du fichier à lire
        Onglet = "Liste'!" 'le nom de l'onglet à lire
       
            For k = 1 To 100 'commencer à lire à la ligne 7
                ChampALire = "R1C" & k ' k est la ligne incrémentée C1 est col A C2 est B ainsi de suite
                tx = Application.ExecuteExcel4Macro(Chemin & Fichier & Onglet & ChampALire)
               
                If tx = 0 Then Exit For
               
                dico(tx) = ""
               
            Next
           
        a = dico.keys 'Obtient les éléments
       
        For k = 0 To UBound(a) - 1 'trie éléments
       
        For b = k + 1 To UBound(a)
       
        If a(b) < a(k) Then
            temp = a(b)
            a(b) = a(k)
            a(k) = temp
        End If
       
        Next
       
        Next
       
        For k = 0 To dico.Count - 1 'mets éléments
            .LbClt.AddItem a(k)
        Next
       
        .Show
       
    End With
   
   
   
End Sub
 

youky(BJ)

XLDnaute Barbatruc
Bonjour Tous,
Je ne vois rien de spécial dans le code sinon que l'on cherche les données en horizontal au lieu de vertical.
Je verrais plutôt un bug dans le code en événement combobox _Change ou en before_Close de l'user.
Tu peux toujours mettre en début de ta macro On Error Resume Next et tester pour voir mais il
serait préférable de trouver le pourquoi de l'erreur.
Ce code permet de passer outre l'erreur.
Bruno

Edit : le combo est'il bien alimenté des données demandées dans l'user avant fermeture ????
 

jmh1

XLDnaute Occasionnel
Bonjour,

J'ai essayé de mettre On error resume next et j'ai toujours le message d'erreur.

Mon fichier est une macro complémentaire, l'erreur viendrait-elle de là ?

Je joins mon fichier
 

jmh1

XLDnaute Occasionnel
Bonjour,

J'ai essayé de mettre On error resume next et j'ai toujours le message d'erreur.

Mon fichier est une macro complémentaire, l'erreur viendrait-elle de là ?

Je n'arrive pas joindre mon fichier (apparemment, on ne peux pas joindre de macro complémentaire)
 

jmh1

XLDnaute Occasionnel
J'ai transformé mon fichier en .xlsm (toujours l'erreur)

Je le joins mais il y a d'autres fichiers nécessaires que je ne joins pas mais je pense qu'il ne sont pas nécessaires pour trouver mon erreur.

L'erreur se produit uniquement quand je ferme l'USF (par la croix ou par le bouton)

Merci de votre aide
 

Fichiers joints

youky(BJ)

XLDnaute Barbatruc
Trouvé le bug . . .
Dans la macro Sub Appli() UfAppli.Show on ouvre
Dans la macro Initialize tu envoie vers la macro RecupClt
Il faut simplement supprimer le .Show qui n'a pas lieu d'être
et qui fait double action.
Bonne suite sans..... On error....
Bruno
 

jmh1

XLDnaute Occasionnel
Merci

des fois il faudrait réfléchir, dommag
 

Créez un compte ou connectez vous pour répondre

Vous devez être membre afin de pouvoir répondre ici

Créer un compte

Créez un compte Excel Downloads. C'est simple!

Connexion

Vous avez déjà un compte? Connectez vous ici.

Haut Bas