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 :

Croisement de données Excel et fichiers pdf


Sujet :

Macros et VBA Excel

  1. #1
    Nouveau Candidat au Club
    Homme Profil pro
    Responsable de compte
    Inscrit en
    Mai 2018
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Responsable de compte
    Secteur : Transports

    Informations forums :
    Inscription : Mai 2018
    Messages : 5
    Points : 1
    Points
    1
    Par défaut Croisement de données Excel et fichiers pdf
    Bonjour à tous,

    Je cherche à faire un croisement de données entre un fichier excel et des fichiers pdf mais mes connaissances en VBA sont trop limitées pour arriver à mes fins malgré l'aide régulière que m'apporte la lecture de ce forum.
    Je sollicite donc votre aide svp.

    Voici mon projet.

    J'ai d'un côté un fichier Excel dont les colonnes sont comme ci-dessous :

    A : un numéro EAN produit
    B : un numéro de facture
    C : un numéro de transport
    D : les quantités
    E : la valeur unitaire
    F : la valeur totale. (valeur unitaire x qté)

    Chaque lignes correspond à un article il peut y en avoir jusque 10 000 environ.

    J'ai un répertoire qui contient tous les fichiers pdf des factures indiquées en colonne B (chaque pdf est nommé avec le numéro de facture de la colonne B)
    J'ai aussi un répertoire qui contient tous les fichiers pdf des bordereaux de transport dont le numéro est en colonne C (chaque pdf est nommé avec le numéro de transport de le colonne C)
    Il peut y avoir près de 40 000 fichiers dans chacun de ces répertoires.

    Voici ce que je cherche à faire :

    - Vérifier pour chaque ligne que le fichier pdf facture est bien présent dans le répertoire correspondant.
    - Vérifier pour chaque ligne que le fichier pdf transport est bien présent dans le répertoire correspondant.

    - Vérifier pour chaque ligne que le numéro EAN apparait bien sur le pdf facture correspondant (indiqué en colonne B).
    Si oui, créer un lien hypertexte en colonne G pointant sur la bonne page de cette facture pdf et créer un lien hypertexte en colonne H pointant vers la bonne page du pdf du bordeaux de transport indiqué en colonne C
    Si non, créer un listing de tous les EAN introuvables dans le pdf facture indiqué en colonne B

    Voila.
    J'espère avoir été clair dans mes explications et vous remercie par avance de votre aide !

    Cdlt.
    Stéphane.

  2. #2
    Expert éminent sénior
    Avatar de kiki29
    Homme Profil pro
    ex Observeur CGG / Analyste prog.
    Inscrit en
    Juin 2006
    Messages
    6 132
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : ex Observeur CGG / Analyste prog.

    Informations forums :
    Inscription : Juin 2006
    Messages : 6 132
    Points : 11 274
    Points
    11 274
    Par défaut
    Salut, pour lister les fichiers pdf il y a ceci : Liste des fichiers d'un dossier
    à toi de l'adapter à ton contexte.

  3. #3
    Membre chevronné
    Inscrit en
    Septembre 2007
    Messages
    1 132
    Détails du profil
    Informations forums :
    Inscription : Septembre 2007
    Messages : 1 132
    Points : 1 803
    Points
    1 803
    Par défaut
    Bonjour à tous,

    Un petit canevas à adapter :
    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
    Public Sub Contrôle()
    Const ch_f = "C:\facture"  ' chemin du répertoire facture
    Const ch_t = "C:\transport"  ' chemin du répertoire transport
    Dim cel As Range, der As Long, fic As String
        der = ActiveSheet.Cells(Rows.Count, "A").End(xlUp).Row
        For Each cel In ActiveSheet.Range("A2:A" & der).Cells
            fic = ch_f & "\" & cel.Offset(0, 1) & ".pdf"    ' facture
            If Dir(fic) <> "" Then
                ActiveSheet.Hyperlinks.Add Anchor:=cel.Offset(0, 6), _
                Address:=fic, TextToDisplay:="voir_facture"
            Else
                With Sheets("erreurs")
                    der = .Cells(Rows.Count, "A").End(xlUp).Row + 1
                    .Cells(der, 1).Value = cel.Value
                    .Cells(der, 2).Value = "facture absente"
                End With
            End If
            ' idem transport
            fic = ch_t & "\" & cel.Offset(0, 2) & ".pdf"
            If Dir(fic) <> "" Then
                ActiveSheet.Hyperlinks.Add Anchor:=cel.Offset(0, 7), _
                Address:=fic, TextToDisplay:="voir_transport"
            Else
                With Sheets("erreurs")
                     der = .Cells(Rows.Count, "A").End(xlUp).Row + 1
                    .Cells(der, 1).Value = cel.Value
                    .Cells(der, 2).Value = "transport absent"
                End With
            End If
        Next cel
        Sheets("erreurs").ExportAsFixedFormat Type:=xlTypePDF, Filename:= _
            "C:\erreurs.pdf", Quality:=xlQualityStandard, IncludeDocProperties:=True _
            , IgnorePrintAreas:=False, OpenAfterPublish:=False
    End Sub

  4. #4
    Nouveau Candidat au Club
    Homme Profil pro
    Responsable de compte
    Inscrit en
    Mai 2018
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Responsable de compte
    Secteur : Transports

    Informations forums :
    Inscription : Mai 2018
    Messages : 5
    Points : 1
    Points
    1
    Par défaut
    Bonjour et un grand merci à tous !
    Je vais analyser tout cela et me permettrais de revenir vers vous si problème.

    Merci encore et bonne soirée !

  5. #5
    Expert éminent sénior
    Avatar de kiki29
    Homme Profil pro
    ex Observeur CGG / Analyste prog.
    Inscrit en
    Juin 2006
    Messages
    6 132
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : ex Observeur CGG / Analyste prog.

    Informations forums :
    Inscription : Juin 2006
    Messages : 6 132
    Points : 11 274
    Points
    11 274

  6. #6
    Nouveau Candidat au Club
    Homme Profil pro
    Responsable de compte
    Inscrit en
    Mai 2018
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Responsable de compte
    Secteur : Transports

    Informations forums :
    Inscription : Mai 2018
    Messages : 5
    Points : 1
    Points
    1
    Par défaut
    Re bonjour à tous,

    Le code de anasecu m'a bien aidé et j'ai pu l'adapté à mes besoins ! un grand merci !

    J'essai maintenant de tester la présence des numéros EAN dans chacun des fichiers pdf "facture" pour en ressortir une liste d'anomalie au cas ou le code EAN d'une ligne ne soit pas présent dans le fichier facture correspondant.

    J'ai pu trouver le code de kiki29 pour essayer de l'adapter : https://www.developpez.net/forums/d4...r/#post5920178

    Mais je ne dispose pas de d'Acrobat. Je n'ai que le reader ou pdfviewer ou encore internet explorer s'il y a moyen de le faire à travers un navigateur...

    Pourriez vous m'aider sur ce point svp ?

    Merci et bonne soirée !

  7. #7
    Expert éminent sénior
    Avatar de kiki29
    Homme Profil pro
    ex Observeur CGG / Analyste prog.
    Inscrit en
    Juin 2006
    Messages
    6 132
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : ex Observeur CGG / Analyste prog.

    Informations forums :
    Inscription : Juin 2006
    Messages : 6 132
    Points : 11 274
    Points
    11 274
    Par défaut
    Salut,
    Mais je ne dispose pas de d'Acrobat. Je n'ai que le reader ou pdfviewer ou encore internet explorer s'il y a moyen de le faire à travers un navigateur..
    Hors Acrobat point de salut

    A voir et adapter si besoin à ton contexte.
    En relation avec ce post



    Je te conseille XPDF ( gratuit ) nettement plus véloce qu'Acrobat ou son Reader et cette liste pour naviguer dans le bazar.
    L'extraction finale des infos utiles reste à la charge de l'utilisateur et ce n'est pas une sinécure.

  8. #8
    Nouveau Candidat au Club
    Homme Profil pro
    Responsable de compte
    Inscrit en
    Mai 2018
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Responsable de compte
    Secteur : Transports

    Informations forums :
    Inscription : Mai 2018
    Messages : 5
    Points : 1
    Points
    1
    Par défaut
    Bonjour à tous,

    Je bloque bêtement sur l'ouverture d'internet explorer. (voir paragraphe "controle présence EAN")
    J'ai une erreur automation / erreur non spécifiée sur la ligne IE.Navigate fic

    J'ai essayer avec create object aussi sans succes.
    J'ai activé les références Microsoft Internet Control donc ca devrait marché.

    En fait je veux afficher un pdf dans internet explorer, rechercher un mot et faire un copier/coller de ce mot dans une cellule.
    Le code de kiki29 pour rechercher un mot via internet explorer (que je cite plus haut) marchait bien quand je le faisais fonctionner via un bouton de contrôle de formulaire mais là je suis dans un bouton contrôle active x.
    Est - ce la source du problème svp ?

    Merci de votre aide !





    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
     
    Option Explicit
     
    Private Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long)
    Private Sub CommandButton1_Click()
     
    Const ch_f = "C:\facture"  ' chemin du répertoire facture
    Const ch_t = "C:\transport"  ' chemin du répertoire transport
    Dim cel As Range, der As Long, fic As String
    Dim IE As New InternetExplorer
     
     
     
     
        der = ActiveSheet.Cells(Rows.Count, "C").End(xlUp).Row
        For Each cel In ActiveSheet.Range("C23:C" & der).Cells
            fic = ch_f & "\" & cel.Offset(0, 0) & ".pdf"    ' facture
            If Dir(fic) <> "" Then
                ActiveSheet.Hyperlinks.Add Anchor:=cel.Offset(0, 7), _
                Address:=fic, TextToDisplay:="voir_facture_export"
     
                'controle présence EAN
                IE.navigate fic
                IE.Visible = True
                Do Until IE.ReadyState = 4
                DoEvents
                Loop
                Sleep 500
                SendKeys "^f", True
                Sleep 250
                SendKeys cel.Value, True
                Sleep 100
                SendKeys "{ENTER}"
                Sleep 250
                SendKeys "^c", True
                ActiveSheet.Range("L" & der).Select
                SendKeys "^v"
                Set IE = Nothing
                IE.Quit
     
            Else
                With Sheets("Feuil2")
                    der = .Cells(Rows.Count, "A").End(xlUp).Row + 1
                    .Cells(der, 1).Value = cel.Value
                    .Cells(der, 2).Value = "facture absente"
                End With
            End If
            ' idem transport
            fic = ch_t & "\" & cel.Offset(0, 6) & ".pdf"
            If Dir(fic) <> "" Then
                ActiveSheet.Hyperlinks.Add Anchor:=cel.Offset(0, 8), _
                Address:=fic, TextToDisplay:="Voir_justif_DHL"
            Else
                With Sheets("Feuil2")
                     der = .Cells(Rows.Count, "A").End(xlUp).Row + 1
                    .Cells(der, 1).Value = cel.Value
                    .Cells(der, 2).Value = "DHL absent"
                End With
            End If
        Next cel
     
     
     
    End Sub

  9. #9
    Nouveau Candidat au Club
    Homme Profil pro
    Responsable de compte
    Inscrit en
    Mai 2018
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Responsable de compte
    Secteur : Transports

    Informations forums :
    Inscription : Mai 2018
    Messages : 5
    Points : 1
    Points
    1
    Par défaut Problème avec GetText - temporisation trop longue !
    Bonjour à tous,

    J'ai pu trouver la solution au sujet de l'ouverture d'Internet Explorer.
    Il suffisait de rajouté "Medium" derrière la déclaration ...

    Maintenant mon programme s’exécute correctement mais il est très long du fait que je doive temporiser 10 secondes sur le GetText.
    Et j'ai plus de 5000 lignes à traiter par fichier ce qui signifie quelque 20h de traitement en tout.

    Auriez vous une solution pour réduire le temps d'attente sur le GetText svp car je ne comprends pas pourquoi il faille attendre autant de temps pour récupérer des chiffres du presse papier ?

    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
    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
     
     
     
    Private Sub CommandButton1_Click()
     
     
    Dim N_Article As String
    Dim MyData As DataObject
    Set MyData = New DataObject
    MyData.GetFromClipboard
     
    Const ch_f = "C:\sage\facture"  ' chemin du répertoire facture
    Const ch_t = "C:\sage\transport"  ' chemin du répertoire transport
    Dim cel As Range, der As Long, fic As String
    Dim IE As New InternetExplorerMedium
     
     
        der = ActiveSheet.Cells(Rows.Count, "C").End(xlUp).Row
        For Each cel In ActiveSheet.Range("C23:C" & der).Cells
            fic = ch_f & "\" & cel.Offset(0, 0) & ".pdf"    ' facture
            If Dir(fic) <> "" Then
                ActiveSheet.Hyperlinks.Add Anchor:=cel.Offset(0, 7), _
                Address:=fic, TextToDisplay:="voir_facture_export"
     
     
     
                'Vider le Presspapier
     
                [Z20:Z20].CurrentRegion.Find("").Copy
     
     
                'controle présence EAN
     
                Sleep 1000
                IE.navigate fic
                Sleep 1000
                IE.Visible = True
                Do While Not IE.readyState = READYSTATE_COMPLETE
                DoEvents
                Loop
                'AppActivate "Internet Explorer"
                Sleep 750
                SendKeys "^f", True
                Sleep 750
                SendKeys cel.Offset(0, 3).Value, True
                Sleep 250
                SendKeys "{ENTER}", True
                Sleep 250
                SendKeys "{ENTER}", True
                Sleep 250
                SendKeys "{DEL}", True
                Sleep 250
                SendKeys "{ESC}", True
                Sleep 250
                SendKeys "^c", True
                Sleep 250
     
                cel.Offset(0, 9).Select
     
                Sleep 10000
     
                N_Article = MyData.GetText(1)
     
                cel.Offset(0, 9).Value = N_Article
     
            Else
                With Sheets("Feuil2")
                    der = .Cells(Rows.Count, "A").End(xlUp).Row + 1
                    .Cells(der, 1).Value = cel.Value
                    .Cells(der, 2).Value = "facture absente"
                End With
            End If
     
        Next cel
     
     
     
    End Sub

    Merci beaucoup par avance !

    Stéphane

  10. #10
    Expert éminent sénior
    Avatar de kiki29
    Homme Profil pro
    ex Observeur CGG / Analyste prog.
    Inscrit en
    Juin 2006
    Messages
    6 132
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : ex Observeur CGG / Analyste prog.

    Informations forums :
    Inscription : Juin 2006
    Messages : 6 132
    Points : 11 274
    Points
    11 274
    Par défaut
    Salut, pour en finir avec les tracasseries des SendKeys ( timing, langues etc )
    XPDF Extraction du Texte d'une liste de PDF ( P-Papier )(2)
    La seule chose à préserver est le lien entre pdftotext.exe et l'appli. Dans module mPDF dans la procédure PDF2Clipboard via sChemin = ThisWorkbook.Path & "\" & "pdftotext.exe"
    qui est donc modifiable à souhait. pdftotext.exe est fourni dans le fichier 7z. A lire

    Il te restera à faire la recherche dans la feuille excel des infos utiles.

Discussions similaires

  1. [FPDI] Incorporéer des données dans un fichier PDF existant
    Par jalalnet dans le forum Bibliothèques et frameworks
    Réponses: 1
    Dernier message: 14/11/2010, 19h57
  2. Importer des données d'un fichier PDF dans une feuille Excel
    Par pourinfo dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 21/03/2010, 14h58
  3. Réponses: 12
    Dernier message: 19/03/2010, 18h33
  4. [XL-97] Comment récupérer les données d'un fichier PDF pour renseigner un tableau Excel
    Par jehhej dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 24/02/2010, 09h04
  5. Réponses: 35
    Dernier message: 29/05/2006, 08h15

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