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

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

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

    Informations forums :
    Inscription : Octobre 2016
    Messages : 1 703
    Points : 2 813
    Points
    2 813
    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.

  2. #22
    Candidat au Club
    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
    Points : 4
    Points
    4
    Par défaut
    Toujours le même message d'erreur...


  3. #23
    Responsable
    Office & Excel


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

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

    Informations forums :
    Inscription : Novembre 2003
    Messages : 19 122
    Points : 55 955
    Points
    55 955
    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...
    ---------------

  4. #24
    Responsable
    Office & Excel


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

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

    Informations forums :
    Inscription : Novembre 2003
    Messages : 19 122
    Points : 55 955
    Points
    55 955
    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...
    ---------------

  5. #25
    Responsable
    Office & Excel


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

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

    Informations forums :
    Inscription : Novembre 2003
    Messages : 19 122
    Points : 55 955
    Points
    55 955
    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...
    ---------------

  6. #26
    Candidat au Club
    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
    Points : 4
    Points
    4
    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

  7. #27
    Responsable
    Office & Excel


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

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

    Informations forums :
    Inscription : Novembre 2003
    Messages : 19 122
    Points : 55 955
    Points
    55 955
    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...
    ---------------

  8. #28
    Candidat au Club
    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
    Points : 4
    Points
    4
    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

  9. #29
    Responsable
    Office & Excel


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

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

    Informations forums :
    Inscription : Novembre 2003
    Messages : 19 122
    Points : 55 955
    Points
    55 955
    Billets dans le blog
    131
    Par défaut
    Je saisis de moins en moins ce que tu souhaites réaliser. Cela ressemble fort à du publipostage. Connais-tu cet outil de Word? Il serait peut-être intéressant de l'utiliser.

    A ce stade, nous pouvons assez peu t'aider. L'intitulé de la discussion porte sur l'import des données d'un classeur, par sur une construction Excel/Word pour placer des valeurs XL dans un document WD.

    Tu serais bien avisé d'ouvrir une discussion dans le forum Conception et d'y exposer ton projet de la manière la plus claire et détaillée possible.
    "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...
    ---------------

  10. #30
    Candidat au Club
    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
    Points : 4
    Points
    4
    Par défaut
    Suivant les conseils de Pierre, j'ai remplacé le code précédemment publié par

    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
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
     
     
    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
     
    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
     
     
     
     
    Private Sub Precedent_Click()
    Unload UserForm3
    UserForm2.Show
    End Sub
     
    Private Sub Suivant_Click()
     
    Unload UserForm3
    UserForm4.Show
    End Sub
    je pense le supprimer également et repartir de 0

  11. #31
    Candidat au Club
    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
    Points : 4
    Points
    4
    Par défaut
    Je pense que tu as jamais saisie car jamais pris la peine de lire le 1er post
    moi je débute
    depuis une semaine je boss comme un ane sur un projet EN PLUS de mon travail. j'ai 90% de mon automatisation qui est finie, il me reste juste cette étape.

    Je demande juste qu'on m'écrive un truc propre avec les noms de mes fichiers et tout. On planche avec Riaolle pour reprendre dans chaque post les noms de mes documents etc histoire que je comprenne.

    Et apres on me dit "en direct c'est plus simple, ecris cela ....." avec juste des lignes théoriques. Sans mettre le code en entier depuis Private Sub jusqu'a End Sub
    Ben Dsl moi a mon niveau, ca m'aide pas.

    C'est comme demander à un enfant de 3 ans de lire du Victor Hugo
    Je suis fatigué
    Merci de ta compréhension

    Citation Envoyé par Pierre Fauconnier Voir le message
    Je saisis de moins en moins ce que tu souhaites réaliser. Cela ressemble fort à du publipostage. Connais-tu cet outil de Word? Il serait peut-être intéressant de l'utiliser.

    A ce stade, nous pouvons assez peu t'aider. L'intitulé de la discussion porte sur l'import des données d'un classeur, par sur une construction Excel/Word pour placer des valeurs XL dans un document WD.

    Tu serais bien avisé d'ouvrir une discussion dans le forum Conception et d'y exposer ton projet de la manière la plus claire et détaillée possible.

  12. #32
    Responsable
    Office & Excel


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

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

    Informations forums :
    Inscription : Novembre 2003
    Messages : 19 122
    Points : 55 955
    Points
    55 955
    Billets dans le blog
    131
    Par défaut
    Je t'ai donné des lignes de codes pratiques et pas théoriques.

    Maintenant, tu peux continuer à développer ton usine à gaz avec des userform4, des commandbutton3 et autres aberrations du même style et créer du code non maintenable qui s'écroulera comme un château de cartes à la première modification des classeurs ou des documents word OU écouter les conseils et tenter de les mettre en pratique. Je lâche rarement quelqu'un qui s'accroche, mais je ne donne jamais d'aide pour finaliser un projet qui est voué à merder à la moindre modif, préférant aider à construire un truc solide.

    A toi de prendre, ou de laisser. Moi, perso, je m'en fous un peu, mais lorsque je vois le code que tu donnes, je me dis que tu n'iras pas bien loin.

    Et si je suis intervenu, c'est parce que la discussion part en couilles et qu'il y a moyen de faire à peu près un million de fois plus simple et un millier de fois plus maintenable. Mais je peux aussi être fatigué, si tu veux...


    Et pour reprendre ton exemple, on ne sait pas lire du Victor Hugo si on n'apprend à lire du Victor Hugo. Libre à toi de rester avec ton livre d'images...

    Tiens, au passage... Puisque tu demandes du code propre

    application.vlookup... ne saurait à mon sens pas fonctionner puisque, de la lecture d'un des messages (n° 18) de la discussion, il semblerait que tu soit dans WORD pour réaliser ta macro et pas dans Excel (puisque tu ouvres Excel en instanciant un objet xlApp...

    Dès lors, ce serait xlapp.vlookup(... qu'il faudrait utiliser... Et dès lors, mon code d'importer des données d'un classeur à l'autre ne sert à rien, en effet, puisque tu importes d'un classeur XL vers Word et pas vers un autre Excel.

    Mettre en dur dans ton code le nom complet du classeur (en plus, qui est placé sur le bureau), c'est à coup sûr te préparer à un bug dès que tu renommeras ou déplaceras ton fichier. Et lorsque ton "appli" plantera sur ces multiples erreurs potentielles, c'est alors que tu seras encore plus fatigué...



    D'où ma proposition d'abandonner ton usine à gaz et de détailler ton projet dans le bon forum. Nous serons alors mieux armés pour t'aider efficacement et rapidement...
    "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...
    ---------------

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, 17h18
  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, 18h00
  3. Réponses: 8
    Dernier message: 12/10/2007, 13h54
  4. Réponses: 15
    Dernier message: 21/11/2006, 11h13
  5. Réponses: 1
    Dernier message: 07/08/2006, 22h14

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