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 Access Discussion :

Fusionner plusieurs PDF en un seul sous vba Access - ERREUR d'execution 429


Sujet :

VBA Access

  1. #1
    Membre à l'essai
    Femme Profil pro
    Stagiaire
    Inscrit en
    Mai 2014
    Messages
    41
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Stagiaire
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Mai 2014
    Messages : 41
    Points : 23
    Points
    23
    Par défaut Fusionner plusieurs PDF en un seul sous vba Access - ERREUR d'execution 429
    Bonjour à tous,

    Comme dit dans l'objet je cherche à fusionner plusieurs PDF édités par ma base de donnée au fur et à mesure.


    Voici mon code :
    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
        '''' Concaténation
        Set oPDDoc1 = CreateObject("AcroExch.PDDoc")
        Set oPDDoc2 = CreateObject("AcroExch.PDDoc")
     
        oPDDoc1.Open (TabNom(0))
     
        For J = 1 To I
            oPDDoc2.Open (TabNom(J))
            Num1 = oPDDoc1.GetNumPages()
            Num2 = oPDDoc2.GetNumPages()
           '  Paramètres :
           '   1 Page du document en cours après laquelle l'insertion sera faite. La 1ere page est 0.
           '   2 Document contenant les pages à insérer.
           '   3 La 1ere page à être insérée dans le document en cours à partir du Document contenant les pages à insérer.
           '   4 Le nombre de pages à insérer.
           '   5 Si nombre > 0 les bookmarks sont copiés, si 0 ils ne le sont pas.
           oPDDoc1.InsertPages Num1, oPDDoc2, 0, Num2, 0
        Next
     
        oPDDoc1.Save 1, "C:\Users\[NomUser]\Documents\Fusion.pdf"
     
        oPDDoc2.Close
        oPDDoc1.Close
        Set oPDDoc2 = Nothing
        Set oPDDoc1 = Nothing
    End Sub
    TabNom est un tableau de taille I correspondant au nombre de champs issus d'une requête SQL qui me réccupère les chemins des fichiers à concaténer.

    Source :
    Je me suis inspirée du tuto de kiki29 : http://www.developpez.net/forums/d43...ro-pdfcreator/

    OR j'ai une Erreur d'execution 429 : "Un composant ActiveX ne peut pas créer d'objet" sur la ligne : Set oPDDoc1 = CreateObject("AcroExch.PDDoc")

    J'ai bien Adobe Acrobat 9.0 Type Librairy et PDF Creator dans mes références, j'ai même appliquée l'astuce donnée dans le dernier post de cette discussion :
    http://www.developpez.net/forums/d14...creer-d-objet/

    Rien n'y fait.

    En creusant plus le tutoriel, j'ai vu que je pouvais passer par :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
        '''' Concaténation
        Set MonPDF = CreateObject("pdfforge.pdf.pdf")
        MonPDF.MergePDFFiles_2 TabNom, Chemin & "\" & "Fusion.pdf", True
        Set MonPDF = Nothing
    Mais ça me fait une Erreur d'execution 13 : "Incompatibilité de Type" sur la ligne : MonPDF.MergePDFFiles_2 TabNom, Chemin & "\" & "Fusion.pdf", True que je n'arrive pas à solutionner non plus.

    C'est vrai que ces bouts de code ont été écrits pour Excel, il ne faut peut être pas s'y prendre de la même façon pour Access, mais c'est completement nouveau pour moi, alors je ne sais pas vraiment comment m'y prendre.
    Je ne suis pas contre une solution intermédiaire si quelqu'un a...

    Merci de votre aide.

  2. #2
    Rédacteur/Modérateur
    Avatar de argyronet
    Homme Profil pro
    Panseur de bobos en solutions ETL
    Inscrit en
    Mai 2004
    Messages
    5 128
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Panseur de bobos en solutions ETL
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2004
    Messages : 5 128
    Points : 12 185
    Points
    12 185
    Billets dans le blog
    5
    Par défaut
    Bonjour,

    Possèdes-tu une version complète d'Acrobat ?

    Argy

  3. #3
    Membre à l'essai
    Femme Profil pro
    Stagiaire
    Inscrit en
    Mai 2014
    Messages
    41
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Stagiaire
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Mai 2014
    Messages : 41
    Points : 23
    Points
    23
    Par défaut Versions logiciels
    Hello,

    Alors je pensais que oui, mais suite à ta question, n'étant pas fichue de trouver la preuve, j'ai directement posé la question à mon service info... et la réponse est non. --'
    Ceci explique celà.

    Par contre à priori, pour PDFCreator ça semble ok.

    Pourriez-vous m'expliquer comment m'y prendre ?

    Merci

  4. #4
    Rédacteur/Modérateur
    Avatar de argyronet
    Homme Profil pro
    Panseur de bobos en solutions ETL
    Inscrit en
    Mai 2004
    Messages
    5 128
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Panseur de bobos en solutions ETL
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2004
    Messages : 5 128
    Points : 12 185
    Points
    12 185
    Billets dans le blog
    5
    Par défaut
    Humm, c'est bien ce qui me semblait...

    Bon, concernant PDFCreator, si tu l'as installé, tu possèdes alors un dossier :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    C:\Program Files (x86)\PDFCreator\COM\Windows Scripting Host\VBScripts
    Là, tu trouveras une palanquée d'exemples.
    Celui qui t'intéresses est évidemment "CombineJobs.vbs" que tu dois adapter bien entendu.

    Argy

  5. #5
    Membre à l'essai
    Femme Profil pro
    Stagiaire
    Inscrit en
    Mai 2014
    Messages
    41
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Stagiaire
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Mai 2014
    Messages : 41
    Points : 23
    Points
    23
    Par défaut
    Ahhh ! Mais c'est génial cette "bibliothèque intégrée" !

    Je vais décortiquer ça. Je te tiendrai au courant de mon avancée.
    Merci du tuyau.


    >>> NOTE pour les têtes en l'air comme moi qui passeraient par ici <<<
    Ne pas oublier de paramétrer Propriétés > Ouvrir avec > Bloc notes pour ouvrir le .vbs.

  6. #6
    Rédacteur/Modérateur
    Avatar de argyronet
    Homme Profil pro
    Panseur de bobos en solutions ETL
    Inscrit en
    Mai 2004
    Messages
    5 128
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Panseur de bobos en solutions ETL
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2004
    Messages : 5 128
    Points : 12 185
    Points
    12 185
    Billets dans le blog
    5
    Par défaut
    Citation Envoyé par arr37 Voir le message
    >>> NOTE pour les têtes en l'air comme moi qui passeraient par ici <<<
    Ne pas oublier de paramétrer Propriétés > Ouvrir avec > Bloc notes pour ouvrir le .vbs.
    Oui, très bonne remarque.

    Pour la lisibilité, il vaut mieux un éditeur avec coloration syntaxique (PSPad, NP++...)

    Argy

  7. #7
    Membre à l'essai
    Femme Profil pro
    Stagiaire
    Inscrit en
    Mai 2014
    Messages
    41
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Stagiaire
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Mai 2014
    Messages : 41
    Points : 23
    Points
    23
    Par défaut Noeuds au cerveau et Questionnement
    Bonjour,

    J'ai du passer en urgence sur une autre tâche et je ne me suis mise qu'à décortiquer le contenu du .vbs ce matin...
    Je dois dire que je ne comprends pas vraiment la logique du processus (surement parce que le mode de fonctionnement de PDF Creator m'est complètement inconnu).
    Enfin, je n'abandonne pas.

    J'ai toutefois une question:

    D'après http://www.developpez.net/forums/d43...ro-pdfcreator/ ; post #8, le code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    '''' Concaténation
        Set MonPDF = CreateObject("pdfforge.pdf.pdf")
        MonPDF.MergePDFFiles_2 TabNom, Chemin & "\" & "Fusion.pdf", True
        Set MonPDF = Nothing
    devrait fonctionner avec PDFCreator.

    Or l'erreur '-2147467261(80004003)' : La référence de l'objet n'est pas définie à une instance d'un objet. survient (ligne 3).

    J'ai lu que cette erreur venait d'une variable non initialisée mais dans mon cas, je ne vois pas bien laquelle pourrait être en cause...

    Pourtant, j'aimais bien ce bout de code : simple, concis et qui me permet de réccupérer les chemins disséminés des .pdf à concaténer dont le nombre est variable grâce à l'usage d'un tableau.
    Après je ne l'utilise peut-être pas bien...

    Pensez-vous qu'il pourrait marcher ou le plus robuste est vraiment de s'inspirer des sources PDFCreator ?


  8. #8
    Rédacteur/Modérateur
    Avatar de argyronet
    Homme Profil pro
    Panseur de bobos en solutions ETL
    Inscrit en
    Mai 2004
    Messages
    5 128
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Panseur de bobos en solutions ETL
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2004
    Messages : 5 128
    Points : 12 185
    Points
    12 185
    Billets dans le blog
    5
    Par défaut
    Humm, après bidouillage du code fourni, voilà ce que ça donne et ça tourne...
    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
     
    Option Compare Database
    Option Explicit
     
    Private Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long)
     
    Private oPDFCreator                                    As Object
    Private m_lngReadyState                                As Long
     
    Sub TestFusion()
     
    Const MAX_TIME                                         As Long = 30    ' in seconds
    Const SLEEP_TIME                                       As Long = 250    ' in milliseconds
     
    Dim strDefaultPrinter                                  As String
    Dim oFSO                                               As Scripting.FileSystemObject
    Dim oTFile                                             As Scripting.TextStream
     
    Dim T                                                  As Long
    Dim strTargetPath                                      As String
    Dim strAppTitle                                        As String
    Dim strPDFFileName                                     As String
    Dim strTxtFileName                                     As String
    Dim F                                                  As Integer
     
     
        On Error GoTo L_ErrTestFusion
     
        Set oFSO = CreateObject("Scripting.FileSystemObject")
        strAppTitle = "Démo fusion"
        strPDFFileName = strAppTitle & ".pdf"
        strTargetPath = Application.CurrentProject.Path & "\"
     
        Set oPDFCreator = Nothing
     
        Do
            Set oPDFCreator = CreateObject("PDFCreator.clsPDFCreator")
        Loop Until Not oPDFCreator Is Nothing
        With oPDFCreator
            If .cstart("/NoProcessingAtStartup") = False Then
                Err.Raise 17, "No Processing At Startup", "Initialisation de PDFCreator impossible..." & vbCrLf & "Veuillez vous assurer que «PDFCreator» est correctement installé sur le poste notamment en tentant de créer un PDF vous-même depuis un document Word ou bien depuis un fichier Word vu de l'Explorateur."
            End If
            DoEvents
            .cvisible = True
            .cPrinterStop = True
            .cOption("UseAutosave") = 1
            .cOption("UseAutosaveDirectory") = 1
            .cOption("AutosaveDirectory") = strTargetPath
            .cOption("AutosaveFilename") = strPDFFileName
            strDefaultPrinter = .cDefaultprinter
            .cDefaultprinter = "PDFCreator"
            .cClearCache
     
            For F = 1 To 4
                strTxtFileName = strTargetPath & "Fichier N°" & F & ".txt"
                Set oTFile = oFSO.CreateTextFile(strTxtFileName, True)
                With oTFile
                    .WriteLine "C'est le contenu N° " & F
                    .Close
                End With
                oPDFCreator.cPrintfile CStr(strTxtFileName)
                Sleep 2000
                oFSO.DeleteFile strTxtFileName
            Next
            Set oTFile = Nothing
            Sleep 2000
            .cCombineAll
     
            T = 0
            Do While (.cCountOfPrintjobs <> 1) And (T < (MAX_TIME * 1000 / SLEEP_TIME))
                T = T + 1
                DoEvents
            Loop
            .cPrinterStop = False
        End With
        T = 0
        m_lngReadyState = 0
        Do While (m_lngReadyState = 0) And (T < (MAX_TIME * 1000 / SLEEP_TIME))
            T = T + 1
            Sleep SLEEP_TIME
        Loop
        With oPDFCreator
            .cDefaultprinter = strDefaultPrinter
            Sleep 200
            .cClearCache
            .cClose
        End With
     
        MsgBox "C'est fait"
        Shell "Explorer.exe /select," & strTargetPath & strPDFFileName
     
        On Error GoTo 0
    L_ExTestFusion:
        Shell "taskkill /f /im PDFCreator.exe"
        Exit Sub
     
    L_ErrTestFusion:
        MsgBox Err.Description, 48, Err.Source
        Resume L_ExTestFusion
    End Sub
    Argy

  9. #9
    Membre à l'essai
    Femme Profil pro
    Stagiaire
    Inscrit en
    Mai 2014
    Messages
    41
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Stagiaire
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Mai 2014
    Messages : 41
    Points : 23
    Points
    23
    Par défaut Whaou !
    Quel boulot !
    C'est super cool d'avoir fait un tel effort pour me filer un coup de main.
    Merci beaucoup.

    J'avais creusé de mon côté et suis assez fière de voire que j'étais assez proche de ce que tu me montres (pas mal de dysfonctionnement en plus quand même ).

    J'ai donc repris pour l'essentiel ta base et ajouté 2/3 trucs, et ça donne :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    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
    Sub concatenerPDF(Path, NomAuto)
    '
    'Concatène plusieurs fichiers PDF
    '
    Const MAX_TIME As Long = 30    ' in seconds
    Const SLEEP_TIME As Long = 250    ' in milliseconds
     
    Dim strDefaultPrinter As String
    Dim oFSO As Scripting.FileSystemObject
     
    Dim T As Long
    Dim strTargetPath As String
    Dim strAppTitle As String
    Dim strPDFFileName As String
    Dim strTxtFileName As String
    Dim F As Integer
     
        'Gestion des erreurs
        On Error GoTo L_ErrConcatenerPDF
     
        Set oFSO = CreateObject("Scripting.FileSystemObject")
        'Définition du nom du projet
        strAppTitle = NomAuto
        strAppTitle = InputBox("Veuillez nommer le fichier :", "Nom", strAppTitle, 2)
        'Attribution du nom au fichier de sortie
        strPDFFileName = strAppTitle & ".pdf"
        'Définition de l'emplacement du fichier de sortie
        strTargetPath = Path & "\"
     
         'Ecrasement du PDF s'il existe déjà
        If Dir(strTargetPath & strPDFFileName) = strPDFFileName Then
            If MsgBox("Un fichier" & strTargetPath & strPDFFileName & " existe déjà." & Chr(10) & Chr(10) & "Ce dernier sera écrasé.") = vbOK Then
                Kill (strTargetPath & strPDFFileName)
            Else
                GoTo L_ExConcatenerPDF
            End If
        End If
     
        Set oPDFCreator = Nothing
        Do
            Set oPDFCreator = CreateObject("PDFCreator.clsPDFCreator")
        Loop Until Not oPDFCreator Is Nothing
     
        'Vérification de l'existence du logiciel
        With oPDFCreator
            If .cStart("/NoProcessingAtStartup") = False Then
                err.Raise 17, "No Processing At Startup", "Initialisation de PDFCreator impossible..." & vbCrLf & "Veuillez vous assurer que PDFCreator est correctement installé sur le poste notamment en tentant de créer un PDF vous-même depuis un document Word ou bien depuis un fichier Word vu de l'Explorateur."
            End If
            'Paramètrage du PDF
            DoEvents
            .cVisible = True
            .cPrinterStop = True
            .cOption("UseAutosave") = 1
            .cOption("UseAutosaveDirectory") = 1
            .cOption("AutosaveDirectory") = strTargetPath
            .cOption("AutosaveFilename") = strPDFFileName
            strDefaultPrinter = .cDefaultPrinter
            .cDefaultPrinter = "PDFCreator"
            .cClearCache
     
            'Envoi au logiciel des chemins des fichiers à concaténer
            For F = 0 To Taille
                .cPrintFile (TabNom(F))
                Sleep 2000
            Next F
            Sleep 2000
     
            'Instruction de concaténation
            .cCombineAll
            'Contrainte sur Access pour laisser la main à PDFCreator afin d'exécuter la commande
            T = 0
            Do While (.cCountOfPrintjobs <> 1) And (T < (MAX_TIME * 1000 / SLEEP_TIME))
                T = T + 1
                DoEvents
            Loop
            .cPrinterStop = False
        End With
     
        ''''' ??? '''''
        T = 0
        m_lngReadyState = 0
        Do While (m_lngReadyState = 0) And (T < (MAX_TIME * 1000 / SLEEP_TIME))
            T = T + 1
            Sleep SLEEP_TIME
        Loop
     
        'Remise à jour des paramètres d'impression par défaut Windows
        With oPDFCreator
            .cDefaultPrinter = strDefaultPrinter
            Sleep 200
            .cClearCache
            .cClose
        End With
     
        'Ouverture de l'emplacement du fichier créé
        Shell "Explorer.exe /select," & strTargetPath & strPDFFileName
     
        On Error GoTo 0
     
    L_ExConcatenerPDF:
        'Libération des objets et fermeture de PDFCreator
        Set oPDFCreator = Nothing
        Shell "taskkill /f /im PDFCreator.exe"
        Exit Sub
     
    L_ErrConcatenerPDF:
        'Information utilisateur et reprise de la fonction sur l'étiquette L_ExConcatenerPDF
        MsgBox err.Description, 48, err.Source
        Resume L_ExConcatenerPDF
     
    End Sub
    Par contre avec mes modifications le principal dysfonctionnement auquel j'étais confrontée est réapparu :
    En gros j'ai une fonction qui remplit Public TabNom qui est ensuite utilisé par les autres Sub du module. concatenerPDF s'en sert pour récupérer les noms des fichiers à concaténer. Public Taille est la taille de TabNom.
    Le problème est qu'à chaque boucle Adobe Reader s'ouvre et garde la main : il faut donc à chaque fois le fermer manuellement.
    Quand j'ai 3/4 fichiers à concaténer c'est bof, mais c'est absoluement affreux quand TabNom regroupe une centaine de chemins...

    Y a-t-il une commande qui empêcherai Adobe Reader de s'ouvrir ?

    Enfin, peux tu m'expliquer cette partie ? :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
        ''''' ??? '''''
        T = 0
        m_lngReadyState = 0
        Do While (m_lngReadyState = 0) And (T < (MAX_TIME * 1000 / SLEEP_TIME))
            T = T + 1
            Sleep SLEEP_TIME
        Loop
    Encore un grand MERCI.

  10. #10
    Rédacteur/Modérateur
    Avatar de argyronet
    Homme Profil pro
    Panseur de bobos en solutions ETL
    Inscrit en
    Mai 2004
    Messages
    5 128
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Panseur de bobos en solutions ETL
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2004
    Messages : 5 128
    Points : 12 185
    Points
    12 185
    Billets dans le blog
    5
    Par défaut
    Bah, inscris le cod qui gère ton "Public TabNom"...

    Citation Envoyé par arr37
    Enfin, peux tu m'expliquer cette partie ? :
    ce bloc sert à donner du temps processeur car la classe PDF travaille en arrière plan.

    Argy

  11. #11
    Membre à l'essai
    Femme Profil pro
    Stagiaire
    Inscrit en
    Mai 2014
    Messages
    41
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Stagiaire
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Mai 2014
    Messages : 41
    Points : 23
    Points
    23
    Par défaut Remplissage du tableau
    Mon tableau est rempli ainsi :
    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
     
    Public Sub RemplissageTab(ByVal Path As String)
    '
    ' Récupération des données (chemins et nombre de page) des fichiers selectionnés
    '
    Dim rSt As DAO.Recordset
    Dim rEq, Chemin As String
    Dim I, J As Integer
    'TabNom, TabPage et Taille sont Public
    Dim Num As Long
     
        '''' Récupération des données à traiter
        rEq = "SELECT IDElement, [...] FROM T_Element, [...] WHERE [...]"
        Set rSt = CurrentDb.OpenRecordset(rEq, dbOpenDynaset)
        If rSt.RecordCount <> 0 Then
            rSt.MoveFirst
            Taille = 0 'récupère le nombre de fichiers à concaténer
            Do While Not rSt.EOF
                Taille = Taille + 1
                rSt.MoveNext
            Loop
            ReDim TabNom(Taille)
            ReDim TabPage(Taille)
            rSt.MoveFirst 'rempli le tableau avec le chemin complet des fichiers
            For I = 0 To UBound(TabNom) - 1
                Chemin = CheminFichier(rSt.Fields("IDElement").value) & "\" & NomFichier(rSt.Fields("IDElement").value, "pdf")
         'on regroupe dans le tableau des chemins divers de l'arborescence "C:\..."
                TabNom(I) = Chemin
                Num = GetPageNum(Chemin)
         'Je relève le nombre de pages car après avoir concaténé, il faut que je pagine mon PDF final
                TabPage(I) = Num
                rSt.MoveNext
            Next I
        End If
        rSt.Close
        Set rSt = Nothing
    End Sub


    ce bloc sert à donner du temps processeur car la classe PDF travaille en arrière plan.
    Ah je pensais que c'était ce bloc là :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    T = 0
            Do While (.cCountOfPrintjobs <> 1) And (T < (MAX_TIME * 1000 / SLEEP_TIME))
                T = T + 1
                DoEvents
            Loop
    J'ai compris de travers... Du coup il fait quoi celui-là ?

    (Dsl, je suis un peu reloue avec mes questions... mais j'aime pas ne pas réfléchir/ne rien apprendre quand je cherche à faire quelque chose de nouveau... surtout quand qqun m'aide. )

  12. #12
    Rédacteur/Modérateur
    Avatar de argyronet
    Homme Profil pro
    Panseur de bobos en solutions ETL
    Inscrit en
    Mai 2004
    Messages
    5 128
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Panseur de bobos en solutions ETL
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2004
    Messages : 5 128
    Points : 12 185
    Points
    12 185
    Billets dans le blog
    5
    Par défaut
    Du peu que je vois c'est la fonction GetPageNum() qui lève ton problème avec les PDF ouverts.
    Peux-tu poster cette fonction ?

    Argy

  13. #13
    Membre à l'essai
    Femme Profil pro
    Stagiaire
    Inscrit en
    Mai 2014
    Messages
    41
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Stagiaire
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Mai 2014
    Messages : 41
    Points : 23
    Points
    23
    Par défaut
    Ah ?
    J'aurais jamais pensé qu'elle pouvait être en cause...
    Parce qu'elle n'intervient pas dans le remplissage de TabNom, seulement pour TabPage qui lui est utilisé pour rédiger un word... à priori pas grand chose à voir. :/

    La 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
    Function GetPageNum(ByVal PDF_File As String)
     
    Dim FileNum As Long
    Dim strRetVal As String
    Dim RegExp
        Set RegExp = CreateObject("VBscript.RegExp")
        RegExp.Global = True
        RegExp.Pattern = "/Type\s*/Page[^s]"
        FileNum = FreeFile
        Open PDF_File For Binary As #FileNum
        strRetVal = Space(LOF(FileNum))
        Get #FileNum, , strRetVal
        Close #FileNum
        GetPageNum = RegExp.Execute(strRetVal).count
     
    End Function

    J'ai trouvé un post qui traite du même sujet : http://www.developpez.net/forums/d10...es-pdfcreator/
    J'ai tenté de tuer le processus avec une fonction que j'ai appellé KillProcess et qui fonctionne très bien, mais ça ne marche pas et en surveillant le Gestionnaire des tâches je constate le déroulé suivant :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    KillProcess "AcroRd32.exe"
                ''' le processus AcroRd32.exe se ferme
                .cPrintFile (TabNom(F))
                ''' le processus AcroRd32.exe se réouvre
                ''' le déroulé de la procédure s'arrête ici, je dois fermer Adobe Reader à la main pour qu'il reprenne avec les lignes ci-dessous
                KillProcess "AcroRd32.exe"
                Sleep 2000

  14. #14
    Rédacteur/Modérateur
    Avatar de argyronet
    Homme Profil pro
    Panseur de bobos en solutions ETL
    Inscrit en
    Mai 2004
    Messages
    5 128
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Panseur de bobos en solutions ETL
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2004
    Messages : 5 128
    Points : 12 185
    Points
    12 185
    Billets dans le blog
    5
    Par défaut
    Humm, à priori, non, ce n'est pas elle qui semble être en cause mais sans doute ton process PDFCreator qui ouvre le PDF à chaque génération ; n'étant pas devant ton poste, il m'est difficile de cerner le pourquoi.
    Le mieux serait donc de faire du pas à pas et voir à quel moment le process Adobe Reader est créé.
    Ensuite tu seras agir.

    Argy

  15. #15
    Membre à l'essai
    Femme Profil pro
    Stagiaire
    Inscrit en
    Mai 2014
    Messages
    41
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Stagiaire
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Mai 2014
    Messages : 41
    Points : 23
    Points
    23
    Par défaut Résultat du pas à pas
    Bonjour Argy,
    Merci encore pour ton attention.

    Le pas à pas (en scrutant le Gestionnaire des tâches Windows) donne le résultat suivant :

    Pointeur positionné sur :
    F8
    RAS.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    KillProcess AcroRd32.exe
    F8
    Instruction complètement inutile car le processus AcroRd32.exe n'est pas lancé.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    .cPrintFile (monTab(F))
    monTab(F)renvoie un chemin de fichier classique (du type : C:\[...]\MonDoc.pdf).
    F8
    AcroRd32.exe se lance, Adobe Reader 9 s'ouvre et prend la main du processeur.
    La flèche jaune du déboggeur disparaît au lieu de se positionner sur KillProcess AcroRd32.exe.
    F8 impossible, même en re-cliquant dans l'éditeur VBA.

    Le seul moyen de relancer la procédure est de fermer Adobe Reader à la main, ou d'arrêter manuellement le processus AcroRd32.exe depuis le Gestionnaire des tâches Windows.

    J'ai essayé :
    de passer une chaîne vide dans monTab(F) : Adobe Reader ne s'ouvre pas.

    J'en conclus :
    que le problème vient soit de l'execution de .cPrintFile, soit du fait que figure dans la variable monTab(F) l'indication d'extension .pdf.

    J'ai cherché :
    sur internet ce que faisait exactement .cPrintFile mais je n'ai pas trouvé beaucoup d'explications... pas moyen donc de savoir comment ça fonctionne.

    > As-tu une idée ?

  16. #16
    Membre à l'essai
    Femme Profil pro
    Stagiaire
    Inscrit en
    Mai 2014
    Messages
    41
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Stagiaire
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Mai 2014
    Messages : 41
    Points : 23
    Points
    23
    Par défaut
    Alors,

    J'ai creusé la piste 2 :
    soit du fait que figure dans la variable monTab(F) l'indication d'extension .pdf
    J'ai donc supprimé du nom des chemins le ".pdf" : Acrobat ne s'ouvre plus.
    Mais bien sur : le fichier ainsi concaténé est considéré comme "endommagé" ! Ca paraît logique.

    J'ai fait un test aussi en remplaçant l'un des chemins de mon tableau par un chemin en ".docx". Lors de son passage dans Word s'ouvre et Acrobat aussi bloquant également le processus.


    Ma question est la suivante :
    Y a-t-il un paramètrage automatique dans PDFCreator qui demanderait au logiciel de tester l'intégrité du chemin entré par ouverture du logiciel adéquat ? (et bien sur qui, dans l'idéal pourrait se désactiver...)

    Désolée si la question est trop basique, je suis vraiment une noob en PDFCreator, j'ai du m'y mettre spécialement pour cette tâche, c'est pas évident avec la pression du délai.

  17. #17
    Rédacteur/Modérateur
    Avatar de argyronet
    Homme Profil pro
    Panseur de bobos en solutions ETL
    Inscrit en
    Mai 2004
    Messages
    5 128
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Panseur de bobos en solutions ETL
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2004
    Messages : 5 128
    Points : 12 185
    Points
    12 185
    Billets dans le blog
    5
    Par défaut
    Humm, la portion de code qui concerne :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    KillProcess AcroRd32.exe
    Je ne l'ai pas vu.
    J'ai du mal à associer les éléments pour te répondre car soit tu n'as pas bien expliqué soit il manque des bouts de code.
    Qui fait quoi et quoi va où ?

    Argy

  18. #18
    Membre à l'essai
    Femme Profil pro
    Stagiaire
    Inscrit en
    Mai 2014
    Messages
    41
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Stagiaire
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Mai 2014
    Messages : 41
    Points : 23
    Points
    23
    Par défaut
    Hello,

    C'est vrai qu'à force de tourner le problème dans tous les sens j'ai testé des solutions, et que le code a un peu évolué.

    Dans le post #13 j'indiquais avoir tenté de tuer le processus Acrobat avec KillProcess AcroRd32.exe (placé entre les lignes 66/67 du code ci-dessous), suite aux conseils dispensés dans ce sujet : http://www.developpez.net/forums/d10...es-pdfcreator/. Le problème qui y est exposé s'avère être très exactement mon problème, mais il n'a pas été placé en [Résolu].
    Hélas, le pas à pas m'a montré que c'était inefficace, je l'ai donc supprimé.

    Du coup voici le code tel qu'il est maintenant :
    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
    'Byref/Byval non précisé = Byref : la variable est prise en compte et pas seulement sa valeur, si elle est modifiée ici elle le sera aussi aileurs
    Sub concatenerPDF(monTab, Path, NomAuto, ByVal Pagination As Boolean)
    '
    'Concatène plusieurs fichiers PDF
    '
    Const MAX_TIME As Long = 30    ' in seconds
    Const SLEEP_TIME As Long = 250    ' in milliseconds
     
    Dim strDefaultPrinter As String
    Dim oFSO As Scripting.FileSystemObject
     
    Dim T As Long
    Dim strTargetPath As String
    Dim strAppTitle As String
    Dim strPDFFileName As String
    Dim strTxtFileName As String
    Dim F, I, TotPage As Integer
    Dim monTexte As String
     
        'Gestion des erreurs
        On Error GoTo L_ErrConcatenerPDF
     
        Set oFSO = CreateObject("Scripting.FileSystemObject")
        'Définition du nom du projet
        strAppTitle = NomAuto
        strAppTitle = InputBox("Veuillez nommer le fichier :", "Nom", strAppTitle, 2)
        'Attribution du nom au fichier de sortie
        strPDFFileName = strAppTitle & ".pdf"
        'Définition de l'emplacement du fichier de sortie
        strTargetPath = Path & "\"
     
         'Ecrasement du PDF s'il existe déjà
        If Dir(strTargetPath & strPDFFileName) = strPDFFileName Then
            If MsgBox("Un fichier" & strTargetPath & strPDFFileName & " existe déjà." & Chr(10) & Chr(10) & "Ce dernier sera écrasé.") = vbOK Then
                Kill (strTargetPath & strPDFFileName)
            Else
                GoTo L_ExConcatenerPDF
            End If
        End If
     
        Set oPDFCreator = Nothing
        Do
            Set oPDFCreator = CreateObject("PDFCreator.clsPDFCreator")
        Loop Until Not oPDFCreator Is Nothing
     
        'Vérification de l'existence du logiciel
        With oPDFCreator
            If .cStart("/NoProcessingAtStartup") = False Then
                err.Raise 17, "No Processing At Startup", "Initialisation de PDFCreator impossible..." & vbCrLf & "Veuillez vous assurer que PDFCreator est correctement installé sur le poste notamment en tentant de créer un PDF vous-même depuis un document Word ou bien depuis un fichier Word vu de l'Explorateur."
            End If
            'Paramètrage du PDF
            DoEvents
            .cVisible = True
            .cPrinterStop = True
            .cOption("UseAutosave") = 1
            .cOption("UseAutosaveDirectory") = 1
            .cOption("AutosaveDirectory") = strTargetPath
            .cOption("AutosaveFilename") = strPDFFileName
            strDefaultPrinter = .cDefaultPrinter
            .cDefaultPrinter = "PDFCreator"
            .cClearCache
     
            'Envoi au logiciel des chemins des fichiers à concaténer
            For F = 0 To Taille
                .cPrintFile (monTab(F))
                Sleep 2000
            Next F
            Sleep 2000
     
            'Instruction de concaténation
            .cCombineAll
            'On attend que la liste d'attente soit vide
            T = 0
            Do While (.cCountOfPrintjobs <> 1) And (T < (MAX_TIME * 1000 / SLEEP_TIME))
                T = T + 1
                DoEvents
            Loop
            .cPrinterStop = False
        End With
     
        'Contrainte sur Access pour laisser la main à PDFCreator afin d'exécuter la commande
        T = 0
        m_lngReadyState = 0
        Do While (m_lngReadyState = 0) And (T < (MAX_TIME * 1000 / SLEEP_TIME))
            T = T + 1
            Sleep SLEEP_TIME
        Loop
     
        'Remise à jour des paramètres d'impression par défaut Windows
        With oPDFCreator
            .cDefaultPrinter = strDefaultPrinter
            Sleep 200
            .cClearCache
            .cClose
        End With
        'Si le paramètre Pagination renvoie True, on pagine le fichier créé
        If Pagination = True Then
            TotPage = GetPageNum(strTargetPath & strPDFFileName)
            monTexte = "AN - "
            Call paginerPDF(TotPage, monTexte, strTargetPath & strPDFFileName)
        End If
     
        On Error GoTo 0
     
    L_ExConcatenerPDF:
        'Libération des objets et fermeture de PDFCreator
        Set oPDFCreator = Nothing
        Shell "taskkill /f /im PDFCreator.exe"
        Exit Sub
     
    L_ErrConcatenerPDF:
        'Information utilisateur et reprise de la fonction sur l'étiquette L_ExConcatenerPDF
        MsgBox err.Description, 48, err.Source
        Resume L_ExConcatenerPDF
     
    End Sub
    Le problème est toujours le suivant (validé par le pas à pas) :
    A chaque tour de boucle, l'exécution de .cPrintFiles("C:\[...]\MonDoc.pdf") déclenche l'ouverture d'Adobe Reader ("AcroRd32.exe" dans le Gestionnaire des Tâches).
    Je suis obligée de fermer manuellement cette fenêtre "Adobe Reader" ouverte pour que la macro continue de tourner.
    C'est très génant car si je veux fusionner 100 fichiers PDF, il faudrait que je ferme à la main 100 fenêtres Adobe Reader.

    Cette ligne ne comprenant que 2 éléments, j'ai ai déduit que le problème pouvait avoir 2 sources :
    - la méthode .cPrintFiles()
    - le chemin "C:\[...]\MonDoc.pdf"

    J'ai développé la piste "le chemin est en cause" en essayant plusieurs choses (détaillées dans le post #16). Mais je n'ai pas l'impression que le dysfonctionnement vienne du format du chemin entré en paramètre de .cPrintFiles().

    Je ne sais pas si je suis plus claire... je l'espère. N'hésite pas à me demander plus de détails sur tel ou tel point.
    Merci encore.

  19. #19
    Expert éminent
    Avatar de LedZeppII
    Homme Profil pro
    Maintenance données produits
    Inscrit en
    Décembre 2005
    Messages
    4 485
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Maintenance données produits
    Secteur : Distribution

    Informations forums :
    Inscription : Décembre 2005
    Messages : 4 485
    Points : 7 768
    Points
    7 768
    Par défaut
    Bonjour Arr37,

    Je confirme que le problème vient de PDFCreator lorsqu'on utilise la méthode cPrintFile avec un fichier pdf.
    PDFCreator a l'air de se bloquer lui-même...

    Si on imprime les pdf en invoquant le verbe "print" associé à l'extension pdf, on n'a plus ce problème.
    C'est à dire en se passant de la méthode cPrintFile.
    On aura juste une instance d'Acrobat Reader qui restera ouverte à la fin.
    Ci-dessous ma procédure pour imprimer:
    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
    Public Sub PrintFileByVerb(sFullFileName As String)
    Dim oShell As Shell32.Shell, oFld As Shell32.Folder, oFldItem As Shell32.FolderItem
    Dim sPath As String, sFileName As String, p As Long
     
    p = InStrRev(sFullFileName, "\")
    If p = 0 Then p = InStrRev(sFullFileName, ":")
    If p > 0 Then
       sPath = Left(sFullFileName, p)
       If Right(sPath, 1) = "\" Then sPath = Left(sPath, Len(sPath) - 1)
       sFileName = Mid(sFullFileName, p + 1)
    Else
       Exit Sub
    End If
     
    On Error GoTo ErrH
    Set oShell = CreateObject("Shell.Application") 
    Set oFld = oShell.NameSpace(sPath)
    Set oFldItem = oFld.Items.Item(sFileName)
     
     
    oFldItem.InvokeVerb ("print")
     
    EndSub:
    Set oFldItem = Nothing
    Set oFld = Nothing
    Set oShell = Nothing
    Exit Sub
     
    ErrH:
    MsgBox Err.Description, , "Erreur No. '" & CStr(Err.Number) & "'"
    Resume EndSub
     
    End Sub
    A+

  20. #20
    Membre à l'essai
    Femme Profil pro
    Stagiaire
    Inscrit en
    Mai 2014
    Messages
    41
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Stagiaire
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Mai 2014
    Messages : 41
    Points : 23
    Points
    23
    Par défaut On touche au but !
    Bonjour, bonjour,

    Alors Nous avons donc 2 solutions à mon problème :

    - faire autrement qu'avec des *.pdf
    J'ai revu tout mon code pour que mon tableau ne prenne plus en compte les *.pdf mais leur *.docx source. Je rentre donc en paramètre de ma fonction un tableau rempli de chaînes de caractères se terminant par .docx... Et ça marche !

    Word s'ouvre à chaque fois, puis se ferme : ça ne bloque donc pas le déroulé du programme (contrairement au tableau de chaînes de caractères finissant par .pdf).
    PAR CONTRE, ça ne plait pas du tout à mon chef qui trouve le temps ouverture/fermeture de Word trop long : c'est vrai que redondé sur 100 fichiers la "perte" de temps commence à se faire sentir.

    - faire autrement qu'avec .cPrintFile
    J'ai remplacé les lignes 63 à 71 de mon code par :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
            'Envoi au logiciel des chemins des fichiers à concaténer
            For F = 0 To UBound(monTab)
                PrintFileByVerb (monTab(F))
                Sleep 2000
            Next F
            Sleep 2000
     
            'Instruction de concaténation
            .cCombineAll
    en reprennant directement la fonction de LedZeppII (Merci Merci Merci !!!).

    Mais là c'est assez bizarre :
    Aléatoirement PDFCreator "oublie" des fichiers lors de la concaténation...
    Pas de souci avec 3 fichiers, mais quand je teste avec 25 :
    Parfois il n'y a que le début, puis que le milieu, d'autres c'est des fichiers à droite à gauche qui manquent...
    Quelques fois même la fenêtre PDFCreator s'ouvre sur :
    Nom : PDF.PNG
Affichages : 2733
Taille : 53,2 Ko
    et il reste 17 fichiers dans la queue alors que l'instruction .cCombineAll est passée.

    Je ne vois pas trop d'où celà peut venir... Je ne lui laisse pas assez de temps pour exécuter ses tâches ?

    Merci de l'aide apportée.


    EDIT : j'ai crié victoire trop vite... la méthode avec les *.docx vient de me concaténer :
    1) le corps - monTab(0) - OK
    2) les annexes - monTab(1) à monTab(97) - NON OK : seul monTab(66) apparaît !!!!!
    3) le dos du rapport - monTab(98) - OK

    J'ai mis en pause la procédure juste avant le .cCombineAll > effectivement seuls ces 3 fichiers se trouvent dans la queue de PDFCreator...
    :/

    Je commence un peu à désespérer là...

Discussions similaires

  1. Fusionner plusieurs PDF en un seul sous vba excel
    Par Kutoh dans le forum Macros et VBA Excel
    Réponses: 0
    Dernier message: 23/08/2013, 18h09
  2. [XL-2003] Fusionner plusieurs PDF en un seul sous vba excel
    Par olivier45fr dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 06/03/2012, 15h51
  3. Réponses: 0
    Dernier message: 21/09/2011, 19h27
  4. Réponses: 3
    Dernier message: 16/12/2010, 10h49
  5. [VBA] Fusionner plusieurs colonnes en une seule
    Par brutos2 dans le forum Macros et VBA Excel
    Réponses: 8
    Dernier message: 18/01/2006, 15h25

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