Userform

Résolu
titi17-08 Messages postés 123 Statut Membre -  
titi17-08 Messages postés 123 Statut Membre -
Bonjour Le forum,
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

Résumé de la discussion

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.

Généré automatiquement par IA
sur la base des meilleures réponses
  1. f894009 Messages postés 17417 Date d'inscription   Statut Membre Dernière intervention   1 717
     
    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):
    Userform
    Private 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


    Module
    Function 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
    1
    1. titi17-08 Messages postés 123 Statut Membre 1
       
      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
      0
      1. f894009 Messages postés 17417 Date d'inscription   Statut Membre Dernière intervention   1 717 > titi17-08 Messages postés 123 Statut Membre
         
        Bonjour,

        Manque un "\" en fin de chemin de, votre classeur variable Dossier
        0
      2. titi17-08 Messages postés 123 Statut Membre 1 > f894009 Messages postés 17417 Date d'inscription   Statut Membre Dernière intervention  
         
        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
        0
  2. titi17-08 Messages postés 123 Statut Membre 1
     
    Bonjour,
    je vais regarder cela et vous remets un commentaire par la suite
    merci encore
    belle journée excelldiene
    1
  3. f894009 Messages postés 17417 Date d'inscription   Statut Membre Dernière intervention   1 717
     
    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
    1
  4. f894009 Messages postés 17417 Date d'inscription   Statut Membre Dernière intervention   1 717
     
    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
    2
    1. titi17-08 Messages postés 123 Statut Membre 1
       
      Les deux
      Un fichier basé de données et un fichier personal ou le code est dans le module créer un contrat normalement
      Merci
      0
    2. f894009 Messages postés 17417 Date d'inscription   Statut Membre Dernière intervention   1 717 > titi17-08 Messages postés 123 Statut Membre
       
      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
      0
    3. titi17-08 Messages postés 123 Statut Membre 1 > f894009 Messages postés 17417 Date d'inscription   Statut Membre Dernière intervention  
       
      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
      0
    4. f894009 Messages postés 17417 Date d'inscription   Statut Membre Dernière intervention   1 717 > titi17-08 Messages postés 123 Statut Membre
       
      Bonjour,

      je suis sous
      L' abus d'acool est préjudiciable a la sante. Mais c'est vous que cela regarde.
      En attendant, votre office quel version?

      Pour quelle raison l'entête doit etre sur une seule ligne ?
      Beaucoup plus simple pour la requête SQL de recherche
      0
    5. titi17-08 Messages postés 123 Statut Membre 1 > f894009 Messages postés 17417 Date d'inscription   Statut Membre Dernière intervention  
       
      Bonjour
      Pardon j’étais sous la fatigue hier soir
      Je travaille sur office 365 :)
      0