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 :

Traitement de données généalogiques (conception et mise en place technique)


Sujet :

Macros et VBA Excel

  1. #1
    Membre du Club Avatar de touche_a_tout
    Profil pro
    Inscrit en
    Août 2006
    Messages
    486
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Août 2006
    Messages : 486
    Points : 46
    Points
    46
    Par défaut Traitement de données généalogiques (conception et mise en place technique)
    Bonjour,
    Je crois avoir exactement reproduit l'un des exemples donnés sur ce forum et pourtant j'ai l'erreur "Nous ne trouvons pas E:\3_G_E_N_E_A_L_O_G_I_E\creation_sources_ged\Naissances\wb.x". Et d'où vient ce .x ajouté à wb ? Voici le code (ces 6 lignes se répètent 22 fois en lien avec 22 fichiers Excel similaires):
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    Workbooks.Open ("E:\3_G_E_N_E_A_L_O_G_I_E\creation_sources_ged\Naissances\Base_Etat_civil_F_Naissances.xlsm")
    Set wb = Workbooks("Base_Etat_civil_F_Naissances.xlsm")
    wb.Activate
    indice = indice + 1: index = index + 1
    Application.Run "wb!creation_squeeze_gedcom_d_apres_XL"
    wb.Close
    C'est la ligne que je mets en italique qui apparaît surlignée en jaune quand je clique sur Débogage.
    Même erreur si j'ajoute "sub" devant la moulinette et les parenthèses vides à la fin.
    Merci pour toute suggestion/explication/solution
    Cordialement
    touche_a_tout
    There is always an easy solution to every human problem - neat, plausible. And wrong.

  2. #2
    Inactif  

    Homme Profil pro
    cuisiniste
    Inscrit en
    Avril 2009
    Messages
    15 379
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : cuisiniste
    Secteur : Bâtiment

    Informations forums :
    Inscription : Avril 2009
    Messages : 15 379
    Points : 12 075
    Points
    12 075
    Billets dans le blog
    8
    Par défaut re
    Bonjour
    si ton classeur contenant la macro a exécuter est ouvert dans la meme instance
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    application.Run "'" & nomduclasseur & "'!" & "nomdelamacro"
    sinon
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    mavariableapplication.Run "'" & nomduclasseur & "'!" & "nomdelamacro"
    mavariableapplication est une variable que tu a instancié pour créer une instance d'excel dans la quelle tu a ouvert ton fichier

    nomduclasseur est un string et non un object workbook !!!!!!

    respecte les simple cote sinon ca ne fonctionne pas
    mes fichiers dans les contributions:
    mail avec CDO en vba et mail avec CDO en vbs dans un HTA
    survol des bouton dans userform
    prendre un cliché d'un range

    si ton problème est résolu n'oublie pas de pointer : : ça peut servir aux autres
    et n'oublie pas de voter

  3. #3
    Membre du Club Avatar de touche_a_tout
    Profil pro
    Inscrit en
    Août 2006
    Messages
    486
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Août 2006
    Messages : 486
    Points : 46
    Points
    46
    Par défaut Encore Application Run
    @PatrickToulon
    Salut Patrick,
    Content de te retrouver plein de punch !
    Suis pas sûr de bien comprendre donc de bien savoir lequel des deux codes choisir.
    J'ai un classeur "lanceur" dans lequel j'ai le code que j'ai cité et 22 autres classeurs où je veux lancer (en série) des procédures depuis le "lanceur". Les procédures à lancer ne sont donc pas dans le même classeur que mon bout de code. Il faut donc, je suppose, que j'instancie une variable renvoyant chaque fois à un nouveau classeur. Il faut donc que je choisisse la 2ème formule. Correct ?
    Merci de soutenir un pauvre débutant qui patauge !
    Bien à toi
    touche_a_tout
    There is always an easy solution to every human problem - neat, plausible. And wrong.

  4. #4
    Membre du Club Avatar de touche_a_tout
    Profil pro
    Inscrit en
    Août 2006
    Messages
    486
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Août 2006
    Messages : 486
    Points : 46
    Points
    46
    Par défaut Encode Application Run
    Re-bonjour,
    encore une question:
    Comme ma macro est une sub VBA, est-ce que je dois mettre le mot sub et la parenthèse vide ou pas ?
    En plus, alors que je viens d'ouvrir un classeur avec Open, le système me dit, à propos du nom de ce classeur: "variable non définie". J'ai du mal à suivre !
    Amitiés
    touche_a_tout
    There is always an easy solution to every human problem - neat, plausible. And wrong.

  5. #5
    Membre du Club Avatar de touche_a_tout
    Profil pro
    Inscrit en
    Août 2006
    Messages
    486
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Août 2006
    Messages : 486
    Points : 46
    Points
    46
    Par défaut Encore Application Run
    Bonjour,
    Toujours plus surprenant. J'ai fouillé et trouvé une solution chez Ouskel-nor (une référence, non ?) (pardon à lui d'écorcher son vulgo) et ça marche, mais seulement sur les 4 premiers classeurs; au 5ème j'ai le message "impossible d'exécuter la macro..." . Pourtant l'écriture du code me semble identique. Je mets seulement le 4ème bloc, qui marche, et le 5ème, qui ne marche pas. Si quelqu'un voit pourquoi, je lui devrai une fière chandelle. (Par flemme d'effacer j'ai mis en commentaire [cherche et remplace avec '] des tentatives abandonnées). Voici:
    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
     
    '4
    Workbooks.Open ("E:\3_G_E_N_E_A_L_O_G_I_E\creation_sources_ged\Naissances\Naissances_formatees3.xlsm")
    'Set wb = Workbooks("Naissances_formatees3.xlsm")
    'wb.Activate
    indice = indice + 1: index = index + 1
    Application.Run "'Etat_civil_CH_Naissances5.xlsm'!'creation_squeeze_gedcom_d_apres_XL'"
    MkDir "E:\3_G_E_N_E_A_L_O_G_I_E\newallged\ALL_GED" & index
     
    '5
    Workbooks.Open ("E:\3_G_E_N_E_A_L_O_G_I_E\creation_sources_ged\Naissances\Par_France_SAGA_Naissances6.xlsm")
    'Set wb = Workbooks("Par_France_SAGA_Naissances6.xlsm")
    'wb.Activate
    indice = indice + 1: index = index + 1
    Application.Run "'Par_France_SAGA_Naissances6.xlsm'!'creation_squeeze_gedcom_d_apres_XL'"
    MkDir "E:\3_G_E_N_E_A_L_O_G_I_E\newallged\ALL_GED" & index
    Quand l'informatique devient capricieuse, je panique !
    Merci pour toute aide.
    Cordialement
    touche_a_tout
    There is always an easy solution to every human problem - neat, plausible. And wrong.

  6. #6
    Inactif  

    Homme Profil pro
    cuisiniste
    Inscrit en
    Avril 2009
    Messages
    15 379
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : cuisiniste
    Secteur : Bâtiment

    Informations forums :
    Inscription : Avril 2009
    Messages : 15 379
    Points : 12 075
    Points
    12 075
    Billets dans le blog
    8
    Par défaut re
    re
    c'est pas l'informatique qui devient capricieuse
    c'est toi qui ne fait pas comme on te dit

    alors!!! regarde lettre par lettre mes lignes et fait de même avec les tiennes tu comprendra tout seul
    mes fichiers dans les contributions:
    mail avec CDO en vba et mail avec CDO en vbs dans un HTA
    survol des bouton dans userform
    prendre un cliché d'un range

    si ton problème est résolu n'oublie pas de pointer : : ça peut servir aux autres
    et n'oublie pas de voter

  7. #7
    Membre du Club Avatar de touche_a_tout
    Profil pro
    Inscrit en
    Août 2006
    Messages
    486
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Août 2006
    Messages : 486
    Points : 46
    Points
    46
    Par défaut Encore Application Run
    Re,
    Cette fois j'ai checké lettre par lettre et j'ai un nouveau message: mes noms de fichiers sont des "variables non définies". J'ai remplacé ces noms par une variable wb = workbooks("nomdefichier"). Plus de variable non définie mais "propriété ou méthode non gérée par cet objet". J'ai voulu utiliser ta deuxième proposition mais - suis-je nul ! - je ne comprends pas comment on crée cette variable "mavariableapplication".
    La petite classe du CE, quoi !
    Merci d'avance de ta patience.
    Cordialement
    touche_a_tout
    There is always an easy solution to every human problem - neat, plausible. And wrong.

  8. #8
    Inactif  

    Homme Profil pro
    cuisiniste
    Inscrit en
    Avril 2009
    Messages
    15 379
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : cuisiniste
    Secteur : Bâtiment

    Informations forums :
    Inscription : Avril 2009
    Messages : 15 379
    Points : 12 075
    Points
    12 075
    Billets dans le blog
    8
    Par défaut re
    re
    dis moi un peu :
    est ce que dans mes exemple tu vois un simple cote APRES LE"!" hein ??????????
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Application.Run "'Etat_civil_CH_Naissances5.xlsm'!'creation_squeeze_gedcom_d_apres_XL'"
    tu la vois mieux l'erreur la ?
    mes fichiers dans les contributions:
    mail avec CDO en vba et mail avec CDO en vbs dans un HTA
    survol des bouton dans userform
    prendre un cliché d'un range

    si ton problème est résolu n'oublie pas de pointer : : ça peut servir aux autres
    et n'oublie pas de voter

  9. #9
    Membre du Club Avatar de touche_a_tout
    Profil pro
    Inscrit en
    Août 2006
    Messages
    486
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Août 2006
    Messages : 486
    Points : 46
    Points
    46
    Par défaut Encore Application Run
    Bonsoir,
    Tous ces simples et doubles cotes, quelle salade. le mieux est que je poste de nouveau mon code. MAis d'abord ton premier exemple:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    application.Run "'" & nomduclasseur & "'!" & "nomdelamacro"
    Ensuite, premier bloc, qui déclenche "variable non définie" (sur les termes en italique)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    '1
    Workbooks.Open ("E:\3_G_E_N_E_A_L_O_G_I_E\creation_sources_ged\Naissances\A_modele_Chambon_baptemes6.xlsm")
    indice = indice + 1: index = index + 1
    Application.Run "'" & A_modele_Chambon_baptemes6.xlsm & "'!" & "creation_squeeze_gedcom_d_apres_XL"
    MkDir "E:\3_G_E_N_E_A_L_O_G_I_E\newallged\ALL_GED" & index
    Deuxième bloc, où la variable wb évite ce problème, mais qui déclenche "propriété ou méthode non admise pour cet objet"
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    '2
    Workbooks.Open ("E:\3_G_E_N_E_A_L_O_G_I_E\creation_sources_ged\Naissances\Base_Etat_civil_F_Naissances.xlsm")
    indice = indice + 1: index = index + 1
    Set wb = Workbooks("Base_Etat_civil_F_Naissances.xlsm")
    Application.Run "'" & wb & "'!" & "creation_squeeze_gedcom_d_apres_XL"
    MkDir "E:\3_G_E_N_E_A_L_O_G_I_E\newallged\ALL_GED" & index
    P.S. Il me semble que j'ai correctement copié. En tout cas merci .
    Post parti tout seul
    Cordialement
    touche_a_tout
    There is always an easy solution to every human problem - neat, plausible. And wrong.

  10. #10
    Inactif  

    Homme Profil pro
    cuisiniste
    Inscrit en
    Avril 2009
    Messages
    15 379
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : cuisiniste
    Secteur : Bâtiment

    Informations forums :
    Inscription : Avril 2009
    Messages : 15 379
    Points : 12 075
    Points
    12 075
    Billets dans le blog
    8
    Par défaut re
    re
    tu a du mal avec les variables et (le codé en dur) toi hein!!
    bon alors :

    'et donc codé en dur:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Application.Run "'A_modele_Chambon_baptemes6.xlsm'!creation_squeeze_gedcom_d_apres_XL"

    et maintenant codé en variabilisant le nom du classeur et la macro en string
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    Dim nomduclasseur$, nomdelamacro$
    nomduclasseur = "A_modele_Chambon_baptemes6.xlsm"
    nomdelamacro = "creation_squeeze_gedcom_d_apres_XL"
    Application.Run "'" & nomduclasseur & "'!" & nomdelamacro

    maintenant le classeur en variable object ouvert dans la meme instance de excel
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    Dim wb As Workbook, nomdelamacro$
    Set wb = Workbooks.Open("c:\mondossier\A_modele_Chambon_baptemes6.xlsm")
    nomdelamacro = "creation_squeeze_gedcom_d_apres_XL"
    Application.Run "'" & wb.Name & "'!" & nomdelamacro

    maintenant le classeur en variable object ouvert dans une autre instance d'Excel variabilisée
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    Dim wb As Workbook, nomdelamacro$, appXl As Object
    Set appXl = CreateObject("Excel.Application")
    Set wb = appXl.Workbooks.Open("c:\mondossier\A_modele_Chambon_baptemes6.xlsm")
    nomdelamacro = "creation_squeeze_gedcom_d_apres_XL"
    appXl.Run "'" & wb.Name & "'!" & nomdelamacro
    après ca je peux plus rien pour toi
    j'ai tout dis
    mes fichiers dans les contributions:
    mail avec CDO en vba et mail avec CDO en vbs dans un HTA
    survol des bouton dans userform
    prendre un cliché d'un range

    si ton problème est résolu n'oublie pas de pointer : : ça peut servir aux autres
    et n'oublie pas de voter

  11. #11
    Membre du Club Avatar de touche_a_tout
    Profil pro
    Inscrit en
    Août 2006
    Messages
    486
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Août 2006
    Messages : 486
    Points : 46
    Points
    46
    Par défaut Encore Application Run
    Bonsoir,
    Je rentre tard ! En effet c'est un manuel sur Application.Run que tu m'as fait. J'avais oublié "CreateObject" que j'utilise dans mon module de transfert vers Word ! Je te remercie; je m'y attaquerai demain, quand j'aurai les idées plus claires; je pense que je vais utiliser le 4ème exemple (mais patience: j'ai 22 classeurs Excel mis à part celui qui contient le code du "lanceur").
    Donc d'ores et déjà merci et à plus tard de mes nouvelles.
    Cordialement
    touche_a_tout
    There is always an easy solution to every human problem - neat, plausible. And wrong.

  12. #12
    Membre du Club Avatar de touche_a_tout
    Profil pro
    Inscrit en
    Août 2006
    Messages
    486
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Août 2006
    Messages : 486
    Points : 46
    Points
    46
    Par défaut (Encore) Application Run: ça boume !
    Salut Patrick,
    Cette fois-ci, mon "lanceur" fonctionne à la perfection, grâce à toi et à ta 4ème solution, encore mille fois merci. Il reste des pannes mais elles proviennent toutes de l'un ou l'autre de mes 22 classeurs - nom des feuilles ou fautes dans le code. Je suis en plein dedans. Encore merci et tous mes voeux de succès pour tes propres projets.
    Bien à toi
    touche_a_tout
    There is always an easy solution to every human problem - neat, plausible. And wrong.

  13. #13
    Membre du Club Avatar de touche_a_tout
    Profil pro
    Inscrit en
    Août 2006
    Messages
    486
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Août 2006
    Messages : 486
    Points : 46
    Points
    46
    Par défaut Encore Application Run
    Salut Patrick,
    Je ne sais pas si je dois ouvrir une nouvelle discussion car j'ai changé d'approche et n'ai plus besoin de Application.Run. Mais bon j'y vais. Suivant les conseils de P. Fauconnier j'ai tout réuni dans un seul classeur, 69 worskheets et le code; ensuite j'ai variabilisé le nom des feuilles et des macros comme vous me l'aviez indiqué l'un et l'autre; les feuilles sont activées sans pb mais pour les macros j'ai le message "Nom ambigu: ma_macro". Les bulles font parfois apparaître qu'il y a 2 instances de ma_macro, une as worksheet et une as string, mais je n'en ai pas créé deux. Voici la partie de mon code concernée.
    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
    Public ws As Worksheet
    Public ma_macro As String
     
    Sub creation_gedcoms_d_apres_XL()
     
    'cree_des_logos()
    ThisWorkbook.Sheets("range_logo").Activate 'feuille contenant la partie variable
    lig = 1                                     '- un sigle + une lettre de A à K -
    col = 3                                     'des noms de worsheets
    For lig = 1 To 69
    logo = Worksheets("range_logo").Cells(lig, col - 2) & "_" & Cells(lig, col - 1).Value
    mi_logo = Worksheets("range_logo").Cells(lig, col - 2) 'mi-logo sert à réunir dsans un même
                                                'répertoire les sorties Word qui ont
                                               'le même sigle, sans la lettre
    Set ws = ThisWorkbook.Sheets(logo)
    ma_macro = "creation_gedcoms" & "_" & logo & "_" & "d_apres_XL(logo, mi_logo)" 'index = 1"
     
    Call ma_macro
     
    Next
    End Sub
     
    Sub ma_macro()                       'creation_gedcoms_logo_d_apres_XL(logo, mi_logo) 'index = 1 = ancien code
     
    ThisWorkbook.Sheets(logo).Activate
    J'étais content de pouvoir éliminer 68 feuilles et 68 procédures sub mais je n'ai pas trouvé la bonne formule.
    Merci de me dépanner si tu as une minute
    Cordialement
    touche_a_tout
    There is always an easy solution to every human problem - neat, plausible. And wrong.

  14. #14
    Invité
    Invité(e)
    Par défaut
    bonjour touche_a_tout et bonjour Patrick,

    je ne suis pas intervenue plus tôt car mon intervention aurait engendré de la Confusion, il était préférable que vous restiez tous les deux.

    je me demandait cependant pour quelle raison la macro ce trouvait dans le fichier lancé et pas dans le fichier lanceur? la macro es spécifique à chaque fichier ou identique pour tous?

    en terme de maintenance évolutive et/ou curative ça pose problème? non?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    Sub test()
     creation_squeeze_gedcom_d_apres_XL "c:\mondossier\A_modele_Chambon_baptemes6.xlsm"
    End Sub
    Sub creation_squeeze_gedcom_d_apres_XL(Fichier As String)
    Dim Wb As Workbook
    Set Wb = Workbooks.Open(Fichier)
    Wb.Close
    Set Wb = Nothing
    End Sub
    Edite: j'étais en train de rédiger mon message!

  15. #15
    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 921
    Points
    55 921
    Billets dans le blog
    131
    Par défaut
    Salut.

    Je remets ici ce qui a été modéré ce matin et dont Touche-a-tout parle dans son mail... (mon intervention puis la sienne en réponse)

    Mon intervention
    Histoire de recentrer la discussion sur ses aspects techniques.

    Devoir créer un lanceur qui ouvre 22 fichiers (le nombre n'a pas d'importance ici) pour lancer des macros contenues dans ces fichiers révèle un défaut de conception (ce n'est pas une attaque personnelle, c'est un constat technique). Il serait plus logique et stable que le code soit placé dans le "lanceur" qui deviendrait ainsi "l'application" qui piloterait les fichiers. Elle pourrait alors ouvrir les fichiers de données et y effectuer des traitements, en extraire des données, ... Bref, faire son boulot d'application.

    Il serait pertinent de se poser la question "pourquoi 22 fichiers". Une conception nécessitant ce genre de montage ne se rencontre pas tous les jours "dans la vraie vie". Je doute qu'elle soit nécessaire à une gestion de données généalogiques. Si vraiment les données sont contenues dans x fichiers, les bonnes pratiques enseignent de rapatrier les données des x fichiers dans le fichier applicatif puis de travailler en local.

    Pour faire référence à la remarque de Patrick sur les multi-instances, il me semble inintéressant d'ouvrir le fichier applicatif dans une autre instance que les fichiers de données. Ca complique inutilement une tâche qui est déjà trop complexe à l'heure actuelle. Donc, il est inutile d'en parler ici et de mettre en place cette solution.

    Si l'on doit ouvrir un fichier, une bonne pratique à mettre en oeuvre par l'apprenti est de créer une variable qui contient ce classeur. set wb = workbooks.open(...). Ca permet de manipuler plus facilement le fichier. Il faut également noter que lorsque l'on ouvre un classeur, il devient le classeur actif. Il faut bien entendu tenir compte de cela dans la gestion du code. C'est notamment pour cela que l'on essaie de travailler en local autant que possible. Ca évite de se mêler les pinceaux entre activeworkbook, thisworkbook, et de devoir être attentif à quel classeur est actif lors de l'exécution du code.

    Il faut sortir absolument les noms de fichiers du code et les stocker dans une feuille de l'applicatif. Idéalement, surtout vu l'arborescence, il serait intéressant de regrouper les fichiers de données dans le même dossier que l'applicatif. Ca permettrait de limiter les problèmes de déplacement de fichiers (au sens large, ce qui veut dire que renommer un fichier ou un dossier dans l'arborescence revient à déplacer) car on pourrait alors travailler avec ThisWorkbook.Path pour simplifier le code et limiter les erreurs de saisie au strict minimum.

    Il est extrêmement rare de devoir, d'un fichier, lancer du code se trouvant dans un autre fichier. Ca doit de suite interpeller sur le défaut de conception. Perso, en plus de 25 ans d'Excel, je n'ai jamais eu besoin de créer un montage pareil.
    La réponse de Touche-a-tout
    Salut,
    Très intéressant message.
    Depuis mon dernier post sur ce sujet, j'ai réuni toutes les "feuilles de données" (je pense à Access Lite) dans un seul classeur qui contient toutes les procédures. Ca fonctionne, à quelques menus détails près. Sauf qu'il reste un gros défaut de conception: une longue séries de "Call" avec les procédures en dur. Je réfléchis (à mon rythme) à la manière de simplifier. Elles ne diffèrent que par un élément distinctif qui correspond chaque fois au nom d'une feuille. Il suffirait donc alors d'une seule procédure contenant une variable qui prendrait la valeur de mes éléments distinctifs. Comment mettre ces éléments distinctifs à portée de ma sub ? En les stockant dans un tableau ? Ils sont complexes, du fait des 8 x 3 caractéristiques citées plus bas.

    A propos des 22 fichiers, j'ai déjà donné l'explication quelque part. Ils représentent des sources. Une généalogie n'est crédible que si l'on y incorpore les sources. Je l'ignorais quand j'ai rempli mes 22 feuilles de données. On peut à propos du nombre se représenter une matrice cartésienne avec en abscisse les 3 événements généalogiques clés: naissance, mariage, décès et en ordonnées les types de documents avec leur origine. Dans mes tables, il y en a 8. La formulation des textes et leur classement incite à les traiter séparément. On arrive donc à 24 séries de sources, mais chez moi il y en a 2 qui sont vides, donc absentes.
    Plutôt que des dizaines de fichiers, on peut penser à des dizaines de feuilles dans un même fichier et je l'ai fait.
    Mais en fait j'ai 79 feuilles dans mon classeur ! Pourquoi ? Parce que quand mes feuilles étaient complètes, telles que saisies à l'origine, l'impression s'arrêtait spontanément en cours de route et personne sur cet excellent forum ne m'a suggéré une idée utile. Personne. Plutôt que d'attendre, j'ai examiné les résultats et comme il semblait que l'impression pouvait aller jusqu' environ 25 lignes, j'ai décomposé mes tables en sous-tables de 25 lignes au maximum, ce qui m'a donné 79 feuilles, et ça marche.
    "Ce n'est pas une attaque personnelle". Et ce qui précède est sûrement un travail d'éclopé aidé par quelques paraplégiques. Mais figure-toi que j'en suis assez satisfait. Et je vais sans doute faire encore mieux !
    Merci pour ton analyse et tes conseils, dont j'ai anticipé quelques-uns et dont je vais suivre d'autres. Pour faire encore mieux.
    touche_a_tout
    P.S. Pour ta gouverne, le .txt que je veux faire s'appelle un gedcom; c'est un "langage" à tags inventé par les Mormons pour permettre l'échange de données généalogies entre systèmes différents. Tu relèves quelque part qu'il ne s'agit pas d'une bidouille mais d'un développement qui exploite les données Excel pour les transmettre à Word sous la forme adéquate: c'est exactement à quoi sert ma procédure, qui fonctionne très bien, avec les réserves déjà exprimées.
    Je pense que cela aidera à mieux comprendre le cheminement
    "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
    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 921
    Points
    55 921
    Billets dans le blog
    131
    Par défaut
    Citation Envoyé par touche_a_tout Voir le message
    Salut Patrick,
    Je ne sais pas si je dois ouvrir une nouvelle discussion car j'ai changé d'approche et n'ai plus besoin de Application.Run.[...]
    Reste dans la même. J'ai modifié le titre pour que cela prête moins à confusion
    "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
    Invité
    Invité(e)
    Par défaut
    Pour ce qui concerne word, il est possible de créer un fichier texte sens passe par word,mais il n'est pas opportun d'aborder le sujet pour l'heure.

    Il me semble avoir vu une source d'un arbres généalogiques élaboré par fichier texte via word sur ce même forum, c'est cela qui à initier la présente discutions ?

  18. #18
    Membre du Club Avatar de touche_a_tout
    Profil pro
    Inscrit en
    Août 2006
    Messages
    486
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Août 2006
    Messages : 486
    Points : 46
    Points
    46
    Par défaut Treitement de données généalogiques (concetion et mise en place technique)
    Bonjour Dysorthographie, Patrick, Pierre Fauconnier
    et merci.
    Je me demandais pourquoi mon dernier échange avec P. Fauconnier (le premier dans ce fil qui soit réellement constructif) avait disparu.
    Pour répondre à Robert: il n'y a plus de lanceur; données et code sont réunis dans le même classeur.
    D'autre part le code est différent pour chaque feuille (il contient le nom de la feuille en cours).
    Maintenant, pourquoi 69 worksheets ? Ce n'est pas un choix ! Au départ chacun de mes 22 classeurs (j'ai déjà dit pourquoi 22) contenait une seule feuille mais au moment de l'impression, si la feuille contenait plus de 25 lignes (ou un peu plus, je n'ai pas pu le déterminer) le processus s'interrompait au milieu d'un mot. J'ai ouvert une discussion là-dessus mais je n'ai pas obtenu de réponse concluante. De guerre lasse, j'ai décidé que mes feuilles n'auraient pas plus de 25 lignes et je les ai subdivisées en plusieurs feuilles: total = 69. Pour distinguer les divers fragments de la même feuille j'ai ajouté une lettre majuscule. Exemple: registre paroissial du Chambon-sur-Lignon, naissances, le sigle est ChaN et les feuilles s'appellent ChaN_A, ChaN_B etc.
    J'ai remplacé cette partie variable du nom par une variable nommée "logo" et ça marche pour sélectionner la feuille mais pas pour lancer le code.
    Merci à P. Fauconnier pour son intervention.
    Maintenant je vais regarder de près le code proposé par Dysorthographie.
    Cordialement
    t_a_t
    There is always an easy solution to every human problem - neat, plausible. And wrong.

  19. #19
    Membre du Club Avatar de touche_a_tout
    Profil pro
    Inscrit en
    Août 2006
    Messages
    486
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Août 2006
    Messages : 486
    Points : 46
    Points
    46
    Par défaut Traitement de données généalogiques (conception et mise en place technique)
    Re,
    En réponse au second post de Dysorthographie, cette discussion a été ouverte par mes soins sans référence à une autre (que je n'ai pas repérée , d'ailleurs). Et si l'on peut rester sur l'idée d'un transfert de données d'Excel à Word je serai moins stressé.
    Cordialement
    t_a_t

    Edit: est-ce la discussion "Arrêt intempestif d'exécution" ?
    There is always an easy solution to every human problem - neat, plausible. And wrong.

  20. #20
    Invité
    Invité(e)
    Par défaut
    Pour répondre à Robert: il n'y a plus de lanceur;
    oui, mais je suis un fainéant et j'ai rééditer mon poste pour ne pas le réécrire!

Discussions similaires

  1. Réponses: 6
    Dernier message: 06/09/2006, 13h08
  2. [C#] Application.Run sans Form
    Par papouAlain dans le forum Windows Forms
    Réponses: 4
    Dernier message: 09/06/2006, 16h36
  3. [C#]Fenetre de chargement avant Application.run()
    Par 5:35pm dans le forum Windows Forms
    Réponses: 3
    Dernier message: 05/05/2006, 03h02
  4. [VBA][EXCEL]Erreur '1004' avec "Application.Run"
    Par Ania dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 16/01/2006, 10h50
  5. Application.run ?
    Par bobymaw dans le forum Langage
    Réponses: 5
    Dernier message: 29/12/2005, 20h21

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