Userform
Résolutiti17-08 Messages postés 123 Statut Membre -
j'ai un userform avec un combobox pour alimenter les données de l'userform et les remplir dans un classeur par la suite.
je souhaiterais récupérer la liste dans un classeur fermé
j'ai essayé ce code mais il me met une erreur 13
merci pour votre retour
belle journée
Sub Nom_Freelance_Change()
Workbooks.Open "C:\Users\Sandrine\Desktop\CANDIDATS\CANDIDATS implémentés dans le Book\BOOK candidats_ Version FINALE en cours.xlsm"
ActiveWindow.WindowState = xlMinimized
Nom_Freelance.RowSource = Sheets("GLOBAL").Range("A2:A4000")
End Sub
4 réponses
Problématique centrale : récupérer une liste pour alimenter un combobox à partir d'un classeur fermé en VBA, l'erreur 13 (type mismatch) apparaissant lors de l'ouverture et de l'affectation de RowSource. Des réponses proposent plusieurs approches: utiliser une connexion ADODB/Jet OLEDB pour interroger une feuille d'un classeur fermé, employer une macro Excel 4 via ExecuteExcel4Macro, ou lire les cellules avec une fonction dédiée. D'autres pistes mentionnent des détails pratiques comme le nom exact du fichier, le nom de la feuille et la plage A2:A4000, ou la nécessité d'ouvrir le classeur avant d'alimenter le contrôle. En cas de fichier au format différent (.xlsm vs .xlsb) ou d'incompatibilité de chaîne de connexion, il est recommandé de normaliser l'extension et de vérifier l'accessibilité du chemin.
-
Bon jour,
https://answers.microsoft.com/fr-fr/msoffice/forum/all/executeexcel4macro/03971baf-a1ce-4407-bbdc-2a96ee3e7697
En utilisant la fonction:Function LireClosedCell(Dossier As String, _ Fichier As String, Feuille As String, Adr As String)
vous arriverez a vos fin.
un exemple (salut michel_m):
UserformPrivate Sub CommandButton1_Click() Dim Dossier As String, Fichier As String, Feuille As String, Adr As String Dossier = "E:\_Docs_Prog_Excel\_Excel_a_traiter\Excel_ferme_ado_xl4\michel_m_recup_x_fichier\" Fichier = "sv1.xls" Feuille = "Feuil1" For n = 1 To 18 'nombre de cellule a recuperer Adr = "B" & n 'colonne et ligne VC = LireClosedCell(Dossier, Fichier, Feuille, Adr) ComboBox1.AddItem VC Next n End Sub
ModuleFunction LireClosedCell(Dossier As String, Fichier As String, Feuille As String, Adr As String) Dim R As Long, C As Long, F As String R = Range(Adr).Row C = Range(Adr).Column F = ("'" & Dossier & "[" & Fichier & "]" & Feuille & "'!R" & R & "C" & C) LireClosedCell = ExecuteExcel4Macro(F) End Function
Par contre 3999 items dans une combobox, ca pique les yeux-
Bonjour f894009
alors j'ai essayé ton code en modifiant pour mon fichier.
il m'ouvre le chemin et je dois sélectionner le fichier correspondant ... je pensais qu'il ne l'ouvrait pas ;(
après il me met une erreur d'exécution '-2147352571(800200005)
et surligne mon texte titre de combobox .additemvc
ma volonté était de retrouver le nom d'une personne dans le fichier fermé et de remplir les autres champs de mon userform..Sub Nom_Freelance_Change()
Dim Dossier As String, Fichier As String, Feuille As String, Adr As String
Dossier = "C:\Users\Sandrine\Desktop\PERSO\SOCIETE\Suivi SJTC\Candidats"
Fichier = "Base de données Frelance.xls"
Feuille = "GLOBAL"
For n = 3 To 4000 'nombre de cellule a recuperer
Adr = "A" & n 'colonne et ligne
VC = LireClosedCell(Dossier, Fichier, Feuille, Adr)
Nom_Freelance.AddItem VC
Next n
End Sub
Merci par avance
belle journée- Bonjour f894009
Je vous remercie pour votre aide,
j'ai ecris cela et j'ai une erreur indice n'appartient pas a la selection .. j'avoue que je suis un peu paumé
merci et belle journée
Sub CommandButton1_Click()
Dim RechercheNom As String
Dim chemin As String
Dim Fichier As String
Dim Plage As String
Dim req_SQL As String
Dim c As Range
'Plage = Range(Cells(3, 1), Cells(3, 4000))
chemin = "C:\Users\Sandrine\Desktop\PERSO\SOCIETE\Suivi SJTC\Candidats\"
Fichier = "Base de données Freelance.xls"
RechercheNom = InputBox(" Quel est le nom recherché ?")
Dim Cn As ADODB.Connection
'Définit le classeur fermé servant de base de données
Set Cn = New ADODB.Connection
'--- Connexion ---
With Cn
.Provider = "Microsoft.Jet.OLEDB.4.0"
.ConnectionString = "Data Source=" & Fichier & _
";Extended Properties=Excel 8.0;"
.Open
With Worksheets("GLOBAL").Range("A3:A4000")
MsgBox ("okt")
Range("A3:A4000") = .Find(RechercheNom, LookIn:=xlValues)
If Not c Is Nothing Then
firstAddress = c.Address
Do
Me.Nom_Freelance.Value = RechercheNom
Set c = .FindNext(c)
Loop While Not c Is Nothing
End If
End With
End With
Cn.Close
Set Cn = Nothing
End Sub
-
-
Bonjour,
je vais regarder cela et vous remets un commentaire par la suite
merci encore
belle journée excelldiene -
Bonjour,
Pouvez mettre votre fichier a dispo?
Vous faites une connection ADO fichier ferme et semble-t-il vous voulez faire comme si ce fichier est ouvert excel, pas marche
un exemple de code pour classeur xls si vous souhaitez plancher un peu avant de mettre a dispo votre fichier
'Voici une macro qui permet de se connecter à un classeur afin d'extraire le contenu de la feuille nommée "Feuil1".
'VBA
Sub RequeteClasseurFerme() Dim cn As ADODB.Connection Dim Fichier As String Dim NomFeuille As String, texte_SQL As String Dim Rst As ADODB.Recordset 'Définit le classeur fermé servant de base de données Fichier = "C:\monClasseurBase.xls" 'Nom de la feuille dans le classeur fermé NomFeuille = "Feuil1" Set cn = New ADODB.Connection '--- Connection --- With cn .Provider = "Microsoft.Jet.OLEDB.4.0" .ConnectionString = "Data Source=" & Fichier & _ ";Extended Properties=Excel 8.0;" .Open End With '----------------- 'Définit la requête. '/!\ Attention à ne pas oublier le symbole $ après le nom de la feuille. texte_SQL = "SELECT * FROM [" & NomFeuille & "$]" Set Rst = New ADODB.Recordset Set Rst = cn.Execute(texte_SQL) 'Ecrit le résultat de la requête dans la cellule A2 Range("A2").CopyFromRecordset Rst '--- Fermeture connexion --- cn.Close Set cn = Nothing End Sub
Pour transmettre un fichier,
Veillez a ce qu'il n'y ait PAS DE DONNEES CONFIDENTIELLES
il faut passer par un site de pièce jointe tel que cjoint.com
Allez sur ce site : https://www.cjoint.com/
Clic sur parcourir,
Cherche ton fichier,
clic sur ouvrir,
Clic sur "Créer le lien cjoint",
Copier le lien,
Revenir ici le coller dans une réponse...
ou
www.grosfichiers.com
ou
www.transfernow.net 'fichier jusqu'a 4G-
bonjour
voici le lien de mon fichier personal et la base sur l'autre lien
j'ai essayé d'écrire le code mais j'ai une erreur en fin de requête
merci de votre aide
belle journée
https://www.cjoint.com/c/KIvfNwzF1Iz
https://www.cjoint.com/c/KIvfPtdS75z
-
-
Bonjour,
Je recupere les fichier et regarde la chose
Le fichier personnal.xlsb ne fait l'affaire, impossible a ouvrir!!
Vous devez avoir un .xlsm
"Base de données Frelance.xls" nom fichier dans votre code d'origine
Base-de-données-Freelance.xlsx nom fichier mis a dispo
Lequel est le bon car la chaine de connection n'est pas la meme-
-
Re,
Fichier base ok, mais xlsb pas ok, rien.
Mettez un fichier xlsm a dispo pas de xlsb
Quel version office avez vous?
Ok, c'est bon pour xlsb. Nom fichier personaltest pas bon seulement personal
Les entetes de colonne fichier base posent un petit probleme. Doivent etre sur une seule ligne
Je reprends la chose demain -
Bonsoir f894009,
Merci pour votre aide
je suis sous
voici le fichier modèle qui est en lien avec le personal( a la base le fichier sous le nom de personal.xlsb, j'ai du le modifier pour l'enregistrer ailleurs..:( )
Pour quelle raison l'entête doit etre sur une seule ligne ?( la recherche sera nulle car cellule fusionnées ?
lien du fichier modele : https://www.cjoint.com/c/KIvtEMhj4pz
Merci et belle soirée
Titi -
-
-