IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Macros et VBA Excel Discussion :

Import Données Classeur Excel Fermé (ou ouvert) vers une TextBox


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Homme Profil pro
    Ingénieur commercial
    Inscrit en
    Mars 2017
    Messages
    19
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Eure (Haute Normandie)

    Informations professionnelles :
    Activité : Ingénieur commercial
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Mars 2017
    Messages : 19
    Par défaut Import Données Classeur Excel Fermé (ou ouvert) vers une TextBox
    Bonjour à tous,
    Je travail à la simplification d'un document Word via des Userforms.
    J'utilise également un fichier Excel source : "Liste Adresse Client" ; qui est fermé. La 1ere colonne est "code"; la 2ème est "nom"; la 3ème est "adresse"; la 4ème est "code postal" et la 5ème est "ville".

    Je bloque sur un code
    Dans un UserForm, j'ai deux textbox (1 & 2) et deux Commandbutton ( "rechercher" & "publier" )

    Je souhaite :
    Ecrire manuellement un code client dans la textbox1 (Exemple : 4903)

    Cliquer sur Commandbutton "rechercher" entraîne la recherche de ce code (4903) dans la première colonne du fichier Excel "Liste Adresse Client" puis publie dans la textbox2 les informations (nom, adresse, code postal et ville) contenues dans la ligne correspondante.

    Ces informations doivent être disposées en 3 lignes dans la textbox2 :
    1ère ligne de la textbox2 : "nom"
    2èmeligne de la textbox2 : "adresse"
    3ème ligne de la textbox2 : "code postal" + "ville"


    Le Commandbutton "Publier" me servira à publier (ou non) le texte de la textbox2 dans un cadre de texte de mon fichier word. (Mais pour ce code, aucun souci)

    D'avance merci à tous pour vos aides, contributions et suggestions

  2. #2
    Membre Expert
    Femme Profil pro
    Ingénieur
    Inscrit en
    Octobre 2016
    Messages
    1 703
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 30
    Localisation : France, Indre et Loire (Centre)

    Informations professionnelles :
    Activité : Ingénieur
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2016
    Messages : 1 703
    Par défaut
    Bonjour,
    Où exactement repose ton problème? Peux-tu nous dire ce que tu as déjà fait? As-tu un message d'erreur? Si oui, lequel et où?
    Pour écrire et lire dans des classeurs fermés : consulte le tuto associé.
    Pour chercher des données dans une feuille Excel : interesse-toi à la fonction Application.Vlookup qui se comporte comme RECHERCHEV dans Excel.

    PS : petit conseil : tu poses une question sur VBA dans le forum Excel, il y a un forum entièrement dédié au VBA La prochaine fois écris dans le bon forum, tu auras plus de succes

  3. #3
    Membre averti
    Homme Profil pro
    Ingénieur commercial
    Inscrit en
    Mars 2017
    Messages
    19
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Eure (Haute Normandie)

    Informations professionnelles :
    Activité : Ingénieur commercial
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Mars 2017
    Messages : 19
    Par défaut
    Bonjour Riaolle

    Merci pour ta réponse
    J'ai vu le Tuto mentionné. Comme je suis débutant, je n'arrive pas à structurer mon code ni à comprendre toute les commandes du tuto afin d'adapter celui-ci à mon objectif, je tatonne depuis une demi journée sans succès et du coup j'ai tout viré...

    Ce que je recherche ici dans l'idéal serait que quelqu'un de plus expérimenté me fasse une trame de ce que je cherche à coder (avec explication, histoire que je revienne pas demander pour la même chose). Cela serai un gain de temps très précieux pour moi.

    Dsl pour le forum pas forcement le mieux adapté, je prend bonne note

  4. #4
    Membre Expert
    Femme Profil pro
    Ingénieur
    Inscrit en
    Octobre 2016
    Messages
    1 703
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 30
    Localisation : France, Indre et Loire (Centre)

    Informations professionnelles :
    Activité : Ingénieur
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2016
    Messages : 1 703
    Par défaut
    Si tu regardes dans le tutos, tu trouves un code expliquant comment lire dans un classeur fermé au § IV-A.L'exemple est un peu plus complet, car il est complété par des operations une fois le classeur ouvert, mais si tu regardes seulement ce qui t'intéresse, ça donne :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    Sub EcrireClasseurFerme()
        Dim Cn As ADODB.Connection
        Dim Fichier As String
        Dim NomFeuille As String
     
        '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
        '-----------------
     
        'JE FAIS CE QUE J'AI A FAIRE DANS LE CLASSEUR COMME SI IL ETAIT OUVERT
     
        '--- Fermeture connexion ---
        Cn.Close
        Set Cn = Nothing
     
    End Sub
    Ensuite, en ce qui concerne la recherche. Vlookup s'utilise comme suit :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Appication.VLookup(valeur à chercher, plage où chercher, 0)
    Si je comprend bien , dans ton cas la valeur à chercher sera TextBox1.Value ou TextBox2.Value
    La plage où chercher sera dans ce fameux classeur fermé.

  5. #5
    Membre averti
    Homme Profil pro
    Ingénieur commercial
    Inscrit en
    Mars 2017
    Messages
    19
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Eure (Haute Normandie)

    Informations professionnelles :
    Activité : Ingénieur commercial
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Mars 2017
    Messages : 19
    Par défaut
    Ok parfait ! Merci
    au pire ca sera pas bon du premier coup mais je vais retoucher au fur et a mesure.

    je tiens au courant

    Par contre, je ne sais pas comment coder :
    mettre les données de la ligne "X" colonne "Y" du fichier excel dans la première ligne de textbox2
    mettre les données de la ligne "X" colonne "W" du fichier excel dans la deuxième ligne de textbox2
    mettre les données de la ligne "X" colonne "z" du fichier excel dans la troisième ligne de textbox2

    (c'est la notion attribuer à une ligne, ou aller à la ligne que je connais pas! mais je vais chercher encore)

  6. #6
    Membre Expert
    Femme Profil pro
    Ingénieur
    Inscrit en
    Octobre 2016
    Messages
    1 703
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 30
    Localisation : France, Indre et Loire (Centre)

    Informations professionnelles :
    Activité : Ingénieur
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2016
    Messages : 1 703
    Par défaut
    1. Pour dire que tu veux faire référence à la cellule B1, tu as 2 possibilités:
      Code : Sélectionner tout - Visualiser dans une fenêtre à part
      1
      2
      Range("B1")
      Cells(1, 2)
      Avec Range, tu dois écrire le nom de la cellule, ici B1. Si ton numero de ligne est une variable, tu peux écrire Range("B" & i). Tu peux même le faire avec la colonne : Range(col & "1"), mais il faut que la variable col soit de type String (texte).
      Avec Cells, tu donnes le numéro de ligne et le numéro de colonne (B = n° 2)
    2. Pour faire plusieurs lignes dans une textbox, tu utilises la fonction Chr(10) qui veut dire "revenir à la ligne":
      Code : Sélectionner tout - Visualiser dans une fenêtre à part
      1
      2
      TextBox1.Value = "ma première ligne"
      TextBox1.Value = TextBox1.Value & Chr(10) & "ma deuxième ligne"


    D'après ce que tu me dis dans ton message, mis bout à bout, cela donne :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    Dim x As Long
        Dim w As Long
        Dim y As Long
        Dim z As Long
     
        Textbox1.Value = Cells(x, w).Value & Chr(10) & Cells(x, y) & Chr(10) & Cells(x, z)

  7. #7
    Rédacteur/Modérateur


    Homme Profil pro
    Formateur et développeur chez EXCELLEZ.net
    Inscrit en
    Novembre 2003
    Messages
    19 125
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 58
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur et développeur chez EXCELLEZ.net
    Secteur : Enseignement

    Informations forums :
    Inscription : Novembre 2003
    Messages : 19 125
    Billets dans le blog
    131
    Par défaut
    Salut.

    Les classeurs fermés, c'est rarement le top.

    Si ta source est organisée en données, tu aurais intérêt à utiliser MSQuery pour récupérer les données du classeur fermé. Ensuite, tu aliments le listbox avec les valeurs récupérées.
    "Plus les hommes seront éclairés, plus ils seront libres" (Voltaire)
    ---------------
    Mes billets de blog sur DVP
    Mes remarques et critiques sont purement techniques. Ne les prenez jamais pour des attaques personnelles...
    Pensez à utiliser les tableaux structurés. Ils vous simplifieront la vie, tant en Excel qu'en VBA ==> mon tuto
    Le VBA ne palliera jamais une mauvaise conception de classeur ou un manque de connaissances des outils natifs d'Excel...
    Ce ne sont pas des bonnes pratiques parce que ce sont les miennes, ce sont les miennes parce que ce sont des bonnes pratiques
    VBA pour Excel? Pensez D'ABORD en EXCEL avant de penser en VBA...
    ---------------

  8. #8
    Rédacteur/Modérateur


    Homme Profil pro
    Formateur et développeur chez EXCELLEZ.net
    Inscrit en
    Novembre 2003
    Messages
    19 125
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 58
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur et développeur chez EXCELLEZ.net
    Secteur : Enseignement

    Informations forums :
    Inscription : Novembre 2003
    Messages : 19 125
    Billets dans le blog
    131
    Par défaut
    Importe tes données puis travaille avec les données importées. Ce sera beaucoup plus simple. Là, tu te compliques inutilement la vie. Un principe en programmation : ne pas réinventer la roue sauf pour qu'elle tourne mieux, ce qui n'est pas le cas ici.

    Pour importer, vba ou msquery.
    "Plus les hommes seront éclairés, plus ils seront libres" (Voltaire)
    ---------------
    Mes billets de blog sur DVP
    Mes remarques et critiques sont purement techniques. Ne les prenez jamais pour des attaques personnelles...
    Pensez à utiliser les tableaux structurés. Ils vous simplifieront la vie, tant en Excel qu'en VBA ==> mon tuto
    Le VBA ne palliera jamais une mauvaise conception de classeur ou un manque de connaissances des outils natifs d'Excel...
    Ce ne sont pas des bonnes pratiques parce que ce sont les miennes, ce sont les miennes parce que ce sont des bonnes pratiques
    VBA pour Excel? Pensez D'ABORD en EXCEL avant de penser en VBA...
    ---------------

  9. #9
    Membre Expert
    Femme Profil pro
    Ingénieur
    Inscrit en
    Octobre 2016
    Messages
    1 703
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 30
    Localisation : France, Indre et Loire (Centre)

    Informations professionnelles :
    Activité : Ingénieur
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2016
    Messages : 1 703
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    With CommandButton1_Click()
    Application.VLookup(TextBox2.Value, ("A2:A2558"), 2, 0) = TextBox3.Value
    End With
    Je suis pas bien sûre de ce que tu veux faire ici ...

    CommandButton1_Click est une méthode liée à un bouton. Quand tu créés la méthode :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Sub CommandButton1_Click()
        '...
    End Sub
    Tu créés qqc qui indique ce qu'il se passe lorsqu'on clique sur le bouton --> tuto userform

    Le bloc With sert à simplifier une écriture à partir d'objets. Par exemple, tu veux travailler longtmeps sur une même feuille qui n'est pas ta feuille active, tu peux écrire :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    With Sheets("maFeuil")
        .Range("A1").Value = "toto"
        .Range("A2").Value = "titi"
        .Range("A3").Value = "tutu"
        'etc ....
    End With
    Ca t'évite d'écrire 3 x Sheets("maFeuil").

    Si j'ai bien compris : tu veux qu'en cliquant sur le bouton, le code aille chercher des infos dans un autre fichier. Je pense que la meilleure façon de procéder est d'ouvrir le fichier au moment où tu initialises le Userform, puis de le fermer au moment où tu fermes le UserForm. Ensuite tu mets tes fonctions de recherche dans le Sub CommandButton1_Click

    Autre commentaire par rapport à ton code, tu écris:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Application.VLookup(TextBox2.Value, ("A2:A2558"), 2, 0) = TextBox3.Value
    Comme je te l'ai expliqué plus haut, la syntaxe pour une plage de données est sous la forme :
    C'est un petit oublie dans ta formule
    Il vaudrait mieux que tu précises dans quelle feuille il faut chercher, surtout si tu as plusieurs classeurs ouverts. Quand tu écris seulement Range("A1:A2"), Excel va chercher dans la feuille active et ici, je ne suis pas sûre que la feuille active soit celle où il faut chercher. Il faudrait écrire quelque chose comme ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Workbooks("nom du fichier").Sheets("nom de la feuille").Range("A2:A2558")
    J'espère que tu arriveras à avancer avec ça

  10. #10
    Membre averti
    Homme Profil pro
    Ingénieur commercial
    Inscrit en
    Mars 2017
    Messages
    19
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Eure (Haute Normandie)

    Informations professionnelles :
    Activité : Ingénieur commercial
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Mars 2017
    Messages : 19
    Par défaut
    Nom : message erreur.JPG
Affichages : 1408
Taille : 66,9 Ko

    cher tous...ca coince encore
    Visiblement Vlookup n'est pas compris
    j'ai tenté avec "Application.Worksheetfunction.VLookup(....)"
    même résultat

    y a t-il une bibliothèque que je dois cocher dans les références et/ou controles supplémentaires ?

    merci

  11. #11
    Membre Expert
    Femme Profil pro
    Ingénieur
    Inscrit en
    Octobre 2016
    Messages
    1 703
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 30
    Localisation : France, Indre et Loire (Centre)

    Informations professionnelles :
    Activité : Ingénieur
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2016
    Messages : 1 703
    Par défaut
    Ce n'est pas ton Vlookup qui pêche, mais wkb.
    Tu demande au vlookup de chercher dans wkb, mais tu ne dis jamais ce qu'est wkb (du moins tu ne le dis pas dans le sub en question).
    2 solutions :
    1. Soit tu déclares wkb dans le sub et tu lui attribus une valeur avec le nom du workbook correspondant
    2. Soit tu fais de wkb une variable globale qui est initialisée à l'ouverture du userform et là tu peux l'utiliser tel quel dans tous tes sub du userform (je pense que cette 2ème solution est plus adaptée)

  12. #12
    Membre averti
    Homme Profil pro
    Ingénieur commercial
    Inscrit en
    Mars 2017
    Messages
    19
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Eure (Haute Normandie)

    Informations professionnelles :
    Activité : Ingénieur commercial
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Mars 2017
    Messages : 19
    Par défaut
    j'ai simplifié et repris avec le précédent conseil workbook, sheet etc

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    Private Sub CommandButton1_Click()
     
     
    TextBox3.Value = Application.WorkSheetfunction.VLookup(TextBox2.Value, Workbooks("Adresse Clients Excel Pour Contrat Auto").Sheets("Feuil1").Range("A2:A2558"), 2, 0).Value
     
    End Sub
    mais pas de résultat

  13. #13
    Rédacteur/Modérateur


    Homme Profil pro
    Formateur et développeur chez EXCELLEZ.net
    Inscrit en
    Novembre 2003
    Messages
    19 125
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 58
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur et développeur chez EXCELLEZ.net
    Secteur : Enseignement

    Informations forums :
    Inscription : Novembre 2003
    Messages : 19 125
    Billets dans le blog
    131
    Par défaut
    Application.WorksheetFunction.VLookup
    "Plus les hommes seront éclairés, plus ils seront libres" (Voltaire)
    ---------------
    Mes billets de blog sur DVP
    Mes remarques et critiques sont purement techniques. Ne les prenez jamais pour des attaques personnelles...
    Pensez à utiliser les tableaux structurés. Ils vous simplifieront la vie, tant en Excel qu'en VBA ==> mon tuto
    Le VBA ne palliera jamais une mauvaise conception de classeur ou un manque de connaissances des outils natifs d'Excel...
    Ce ne sont pas des bonnes pratiques parce que ce sont les miennes, ce sont les miennes parce que ce sont des bonnes pratiques
    VBA pour Excel? Pensez D'ABORD en EXCEL avant de penser en VBA...
    ---------------

  14. #14
    Membre Expert
    Femme Profil pro
    Ingénieur
    Inscrit en
    Octobre 2016
    Messages
    1 703
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 30
    Localisation : France, Indre et Loire (Centre)

    Informations professionnelles :
    Activité : Ingénieur
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2016
    Messages : 1 703
    Par défaut
    Bonjour Pierre Fauconnier,
    Normalement Application.VLookup tout court marche aussi. En tout cas j'ai essayé chez moi, avec un tableau tout simple et j'ai un résultat tout à fait normal.
    J'ai lu sur d'autres discussions que la propriété WorksheetFunction était arrivée plus tard. Tout ce qui peut s'écrire Application.WorksheetFunction. peut s'écrire aussi tout simplement avec Application.
    Les différences?
    • Après Application. on ne nous propose pas les différentes fonctions de classeur, alors que c'est le cas avec Application.WorksheetFunction. On est mieux guidé avec Application.WorksheetFunction.
    • La gestion d'erreur, d'après ce que j'ai compris, est plus simple avec Application, parce que les erreurs seraient mieux identifiées. C'est pourquoi je préfère Applicatino. tout court. Si j'hésite vraiment sur la syntaxe j'écris avec Application.WorksheetFunction, puis j'efface le WorksheetFunction.

  15. #15
    Rédacteur/Modérateur


    Homme Profil pro
    Formateur et développeur chez EXCELLEZ.net
    Inscrit en
    Novembre 2003
    Messages
    19 125
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 58
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur et développeur chez EXCELLEZ.net
    Secteur : Enseignement

    Informations forums :
    Inscription : Novembre 2003
    Messages : 19 125
    Billets dans le blog
    131
    Par défaut
    Citation Envoyé par riaolle Voir le message
    [...]Normalement Application.VLookup tout court marche aussi[...]
    Je ne connaissais pas cette différenciation. Merci
    "Plus les hommes seront éclairés, plus ils seront libres" (Voltaire)
    ---------------
    Mes billets de blog sur DVP
    Mes remarques et critiques sont purement techniques. Ne les prenez jamais pour des attaques personnelles...
    Pensez à utiliser les tableaux structurés. Ils vous simplifieront la vie, tant en Excel qu'en VBA ==> mon tuto
    Le VBA ne palliera jamais une mauvaise conception de classeur ou un manque de connaissances des outils natifs d'Excel...
    Ce ne sont pas des bonnes pratiques parce que ce sont les miennes, ce sont les miennes parce que ce sont des bonnes pratiques
    VBA pour Excel? Pensez D'ABORD en EXCEL avant de penser en VBA...
    ---------------

  16. #16
    Rédacteur/Modérateur


    Homme Profil pro
    Formateur et développeur chez EXCELLEZ.net
    Inscrit en
    Novembre 2003
    Messages
    19 125
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 58
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur et développeur chez EXCELLEZ.net
    Secteur : Enseignement

    Informations forums :
    Inscription : Novembre 2003
    Messages : 19 125
    Billets dans le blog
    131
    Par défaut
    Si tu veux vraiment t'entêter à travailler en direct sur le classeur plutôt qu'après un import, tu devrais au moins travailler avec des objets clairement définis.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    Dim wk as workbook
    dim sh as worksheet
    dim rng as range
     
    set wk = workbooks(...)
    set sh = wk.worksheets(...)
    set rng = sh.range(...)
    Tu pourrais déjà bien plus facilement voir où le problème se pose.

    Il pourrait être intéressant d'instancier le classeur à l'ouverture
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    set wk = workbooks.open(...)
    "Plus les hommes seront éclairés, plus ils seront libres" (Voltaire)
    ---------------
    Mes billets de blog sur DVP
    Mes remarques et critiques sont purement techniques. Ne les prenez jamais pour des attaques personnelles...
    Pensez à utiliser les tableaux structurés. Ils vous simplifieront la vie, tant en Excel qu'en VBA ==> mon tuto
    Le VBA ne palliera jamais une mauvaise conception de classeur ou un manque de connaissances des outils natifs d'Excel...
    Ce ne sont pas des bonnes pratiques parce que ce sont les miennes, ce sont les miennes parce que ce sont des bonnes pratiques
    VBA pour Excel? Pensez D'ABORD en EXCEL avant de penser en VBA...
    ---------------

  17. #17
    Rédacteur/Modérateur


    Homme Profil pro
    Formateur et développeur chez EXCELLEZ.net
    Inscrit en
    Novembre 2003
    Messages
    19 125
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 58
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur et développeur chez EXCELLEZ.net
    Secteur : Enseignement

    Informations forums :
    Inscription : Novembre 2003
    Messages : 19 125
    Billets dans le blog
    131
    Par défaut
    C'est normal que tu aies une erreur

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    TextBox3.Value = Application.VLookup(TextBox2.Value, wbk.Sheets("Feuil1").Range("A2:A2558"), 2, 0).Value
    Tu précises que ton tableau est A2:A2558 (une seule colonne, donc) et tu demandes à VLookUp d'aller chercher la valeur dans la deuxième colonne...

    Tu dois utiliser A2:B2558
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    TextBox3.Value = Application.VLookup(TextBox2.Value, wbk.Sheets("Feuil1").Range("A2:B2558"), 2, 0).Value
    Cela étant, tu aurais intérêt à travailler avec des tableaux de données (ListObject en vba), ce serait mille fois plus simple.
    "Plus les hommes seront éclairés, plus ils seront libres" (Voltaire)
    ---------------
    Mes billets de blog sur DVP
    Mes remarques et critiques sont purement techniques. Ne les prenez jamais pour des attaques personnelles...
    Pensez à utiliser les tableaux structurés. Ils vous simplifieront la vie, tant en Excel qu'en VBA ==> mon tuto
    Le VBA ne palliera jamais une mauvaise conception de classeur ou un manque de connaissances des outils natifs d'Excel...
    Ce ne sont pas des bonnes pratiques parce que ce sont les miennes, ce sont les miennes parce que ce sont des bonnes pratiques
    VBA pour Excel? Pensez D'ABORD en EXCEL avant de penser en VBA...
    ---------------

  18. #18
    Membre averti
    Homme Profil pro
    Ingénieur commercial
    Inscrit en
    Mars 2017
    Messages
    19
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Eure (Haute Normandie)

    Informations professionnelles :
    Activité : Ingénieur commercial
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Mars 2017
    Messages : 19
    Par défaut
    Bonjour Pierre,

    Merci pour ton retour.

    Je m'y remet de ce pas, afin de clarifier le code.

    Je NE SUIS PAS CONTRE une méthode / une idée / un chemin plus simple
    je débute, j'ai appris et réalisé beaucoup depuis 1 semaine sur ce doc, mais je n'ai pas connaissance de comment faire "des tableaux de données (ListObject en vba)", ou "travailler en import" (tes 2 conseils).

    Si c'est plus simple : je prend

    juste un petit mot d'explication serai le bienvenu, un mini tuto.
    J'ai été autodidacte jusqu'à ce problème. La j'atteins mes limites
    d'ou le forum

    Merci

  19. #19
    Rédacteur/Modérateur


    Homme Profil pro
    Formateur et développeur chez EXCELLEZ.net
    Inscrit en
    Novembre 2003
    Messages
    19 125
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 58
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur et développeur chez EXCELLEZ.net
    Secteur : Enseignement

    Informations forums :
    Inscription : Novembre 2003
    Messages : 19 125
    Billets dans le blog
    131
    Par défaut
    Pour copier une plage (du classeur actif ou d'un autre classeur), tu peux utiliser une fonction générique "qui ne fait que ça"... Ca clarifie le code

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    Function RangeCopy(WorksheetName As String, RangeAddress As String, Optional wk As Workbook) As Range
      Dim sh As Worksheet
      Dim rng As Range
     
      If wk Is Nothing Then Set wk = ActiveWorkbook
      Set sh = wk.Worksheets(WorksheetName)
      Set RangeCopy = sh.Range(RangeAddress)
    End Function
    Tu peux alors l'utiliser comme ci-dessous
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
     
    Sub TestCopy()
      Dim SourceWk As Workbook
      Dim WkName As String
      Dim ShName As String
      Dim RngName As String
     
      WkName = "c:\tests\source.xlsx"
      ShName = "Données"
      RngName = "A1:D10"
     
      Set SourceWk = Workbooks.Open(WkName)
      ThisWorkbook.Activate
      RangeCopy(ShName, RngName, SourceWk).Copy Range("a1")
      SourceWk.Close savechanges:=False
    End Sub
    Après, tu utilises VLookUp dans la plage copiée de ton classeur de travail. Si tu as besoin de réaliser une mise à jour des données, tu peux lancer uniquement la procédure qui convient, ce qui est impossible si les lignes de code sont noyées dans un code spaghetti.

    Tu as toujours intérêt à découper ton code en petites fonctions qui n'ont qu'une et une seule responsabilité. Tu maintiens ainsi ton code plus facilement. De plus, tu peux réutiliser beaucoup plus facilement le code que tu écris sans devoir réinventer la roue à chaque fois..
    "Plus les hommes seront éclairés, plus ils seront libres" (Voltaire)
    ---------------
    Mes billets de blog sur DVP
    Mes remarques et critiques sont purement techniques. Ne les prenez jamais pour des attaques personnelles...
    Pensez à utiliser les tableaux structurés. Ils vous simplifieront la vie, tant en Excel qu'en VBA ==> mon tuto
    Le VBA ne palliera jamais une mauvaise conception de classeur ou un manque de connaissances des outils natifs d'Excel...
    Ce ne sont pas des bonnes pratiques parce que ce sont les miennes, ce sont les miennes parce que ce sont des bonnes pratiques
    VBA pour Excel? Pensez D'ABORD en EXCEL avant de penser en VBA...
    ---------------

  20. #20
    Membre averti
    Homme Profil pro
    Ingénieur commercial
    Inscrit en
    Mars 2017
    Messages
    19
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Eure (Haute Normandie)

    Informations professionnelles :
    Activité : Ingénieur commercial
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Mars 2017
    Messages : 19
    Par défaut
    Merci

    Pour le premier paragraphe de code, je le met apres "initialize ()"

    pis, je cromprend rien car a coup de "worksheetname" je sais pas si je fais appel a mon excel ou mon word.

    Je suis pas sur de repondre à ma volontée initiale
    j'ai une feuille word, avec plein de donnée a mettre dedans (je régis tout avec 8 userform)
    un userform est dédié à la recherche, puis a la publication des coordonnées des clients
    ces coordonnées sont dans un fichier excel

    j'ai un userform avec 3 textbox et un bouton
    textbox1 -> j'indique le numéro du client
    bouton -> je valide et publie les données dans les texbox 2 et 3


    j'ai aucun a priori sur le code, la méthode

Discussions similaires

  1. Importer des données de 250 feuilles vers une seule
    Par Bryan78 dans le forum Macros et VBA Excel
    Réponses: 5
    Dernier message: 30/04/2008, 16h18
  2. Copier des données de classeurs Excel fermés vers un classeur ouvert
    Par gwen-al dans le forum Macros et VBA Excel
    Réponses: 16
    Dernier message: 11/03/2008, 17h00
  3. Réponses: 8
    Dernier message: 12/10/2007, 12h54
  4. Réponses: 15
    Dernier message: 21/11/2006, 10h13
  5. Réponses: 1
    Dernier message: 07/08/2006, 21h14

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo