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

Access Discussion :

Pilotage word


Sujet :

Access

  1. #1
    Membre habitué
    Inscrit en
    Novembre 2003
    Messages
    533
    Détails du profil
    Informations personnelles :
    Âge : 37

    Informations forums :
    Inscription : Novembre 2003
    Messages : 533
    Points : 180
    Points
    180
    Par défaut Pilotage word
    Bonjour,

    J'ai un petit problème. Je veux piloter word, mais une fois sur deux précisément ma fonction me fait une erreur la voici:

    D'ou peut venir le problème?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    Le serveur distant n'existe pas ou n'est pas accessible
    Merci d'avance

  2. #2
    Membre confirmé
    Avatar de Petogaz
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    479
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 479
    Points : 580
    Points
    580
    Par défaut
    salut,

    il y a sans doute un problème de référence. peux-t-on voir le code ?

  3. #3
    Responsable Access

    Avatar de Arkham46
    Profil pro
    Inscrit en
    Septembre 2003
    Messages
    5 865
    Détails du profil
    Informations personnelles :
    Localisation : France, Loiret (Centre)

    Informations forums :
    Inscription : Septembre 2003
    Messages : 5 865
    Points : 14 526
    Points
    14 526
    Par défaut
    une fois sur deux précisément
    ça ça ressemble à s'y méprendre à un problème d'objets non libérés, non?

  4. #4
    Membre habitué
    Inscrit en
    Novembre 2003
    Messages
    533
    Détails du profil
    Informations personnelles :
    Âge : 37

    Informations forums :
    Inscription : Novembre 2003
    Messages : 533
    Points : 180
    Points
    180
    Par défaut
    Merci pour votre aide

    C'est possible, je ne sais pas, et si c'est çA, je fais comment?

    Voici comment je déclare mes variables :

    Dans un modul variable
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
     
    Public application_word As Word.Application
    Public document_word As Word.Document
    Dans un module fonction

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
     
    'déclare l'objet de l'application word
    Set application_word = CreateObject("Word.application")
    'rend l'application visible
    application_word.Visible = True
    'ajoute un document à l'application word
    Set document_word = application_word.Documents.Add

    Merci d'avance

  5. #5
    Responsable Access

    Avatar de Arkham46
    Profil pro
    Inscrit en
    Septembre 2003
    Messages
    5 865
    Détails du profil
    Informations personnelles :
    Localisation : France, Loiret (Centre)

    Informations forums :
    Inscription : Septembre 2003
    Messages : 5 865
    Points : 14 526
    Points
    14 526
    Par défaut
    les objets en variables publiques --> Bof, est-ce nécessaire

    Et la libération de l'objet?
    Set application_word = Nothing

  6. #6
    Membre habitué
    Inscrit en
    Novembre 2003
    Messages
    533
    Détails du profil
    Informations personnelles :
    Âge : 37

    Informations forums :
    Inscription : Novembre 2003
    Messages : 533
    Points : 180
    Points
    180
    Par défaut
    En publique, oui car pour que le code soit bien structurer, j'ai fait plusieurs modul. Un exportation, etc.. et j'ai aussi mis du code dans les formulaire. Donc à la place que je ferme l'objet word a chaque fois, la je le laisse ouvert. Est-ce correct?

    Même avec le nothing il fait ça. Mais c'est vraiment bizarre que ce soit une fois sur deux!

  7. #7
    Responsable Access

    Avatar de Arkham46
    Profil pro
    Inscrit en
    Septembre 2003
    Messages
    5 865
    Détails du profil
    Informations personnelles :
    Localisation : France, Loiret (Centre)

    Informations forums :
    Inscription : Septembre 2003
    Messages : 5 865
    Points : 14 526
    Points
    14 526
    Par défaut
    Bof bof...

    Si tu faire quelque chose de bien il te faut utiliser les classes.

    Dans la méthode Initialize de la classe tu crées ton objet Word
    Dans la méthode Finalize tu détruis ton objet Word
    Et tu crées une propriété qui te renvoie l'objet Word pour pouvoir agir dessus depuis le formulaire.
    Et toutes les fonctions communes sont dans la classe.

    Tu peux ainsi gérer ton automation proprement et ouvrir plusieurs fichiers Word sans qu'ils entrent en conflit, chaque document Word étant piloté par une classe.

    Pour comprendre la notion de classe :
    http://sinarf.developpez.com/access/vbaclass/

    Je ne dis pas que c'est plus simple, mais c'est plus correct....

  8. #8
    Membre habitué
    Inscrit en
    Novembre 2003
    Messages
    533
    Détails du profil
    Informations personnelles :
    Âge : 37

    Informations forums :
    Inscription : Novembre 2003
    Messages : 533
    Points : 180
    Points
    180
    Par défaut
    Ah ok, c'est vrai que ça à l'aire plus pratique. Mais le problème c'est que je ne peux pas revenir en arrière maintenant, je suis en plein exam finaux. Mais pour l'autre problème, as-tu une idée?

  9. #9
    Membre confirmé
    Avatar de Petogaz
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    479
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 479
    Points : 580
    Points
    580
    Par défaut
    j'insiste il s'agit d'objet mal référencé et non d'une libération. montres nous tout ton code !

  10. #10
    Membre habitué
    Inscrit en
    Novembre 2003
    Messages
    533
    Détails du profil
    Informations personnelles :
    Âge : 37

    Informations forums :
    Inscription : Novembre 2003
    Messages : 533
    Points : 180
    Points
    180
    Par défaut
    Tout mon code??????? Bon ben d'accord.

    Alors le voilà:
    modul fonction_exportation
    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
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
    149
    150
    151
    152
    153
    154
    155
    156
    157
    158
    159
    160
    161
    162
    163
    164
    165
    166
    167
    168
    169
    170
    171
    172
    173
    174
    175
    176
    177
    178
    179
    180
    181
    182
    183
    184
    185
    186
    187
    188
    189
    190
    191
    192
    193
    194
    195
    196
    197
    198
     
    Option Compare Database
     
    Function en_tete_page()
    'insère le logo cimo dans l'en-tête
    If document_word.ActiveWindow.View.SplitSpecial <> wdPaneNone Then
        document_word.ActiveWindow.Panes(2).Close
    End If
    If document_word.ActiveWindow.ActivePane.View.Type = wdNormalView Or document_word.ActiveWindow.ActivePane.View.Type = wdOutlineView Then
        document_word.ActiveWindow.ActivePane.View.Type = wdPrintView
    End If
    document_word.ActiveWindow.ActivePane.View.SeekView = wdSeekCurrentPageHeader
    ActiveDocument.Sections(1).Headers(wdHeaderFooterPrimary).Range = "En-tête"
    document_word.ActiveWindow.ActivePane.View.SeekView = wdSeekMainDocument
     
     
    End Function
     
    Function en_tete_document()
        'création de l'en-tete
        Selection.TypeParagraph
        Selection.TypeParagraph
        Selection.ParagraphFormat.Alignment = wdAlignParagraphRight
        Selection.TypeText Text:="Monthey, le 9 mars 2006"
        Selection.TypeParagraph
        Selection.TypeParagraph
        Selection.TypeParagraph
        Selection.ParagraphFormat.Alignment = wdAlignParagraphLeft
        Selection.Font.Italic = wdToggle
        Selection.TypeText Text:="Version définitive"
        Selection.TypeParagraph
        Selection.TypeParagraph
        Selection.TypeParagraph
        Selection.Font.Italic = wdToggle
     
        ActiveDocument.Tables.Add Range:=Selection.Range, NumRows:=1, NumColumns:=1, DefaultTableBehavior:=wdWord9TableBehavior, AutoFitBehavior:=wdAutoFitFixed
        With Selection.Tables(1)
            If .Style <> "Grille du tableau" Then
                .Style = "Grille du tableau"
            End If
            .ApplyStyleHeadingRows = True
            .ApplyStyleLastRow = True
            .ApplyStyleFirstColumn = True
            .ApplyStyleLastColumn = True
        End With
        Selection.TypeText Text:="Séance du 31.12.2006"
        Selection.Font.Size = 14
        Selection.Font.Color = wdColorWhite
        With Selection.Tables(1)
            With .Shading
                .Texture = wdTextureNone
                .ForegroundPatternColor = wdColorAutomatic
                .BackgroundPatternColor = wdColorBlack
            End With
            With .Borders(wdBorderLeft)
                .LineStyle = wdLineStyleSingle
                .LineWidth = wdLineWidth050pt
                .Color = wdColorAutomatic
            End With
            With .Borders(wdBorderRight)
                .LineStyle = wdLineStyleSingle
                .LineWidth = wdLineWidth050pt
                .Color = wdColorAutomatic
            End With
            With .Borders(wdBorderTop)
                .LineStyle = wdLineStyleSingle
                .LineWidth = wdLineWidth050pt
                .Color = wdColorAutomatic
            End With
            With .Borders(wdBorderBottom)
                .LineStyle = wdLineStyleSingle
                .LineWidth = wdLineWidth050pt
                .Color = wdColorAutomatic
            End With
            .Borders(wdBorderDiagonalDown).LineStyle = wdLineStyleNone
            .Borders(wdBorderDiagonalUp).LineStyle = wdLineStyleNone
            .Borders.Shadow = False
        End With
        With Options
            .DefaultBorderLineStyle = wdLineStyleSingle
            .DefaultBorderLineWidth = wdLineWidth050pt
            .DefaultBorderColor = wdColorAutomatic
        End With
        'redimensionnement de la police en 14
        ActiveDocument.Tables(1).Select
        Selection.Font.Size = 14
        Selection.MoveDown Unit:=wdLine, Count:=1
        Selection.TypeParagraph
        Selection.TypeParagraph
     
        'création du tableau où seront insérées les différentes personnes
        ActiveDocument.Tables.Add Range:=Selection.Range, NumRows:=6, NumColumns:=2, DefaultTableBehavior:=wdWord9TableBehavior, AutoFitBehavior:=wdAutoFitFixed
        With Selection.Tables(1)
            If .Style <> "Grille du tableau" Then
                .Style = "Grille du tableau"
            End If
            .ApplyStyleHeadingRows = True
            .ApplyStyleLastRow = True
            .ApplyStyleFirstColumn = True
            .ApplyStyleLastColumn = True
        End With
     
        'supprime les bordures
        Selection.Tables(1).Select
        Selection.Borders(wdBorderTop).LineStyle = wdLineStyleNone
        Selection.Borders(wdBorderLeft).LineStyle = wdLineStyleNone
        Selection.Borders(wdBorderBottom).LineStyle = wdLineStyleNone
        Selection.Borders(wdBorderRight).LineStyle = wdLineStyleNone
        Selection.Borders(wdBorderHorizontal).LineStyle = wdLineStyleNone
        Selection.Borders(wdBorderVertical).LineStyle = wdLineStyleNone
        Selection.Borders(wdBorderDiagonalDown).LineStyle = wdLineStyleNone
        Selection.Borders(wdBorderDiagonalUp).LineStyle = wdLineStyleNone
     
        'Ajustement de la grandeur des colonnes
        Selection.Tables(1).Columns(1).SetWidth ColumnWidth:=70, RulerStyle:=wdAdjustNone
        Selection.Tables(1).Columns(2).SetWidth ColumnWidth:=400, RulerStyle:=wdAdjustNone
     
        'écriture des personnes
     
        'appel la fonction pour écrire le Président
        Selection.TypeText Text:="Président : "
        Selection.MoveRight Unit:=wdCharacter, Count:=1
        Call ecriture_personne("Président")
        Selection.MoveRight Unit:=wdCell
     
        'appel la fonction pour écrire le Secrétaire
        Selection.TypeText Text:="Secrétaire : "
        Selection.MoveRight Unit:=wdCharacter, Count:=1
        Call ecriture_personne("Secrétaire")
        Selection.MoveRight Unit:=wdCell
     
        'appel la fonction pour écrire les Présents
        Selection.TypeText Text:="Présents : "
        Selection.MoveRight Unit:=wdCharacter, Count:=1
        Call ecriture_personne("Présent")
        Selection.MoveRight Unit:=wdCell
     
        'appel la fonction pour écrire les Invités
        Selection.TypeText Text:="Invités : "
        Selection.MoveRight Unit:=wdCharacter, Count:=1
        Call ecriture_personne("Invité")
        Selection.MoveRight Unit:=wdCell
     
        'appel la fonction pour écrire les Absents
        Selection.TypeText Text:="Absents : "
        Selection.MoveRight Unit:=wdCharacter, Count:=1
        Call ecriture_personne("Absent")
        Selection.MoveRight Unit:=wdCell
     
        'appel la fonction pour écrire les Excusés
        Selection.TypeText Text:="Excusés : "
        Selection.MoveRight Unit:=wdCharacter, Count:=1
        Call ecriture_personne("Excusé")
        Selection.MoveRight Unit:=wdCell
     
        'appel la fonction pour écrire la Distribution
        Selection.TypeText Text:="Distribution : "
        Selection.MoveRight Unit:=wdCharacter, Count:=1
        Call ecriture_personne("Distribution")
        Selection.MoveDown Unit:=wdLine, Count:=1
     
        'inscription du sommaire
        Selection.TypeParagraph
        Selection.TypeParagraph
        Selection.TypeText Text:="Sommaire :"
     
        'insertion de la table des matières
        With ActiveDocument
            .TablesOfContents.Add Range:=Selection.Range, RightAlignPageNumbers:= _
                True, UseHeadingStyles:=True, UpperHeadingLevel:=1, _
                LowerHeadingLevel:=2, IncludePageNumbers:=True, AddedStyles:="", _
                UseHyperlinks:=True, HidePageNumbersInWeb:=True, UseOutlineLevels:= _
                True
            .TablesOfContents(1).TabLeader = wdTabLeaderDots
            .TablesOfContents.Format = wdIndexIndent
        End With
     
        'fait un saut de page
        Selection.InsertBreak Type:=wdPageBreak
     
        'appel la fonction d'insertion de titre
        Dim base_de_donne As Database
        Dim selection_titre As DAO.Recordset
     
        Set base_de_donne = CurrentDb
        Set selection_titre = base_de_donne.OpenRecordset("SELECT id_titre FROM tbl_titre WHERE tbl_titre.id_pv = " & Form_frm_pv.id_pv.Value)
     
        While Not selection_titre.EOF
            'Call ecriture_titre(selection_titre("id_titre"))
            selection_titre.MoveNext
        Wend
        Call ecriture_titre(53)
        'supprime les objets
        selection_titre.Close
        base_de_donne.Close
        Set selection_titre = Nothing
        Set base_de_donne = Nothing
    End Function
    Module fonction_exportation_recherche

    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
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
     
    Option Compare Database
     
    Function ecriture_personne(type_statut As String)
    'déclaration des variables
    Dim base_de_donne As Database
    Dim selection_personne As DAO.Recordset
    Dim nombre_personne As Integer
     
    'récupère les différentes informations relatives au personnes présentes, absentes, ...
    Set base_de_donne = CurrentDb
     
    'requete SQL qui va rechercher le président
    Set selection_personne = base_de_donne.OpenRecordset("SELECT nom_personne, prenom_personne FROM tbl_personne, tbl_pv, tbl_type_statut, rel_pv_personne_type_statut WHERE tbl_pv.id_pv = rel_pv_personne_type_statut.id_pv AND tbl_type_statut.id_type_statut = rel_pv_personne_type_statut.id_type_statut AND tbl_personne.id_personne = rel_pv_personne_type_statut.id_personne AND tbl_type_statut.description_type_statut = '" & type_statut & "' And tbl_pv.id_pv = " & Form_frm_pv.txt_id_pv.Value)
     
    'initialisation du nombre de personne
    nombre_personne = 0
     
    'écrit le nom de la personne plus la première lettre de son prénom
    While Not selection_personne.EOF
        nombre_personne = nombre_personne + 1
        If nombre_personne <> 1 Then
            Selection.TypeText Text:=", " & selection_personne("nom_personne") & " " & Left(selection_personne("prenom_personne"), 1) & "."
        Else
            Selection.TypeText Text:=selection_personne("nom_personne") & " " & Left(selection_personne("prenom_personne"), 1) & "."
        End If
        selection_personne.MoveNext
    Wend
     
    End Function
     
    Function ecriture_titre(id_titre As Integer)
    'déclaration des variables
    Dim description_titre As String
    Dim nombre_sous_titre As Integer
     
    'récupère la description du titre
    description_titre = DLookup("description_titre", "tbl_titre", "id_titre = " & id_titre)
     
    'récupère le nombre de sous-titre
    nombre_sous_titre = DLookup("count(id_sous_titre)", "tbl_sous_titre", "id_titre = " & id_titre)
     
    'fonction qui créé le tableau dans lequel il y aura les titres et les sous-titres
    'insertion du tableau
    ActiveDocument.Tables.Add Range:=Selection.Range, NumRows:=(nombre_sous_titre * 2) + 1, NumColumns:=5, DefaultTableBehavior:=wdWord9TableBehavior, AutoFitBehavior:=wdAutoFitFixed
    'redéfinit la largeur des colonnes
    Selection.Tables(1).Columns(1).SetWidth ColumnWidth:=266, RulerStyle:=wdAdjustNone
    Selection.Tables(1).Columns(2).SetWidth ColumnWidth:=18, RulerStyle:=wdAdjustNone
    Selection.Tables(1).Columns(3).SetWidth ColumnWidth:=63, RulerStyle:=wdAdjustNone
    Selection.Tables(1).Columns(4).SetWidth ColumnWidth:=63, RulerStyle:=wdAdjustNone
    Selection.Tables(1).Columns(5).SetWidth ColumnWidth:=58, RulerStyle:=wdAdjustNone
     
    'fusionne la cellule de titre et inscrit la valeur à l'intérieur
    Selection.MoveRight Unit:=wdWord, Count:=6, Extend:=wdExtend
    Selection.Style = ActiveDocument.Styles("Titre 1")
    Selection.Cells.Merge
    Selection.TypeText Text:=description_titre
    Selection.MoveRight Unit:=wdCell
    Selection.MoveLeft Unit:=wdCell
     
    'met la première ligne du tableau en noir avec la police en blanc
    With Selection.Cells
        With .Shading
            .Texture = wdTextureNone
            .ForegroundPatternColor = wdColorAutomatic
            .BackgroundPatternColor = wdColorBlack
        End With
    End With
    Selection.Font.Color = wdColorWhite
     
    'dessends à la cellule en dessous
    Selection.MoveDown
     
    'appel la fonction pour l'écriture des sous-titre
    Call ecriture_sous_titre(id_titre)
     
    End Function
     
    Function ecriture_sous_titre(id_titre As Integer)
    'déclaration des variables
    Dim base_de_donne As Database
    Dim selection_sous_titre As DAO.Recordset
     
    'récupère les différentes informations des sous-titres
    Set base_de_donne = CurrentDb
     
    'requete SQL qui va rechercher le président
    Set selection_sous_titre = base_de_donne.OpenRecordset("SELECT DISTINCT tbl_sous_titre.titre_sous_titre, tbl_sous_titre.description_sous_titre, tbl_etat.description_etat, tbl_personne.nom_personne, tbl_personne.prenom_personne, tbl_type_sous_titre.description_type_sous_titre, tbl_sous_titre.delai_sous_titre FROM tbl_etat INNER JOIN (tbl_type_sous_titre INNER JOIN (tbl_sous_titre INNER JOIN (tbl_personne INNER JOIN rel_personne_sous_titre ON tbl_personne.id_personne = rel_personne_sous_titre.id_personne) ON tbl_sous_titre.id_sous_titre = rel_personne_sous_titre.id_sous_titre) ON tbl_type_sous_titre.id_type_sous_titre = tbl_sous_titre.id_type_sous_titre) ON tbl_etat.id_etat = tbl_sous_titre.id_etat WHERE tbl_sous_titre.id_titre = " & id_titre)
     
    'écrit le nom de la personne plus la première lettre de son prénom
    While Not selection_sous_titre.EOF
        'inscription du titre du sous-titre
        Selection.TypeText Text:=selection_sous_titre("titre_sous_titre")
        Selection.MoveRight
        'inscription du titre de la description
        Selection.TypeText Text:=Left(selection_sous_titre("description_type_sous_titre"), 1)
        Selection.MoveRight
        'inscription du titre de la/les personnes
        Selection.TypeText Text:=Left(selection_sous_titre("nom_personne"), 1) & "" & Left(selection_sous_titre("prenom_personne"), 1)
        Selection.MoveRight
        'inscription du délai
        'controle qu'il y a bien un délai
        If Not IsNull(selection_sous_titre("delai_sous_titre")) Then
            Selection.TypeText Text:=selection_sous_titre("delai_sous_titre")
        End If
        Selection.MoveRight
        'inscription du titre de l'état
        Selection.TypeText Text:=selection_sous_titre("description_etat")
        Selection.MoveRight Unit:=wdCell, Count:=1
        'inscription du titre de la description
        Selection.MoveRight Unit:=wdWord, Count:=6, Extend:=wdExtend
        Selection.Cells.Merge
        Selection.TypeText Text:=selection_sous_titre("description_sous_titre")
        'va à la prochaine ligne
        Selection.MoveRight
        selection_sous_titre.MoveNext
    Wend
     
    End Function

    modul variable
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    Public application_word As Word.Application
    Public document_word As Word.Document
    et l'action click sur le bouton duformulaire

    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
     
    Private Sub cmd_imprimer_Click()
    'déclare l'objet de l'application word
    Set application_word = CreateObject("Word.application")
    'rend l'application visible
    application_word.Visible = True
    'ajoute un document à l'application word
    Set document_word = application_word.Documents.Add
     
    'appel la fonction de création de l'en-tête de page
    Call en_tete_page
    'appel la fonction de création de l'en-tête du document
    Call en_tete_document
     
    Set document_word = Nothing
    Set application_word = Nothing
     
    End Sub

  11. #11
    Membre confirmé
    Avatar de Petogaz
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    479
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 479
    Points : 580
    Points
    580
    Par défaut
    ton problème vient de tes procédures en_tete_document et autres...

    dans cette procédure tu fais des il faut lui repréciser l'objet document_word qui fait appel donc :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    document_word.selection....
    et ceci dans tout ton code. tu peux simplifier en utilisant des bloc With...end with.
    voilà !

  12. #12
    Membre habitué
    Inscrit en
    Novembre 2003
    Messages
    533
    Détails du profil
    Informations personnelles :
    Âge : 37

    Informations forums :
    Inscription : Novembre 2003
    Messages : 533
    Points : 180
    Points
    180
    Par défaut
    Mais quand je fais avec le document word, il me met :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Propriété ou Méthode non gérée par cet objet
    Merci beaucoup pour votre aide

  13. #13
    Responsable Access

    Avatar de Arkham46
    Profil pro
    Inscrit en
    Septembre 2003
    Messages
    5 865
    Détails du profil
    Informations personnelles :
    Localisation : France, Loiret (Centre)

    Informations forums :
    Inscription : Septembre 2003
    Messages : 5 865
    Points : 14 526
    Points
    14 526
    Par défaut
    Citation Envoyé par Petogaz
    dans cette procédure tu fais des il faut lui repréciser l'objet document_word qui fait appel donc :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    document_word.selection....
    C'est ça que moi j'appelle un objet non libéré!

    Citation Envoyé par Petogaz
    un problème de référence
    me faisait plutôt penser aux références DAO, ....


    La Selection est sans préfixe dans Excel, donc elle s'applique à l'application :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    application_word.selection

  14. #14
    Membre confirmé
    Avatar de Petogaz
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    479
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 479
    Points : 580
    Points
    580
    Par défaut
    heu Arkham46 ! pour moi un objet libéré c'est une libération en mémoire de l'objet instancié . comme ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Set application_word = Nothing
    si c'est pas le cas il va falloir que je dise à mon auditoire que c'est faux ce que je leur ais appris

    et quand je dis Référence je fais allusion à l'objet qui fait appel à Séléction donc qui fait référence à Selection(comme tu le dis le "préfixe").

  15. #15
    Responsable Access

    Avatar de Arkham46
    Profil pro
    Inscrit en
    Septembre 2003
    Messages
    5 865
    Détails du profil
    Informations personnelles :
    Localisation : France, Loiret (Centre)

    Informations forums :
    Inscription : Septembre 2003
    Messages : 5 865
    Points : 14 526
    Points
    14 526
    Par défaut
    Citation Envoyé par Petogaz
    heu Arkham46 ! pour moi un objet libéré c'est une libération en mémoire . comme ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Set application_word = Nothing
    si c'est pas le cas il va falloir que je dise à mon auditoire que c'est faux ce que je leur ais appris
    Oui oui c'est bon ce que tu dis, c'est juste moi qui extrapole un peu...

    En fait ce que j'imagine c'est que le :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Set application_word = Nothing
    Libère l'objet application et tous ses sous-objets.

    Quand tu utilises directement une méthode genre :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Selection.Font.Size = 14
    j'ai comme l'impression qu'il se crée un objet un mémoire qui n'a pas de lien avec ton objet application (parce que après tout l'instruction fonctionne quand même donc il doit bien se passer quelque chose) et que donc quand tu libères l'application il ne libère pas tout (et on alors souvent un process qui continue à tourner en fond).

    Bon c'est tordu et j'ai pas encore trouvé ce qu'il faisait exactement dans ce cas, donc disons que l'objet n'est pas référencé alors

  16. #16
    Membre confirmé
    Avatar de Petogaz
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    479
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 479
    Points : 580
    Points
    580
    Par défaut
    de toutes les façons l'objet selection qui est utiliser par des Macros Automatiques ne sont pas recommendés à cause de leur appel un peu hasardeuse (j'exagère !! ). en tout cas son utlisation doit faire preuve d'une grande prudence. on peut facilement s'y perdre. on perd l'objet selectionné .....le mieux est de préciser l'objet (plages, feuilles ou autres objets).

    Citation Envoyé par Arkham46
    l'objet n'est pas référencé alors
    c'est un abus de langage de ma part. préfixé en fin de compte me parait plus adéquat.

  17. #17
    Membre confirmé
    Avatar de Petogaz
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    479
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 479
    Points : 580
    Points
    580
    Par défaut
    salut,

    Citation Envoyé par krfa1
    Mais quand je fais avec le document word, il me met :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    Propriété ou Méthode non gérée par cet objet
    c'est un problème lié à la portée de ta variable objet document_word.

  18. #18
    Membre habitué
    Inscrit en
    Novembre 2003
    Messages
    533
    Détails du profil
    Informations personnelles :
    Âge : 37

    Informations forums :
    Inscription : Novembre 2003
    Messages : 533
    Points : 180
    Points
    180
    Par défaut
    Bonjour,

    Désolé du retard, mais je n'ai pas pu venir avant. lol

    C'est bon, j'ai résolu le problème. C'était ce que vous disiez. Je n'ai pas fait de class car je devrai recommencer un bonne partie du projet. Et je suis limité dans le temps.

    Alors ce que j'ai fait c'est que j'ai mis à chaque fois


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    document_word.ActiveWindow.Selection. ...
    Voilà

    En tout cas merci de votre précieuse aide

    A tout bientot

    Bye

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

Discussions similaires

  1. Pilotage word en vb.net
    Par frandile.elmahdi dans le forum VB.NET
    Réponses: 3
    Dernier message: 07/01/2008, 13h04
  2. [VB.NET] pilotage word : champ de formulaire
    Par Kropernic dans le forum Windows Forms
    Réponses: 2
    Dernier message: 30/07/2006, 12h15
  3. [.NET] Pilotage Word et licence
    Par aldbaran dans le forum Framework .NET
    Réponses: 3
    Dernier message: 03/01/2006, 15h01
  4. [C#] Pilotage Word
    Par diaboloche dans le forum Windows Forms
    Réponses: 3
    Dernier message: 27/12/2005, 21h39
  5. [AUTOMATION WORD]Pilotage Word par Delphi
    Par Sunny dans le forum API, COM et SDKs
    Réponses: 5
    Dernier message: 05/12/2002, 17h09

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