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

VBA Word Discussion :

Recherche de données dans Excel depuis Word [WD-2007]


Sujet :

VBA Word

  1. #1
    Membre régulier Avatar de Escandil
    Profil pro
    Inscrit en
    Mai 2003
    Messages
    84
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France, Côte d'Or (Bourgogne)

    Informations forums :
    Inscription : Mai 2003
    Messages : 84
    Points : 70
    Points
    70
    Par défaut Recherche de données dans Excel depuis Word
    Bonjour,


    Je souhaite dans un document Word qui comporte déjà des formulaires (hérités, pas d'ActiveX) récupérer des données au sein d'un fichier excel.

    Je récupère ces données à partir d'un code postal et je comptais donc utiliser le publipostage pour mes besoins.
    Après avoir lu les tutoriaux, je me rends compte que cela ne cadre pas vraiment avec mes besoins. En effet, je souhaiterais que l'utilisateur entre à la main un code postal et récupérer les données à partir de là. Le fichier excel comportant quelques milliers de lignes, naviguer de l'un à l'autre n'est pas une option.

    Je suis totalement débutant en word et VBA word, mais je me débrouille en macro excel. Je pense donc être capable d'ajouter un peu de code dans word, mais je manque cruellement d'idées.

    Je me tourne donc vers vous pour obtenir quelques pistes pour orienter mes recherches.

    Merci d'avance.

  2. #2
    Rédacteur/Modérateur

    Avatar de Heureux-oli
    Homme Profil pro
    Contrôleur d'industrie
    Inscrit en
    Février 2006
    Messages
    21 087
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 59
    Localisation : Belgique

    Informations professionnelles :
    Activité : Contrôleur d'industrie
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 21 087
    Points : 42 926
    Points
    42 926
    Par défaut
    Salut,

    Si tu te brouilles en Excel, il faudrait commencer par trier les données Excel.
    Partant des données triées, il faudrait pour chaque enregistrement.

    Et pour chaque enregistrement envoyer les données vers des signets d'un document.

    c'est une idée en passant.
    J'ai pas encore de décodeur, alors, postez en clair ! Comment mettre une balise de code ?
    Débutez en VBA

    Mes articles


    Dans un MP, vous pouvez me dire que je suis beau, ... mais si c'est une question technique je ne la lis pas ! Vous êtes prévenus !

  3. #3
    Membre régulier Avatar de Escandil
    Profil pro
    Inscrit en
    Mai 2003
    Messages
    84
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France, Côte d'Or (Bourgogne)

    Informations forums :
    Inscription : Mai 2003
    Messages : 84
    Points : 70
    Points
    70
    Par défaut
    Citation Envoyé par Heureux-oli Voir le message
    Salut,

    Si tu te brouilles en Excel, il faudrait commencer par trier les données Excel.
    Partant des données triées, il faudrait pour chaque enregistrement.

    Et pour chaque enregistrement envoyer les données vers des signets d'un document.

    c'est une idée en passant.
    Bonjour Olivier,

    Merci pour la rapidité de ta réponse.
    Les données Excel sont triées par code postal. J'aimerais autant que possible éviter de mettre des macros dans ce fichier mais c'est envisageable si cela s'avère indispensable.

    Je ne suis pas certain d'avoir compris ta réponse, mais j'en déduis que le publipostage est une fausse piste (Dommage j'aimais bien l'accès direct aux données)

    Edit : Je reformule ma question de départ en l'orientant vers la piste que je suis actuellement :
    Est-il possible de lancer une recherche préconfigurée en VBA du type "Rechercher un Destinataire" dans l'onglet publipostage ?


    Ainsi en exécutant une macro en sortie d'un champs de formulaire, je pourrais mettre à jour mes données.

  4. #4
    Rédacteur/Modérateur

    Avatar de Heureux-oli
    Homme Profil pro
    Contrôleur d'industrie
    Inscrit en
    Février 2006
    Messages
    21 087
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 59
    Localisation : Belgique

    Informations professionnelles :
    Activité : Contrôleur d'industrie
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 21 087
    Points : 42 926
    Points
    42 926
    Par défaut
    Salut,

    Je suis parti du VBA parce que le message est dans la section VBA.


    Et le publipostage peut très bien être la base de ton document.

    Le document final devrait donner quoi ?
    Une lettre personnalisée, un tableau, ...

    Suivant le type de sortie, on peut envisager l'une ou l'autre piste.
    J'ai pas encore de décodeur, alors, postez en clair ! Comment mettre une balise de code ?
    Débutez en VBA

    Mes articles


    Dans un MP, vous pouvez me dire que je suis beau, ... mais si c'est une question technique je ne la lis pas ! Vous êtes prévenus !

  5. #5
    Membre régulier Avatar de Escandil
    Profil pro
    Inscrit en
    Mai 2003
    Messages
    84
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France, Côte d'Or (Bourgogne)

    Informations forums :
    Inscription : Mai 2003
    Messages : 84
    Points : 70
    Points
    70
    Par défaut
    Salut,

    A la base j'ai un fichier word qui comporte des formulaires hérités :
    • Quelque listes déroulantes
    • Des champs de saisie
    • Un champ de saisie Code Postal
    • Un champ de saisie pour insérer un "Nom" relatif au code postal

    Lorsque l'utilisateur a fini de remplir le formulaire, il imprime le document, je récupère l'évènement, lance l'impression via vba et ferme le document sans le sauvegarder.

    Donc on peut dire que c'est une sorte de courrier dans la mesure ou il fini par une impression.

    Actuellement l'utilisateur remplit son courrier via le formulaire et remplit à la main le Champ de Saisie Nom lié au Code Postal en cherchant dans un fichier Excel la correspondance.

    J'aimerais grâce à une macro qui s’exécute en sortie du champ de saisie Code Postal remplir automatiquement le Champ de Saisie Nom.


    En faisant des tests à la main, j'ai pu facilement mettre en place un publipostage avec ma feuille Excel, effectuer une recherche en tapant le Code Postal et récupérer le Nom que je souhaitais. (cf image précédente)

    J'en ai déduis naïvement que c'était une solution simple.
    Du coup je suis parti sur un algo du genre :
    1. L'utilisateur entre un code postal dans le champ de saisie Code Postal et ma macro se lance
      1. Enlever la protection de la feuille
      2. Créer le publipostage
      3. Lancer une recherche en récupérant le code postal du champ de saisie Code Postal
      4. Fermer le publipostage
      5. Réactiver la protection
    2. L'utilisateur continue la saisie


    En terme de code j'ai trouvé comment activer le publipostage
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    ActiveDocument.MailMerge.OpenDataSource Name:= "MonFichierExcel" _
    SQLStatement:="SELECT * FROM `'MaFeuille`"
    Ajouter une ligne avec les infos dont j'ai besoin
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    ActiveDocument.Fields.Add Range:=Selection.Range, Type:=wdFieldMergeField _
            , Text:="""Le NOM que je recherche"""
    Je galère un peu sur la recherche mais en gros je devrais faire un truc de cet ordre
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    ActiveDocument.MailMerge.DataSource.FindRecord(FindText, Field)
    Avec la msdn je devrais m'en sortir (http://msdn.microsoft.com/en-us/libr...ice.11%29.aspx)


    Mais j'ai remarqué qu'une fois le publipostage activé je ne pouvais plus ni le fermer, ni réactiver la protection.

    Et j'en suis là.


    J'espère que c'est plus clair. J'avoue que c'est très difficile d'exprimer exactement mon besoin, du coup j'ai essayé de mettre les champs de saisie en gras et de bien détailler mon raisonnement.


    Plus j'avance et plus je pense que le publipostage est une fausse piste et qu'il doit être possible de faire une macro de recherche excel qui remplit directement mon champs de saisie..
    Un truc du genre :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    DataSourceName:= "MonFichierExcel"
    SourceSheet = "MaFeuille"
     
    SQLStatement:= "SELECT * FROM [" & SourceSheet & "$" & _
    SourceRange & "] Where MonChamp Like _
    ActiveDocument.FormFields(X).Result
    Mais je ne trouve rien là dessus sur google..


    edit : Ajout d'info, je n'avais pas totalement répondu aux questions.

  6. #6
    Rédacteur/Modérateur

    Avatar de Heureux-oli
    Homme Profil pro
    Contrôleur d'industrie
    Inscrit en
    Février 2006
    Messages
    21 087
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 59
    Localisation : Belgique

    Informations professionnelles :
    Activité : Contrôleur d'industrie
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 21 087
    Points : 42 926
    Points
    42 926
    Par défaut
    Salut,

    Si c'est pour un seul courrier et pas une série de courriers, je pense qu'il serait plus facile de se passer du publipostage.

    Ce qui me semble le plus simple pour l'utilisateur est un UserForm à la création du document.
    On demande le CP et on propose dans une liste les noms disponibles pour ce CP.
    Après validation du choix, on balance les infos dans le document.
    On peut même se permettre le luxe d'en ajouter au pasage.
    J'ai pas encore de décodeur, alors, postez en clair ! Comment mettre une balise de code ?
    Débutez en VBA

    Mes articles


    Dans un MP, vous pouvez me dire que je suis beau, ... mais si c'est une question technique je ne la lis pas ! Vous êtes prévenus !

  7. #7
    Membre régulier Avatar de Escandil
    Profil pro
    Inscrit en
    Mai 2003
    Messages
    84
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France, Côte d'Or (Bourgogne)

    Informations forums :
    Inscription : Mai 2003
    Messages : 84
    Points : 70
    Points
    70
    Par défaut
    Bonjour,

    Je laisse tomber le publipostage du coup, je vais chercher avec un accès direct à Excel.
    Je ne peux pas vraiment ajouter un UserForm, mes contraintes étant de ne pas faire de modifications qui perturbent l'utilisateur (comprendre qui change le mode de fonctionnement).

    Mais je récupère facilement les données via le formulaire, je devrais donc m'en sortir.

    Merci pour le coup de main, je posterai mes avancées au fur et à mesure.

    PS : En tous cas ta réactivité est très agréable, on se sent moins seul au monde

  8. #8
    Membre régulier Avatar de Escandil
    Profil pro
    Inscrit en
    Mai 2003
    Messages
    84
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France, Côte d'Or (Bourgogne)

    Informations forums :
    Inscription : Mai 2003
    Messages : 84
    Points : 70
    Points
    70
    Par défaut
    Bon effectivement c'est beaucoup plus simple sans passer par le publipostage..
    Je n'arrivais à rien car je n'avais pas activer la référence a Microsoft Excel 12.0 Object Library..

    Enfin une fois cette référence cochée, voila ce que ç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
     
    Sub Recherche()
    '
    Dim objExcel As New Excel.Application
    Dim exWb As Excel.Workbook
    Dim CP As Integer
     
    CP = ActiveDocument.FormFields("CodePostal").Result
     
    Set exWb = objExcel.Workbooks.Open("MonFichierExcel.xls")
    ActiveDocument.FormFields("InfoRecupCP1").Result = objExcel.WorksheetFunction.VLookup(CP, exWb.Sheets("MonOnglet").Range("E1:H10000"), 3, False)
    ActiveDocument.FormFields("InfoRecupCP2").Result = objExcel.WorksheetFunction.VLookup(CP, exWb.Sheets("MonOnglet").Range("E1:H10000"), 4, False)
     
    exWb.Close
    Set exWb = Nothing
     
    End Sub
    Edit : Changement de titre et passage en résolu.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 2
    Dernier message: 16/04/2015, 13h04
  2. [XL-2010] Recherche multiple d’occurrences dans des documents Word depuis un fichier Excel
    Par Meynur dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 14/04/2015, 16h16
  3. Réponses: 5
    Dernier message: 05/12/2008, 15h23
  4. recherche de données dans feuil excel
    Par tigdub1gal dans le forum Excel
    Réponses: 3
    Dernier message: 24/05/2007, 17h58
  5. [VBA-E]Formulaire word, récupérer les données dans excel
    Par sablier dans le forum Macros et VBA Excel
    Réponses: 20
    Dernier message: 30/05/2006, 07h38

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