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 :

Code VBA reussi qui enregistre les piece jointes de la boite de reception sous un dossier dans le disque dur.


Sujet :

Macros et VBA Excel

  1. #1
    Nouveau membre du Club
    Homme Profil pro
    Etudiant
    Inscrit en
    Janvier 2012
    Messages
    118
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Etudiant

    Informations forums :
    Inscription : Janvier 2012
    Messages : 118
    Points : 35
    Points
    35
    Par défaut Code VBA reussi qui enregistre les piece jointes de la boite de reception sous un dossier dans le disque dur.
    Bonjour a tous!

    J'ai créer (avec l'aide d'internet ) un programme VBA et quand je fais contrôle G (pour aller dans la commande d’exécution) puis que je tape le chemin par exemple

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SaveAttachments "Z:\Risques et documentation OPCVM\Rapprochement Front Back\Confirmation Trades\Essai", True

    mon programme m'enregistre toute mes pièces jointes sous ce fichier "Essai"

    Le problème c'est que j'aimerais bien donné un nom à ces pièces jointes tiré des informations de la pièce jointe.

    -Pour les pièces jointes format Excel je pense que c'est assez simple bien que je ne vois pas simplifier le code. Il suffirait de mettre du code qui ressemble à ça dans certains endroits (plus facile à dire qu'a faire ):
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    NomFichier = .Range("O7") & "_" & .Range("O8") & "_" & .Range("O12") & "_" & .Range("O14")
    -et pour les pièces jointes PDF ou Word j'aurais aimé savoir si on peut grâce à un code VBA les faire s'enregistrer sous un nom tiré du PDF ou du Word???


    Je dépose tout mon code ci dessous! Il est bien documenté et tout ne sera pas utile !

    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
    199
    200
    201
    202
    203
    204
    205
    206
    207
    208
    209
    210
    211
    212
    213
    214
    215
    216
    217
    218
    219
    220
    221
    222
    223
    224
    225
    226
    ' ---
    ' AJOUT D'UN \ EN FIN DE CHEMIN
    ' ---
    ' Entrée : strFolder <- Chemin à retraiter.
    ' Sortie : Chemin avec \ ajouté à la fin si nécessaire.
    '
    Function AddBackslash( _
      ByVal strFolder As String) As String
     
      strFolder = Trim(strFolder)
      If Right(strFolder, 1) <> "\" Then strFolder = strFolder & "\"
      AddBackslash = strFolder
    End Function
     
        ' ---
        ' INSERTION DE VALEURS DANS UNE CHAINE DE CARACTERES
        ' ---
        '
        Function StringFormat( _
          ByVal strChaine As String, _
          ParamArray varValeurs() As Variant) As String
     
          Dim intI As Integer
          For intI = LBound(varValeurs) To UBound(varValeurs)
            strChaine = Replace(strChaine, "{" & intI & "}", (varValeurs(intI)))
          Next
     
          StringFormat = strChaine
        End Function
     
     
     
    ' ---
    ' INCREMENTATION BASIQUE D'UN NOM DE FICHIER
    ' ---
    ' Entrée : Chemin complet
    '          Ex. : C:\un\chemin\quelconque\test.jpg
    ' Sortie : Chemin incrémenté, si un fichier existe déjà à cet emplacement.
    '          Ex. : C:\un\chemin\quelconque\test-00001.jpg
    Function FilenameInc(ByVal strFile As String) As String
      Dim strFileTemp As String
      Dim intI As Integer
     
      ' Si le fichier n'existe pas, on conserve son
      ' nom d'origine
      If Dir(strFile) = "" Then
        FilenameInc = strFile
        Exit Function
      End If
     
      ' Créer un nouveau nom de fichier numéroté,
      ' en vérifiant qu'il n'existe pas déjà
      intI = 1
      strFileTemp = strFile
      While Dir(strFileTemp) <> ""
        strFileTemp = StringFormat("{0}{1}-{2}.{3}", _
          FilePath(strFile), _
          FilenameWithoutExt(strFile), _
          Format(intI, "00000"), _
          FileExt(strFile))
        intI = intI + 1
      Wend
     
      ' Valeur de retour
      FilenameInc = strFileTemp
    End Function
     
    ' ---
    ' EXTRACTION D'UN NOM DE FICHIER SANS SON EXTENSION
    ' ---
    ' Entrée : strPath : Chemin d'un fichier
    '                    Ex. : test.jpg
    '                          C:\un\chemin\quelconque\test.jpg
    ' Sortie : Nom du fichier sans son extension (ex. : test).
    '
    Function FilenameWithoutExt( _
      ByVal strPath As String)
     
      Dim intI As Integer
     
      ' Extraire uniquement le nom de fichier
      ' (au cas où on aurait transmis un chemin complet)
      strPath = Filename(strPath)
     
      intI = InStrRev(strPath, ".", -1, vbTextCompare)
      If intI = 0 Then
        FilenameWithoutExt = strPath
      Else
        FilenameWithoutExt = Left(strPath, intI - 1)
      End If
    End Function
     
    ' ---
    ' EXTRACTION D'UN NOM DE FICHIER AVEC SON EXTENSION
    ' ---
    ' Entrée : strPath : Chemin d'un fichier
    '                    Ex. : test.jpg
    '                          C:\un\chemin\quelconque\test.jpg
    ' Sortie : Nom du fichier avec son extension (ex. : test.jpg).
    '
    Function Filename(ByVal strPath As String) As String
      ' Trouver le dernier backslash, s'il y en a un...
      Dim intI As Integer
      intI = InStrRev(strPath, "\", -1, vbTextCompare)
     
      ' Renvoyer la partie après le backslash
      Filename = IIf(intI = 0, strPath, Mid(strPath, intI + 1))
    End Function
     
    ' ---
    ' EXTRACTION DE L'EXTENSION D'UN FICHIER
    ' ---
    ' Entrée : strPath : Chemin d'un fichier
    '                    Ex. : test.jpg
    '                          C:\un\chemin\quelconque\test.jpg
    ' Sortie : Extension du fichier (ex. : jpg).
    '
    Function FileExt(ByVal strPath As String) As String
      ' Ne conserver que le nom de fichier
      strPath = Filename(strPath)
     
      ' Trouver le dernier point
      Dim intI As Integer
      intI = InStrRev(strPath, ".", -1, vbTextCompare)
      FileExt = IIf(intI = 0, "", Mid(strPath, intI + 1))
    End Function
     
    ' ---
    ' EXTRACTION D'UN CHEMIN
    ' ---
    ' Entrée : strPath : Chemin d'un fichier
    '                    Ex. : test.jpg
    '                          C:\un\chemin\quelconque\test.jpg
    ' Sortie : Chemin du fichier (ex. : C:\un\chemin\quelconque\).
    '
    Function FilePath(ByVal strPath As String) As String
      ' Trouver le dernier \
      Dim intI As Integer
      intI = InStrRev(strPath, "\", -1, vbTextCompare)
     
      ' Valeur de retour
      FilePath = IIf(intI = 0, strPath, Left(strPath, intI))
    End Function
     
     
     
    ' ---
    ' EXTRACTION DE PIECES JOINTES OUTLOOK
    ' ---
    '
    Sub SaveAttachments( _
      ByVal strTargetFolder As String, _
      Optional ByVal blnIncludeSubFolders As Boolean = False)
     
      ' Quelques variables...
      Dim olApp As Outlook.Application
      Dim ns As Outlook.Namespace
      Dim fld As Outlook.MAPIFolder
     
      ' Vérifier si le dossier de destination existe bien
      If Dir(strTargetFolder, vbDirectory) = "" Then
        MsgBox "Le dossier destination n'existe pas !", vbExclamation
        Exit Sub
      End If
      strTargetFolder = AddBackslash(strTargetFolder)
     
      ' Démarrer Outlook
      Set olApp = New Outlook.Application
     
      ' Pointer sur la boîte de réception
      Set ns = olApp.GetNamespace("MAPI")
      Set fld = ns.GetDefaultFolder(olFolderInbox)
     
      ' Extraire tous les messages du dossier
      SaveFolderAttachments fld, strTargetFolder, blnIncludeSubFolders
     
      Set fld = Nothing
      Set ns = Nothing
      olApp.Quit
      Set olApp = Nothing
    End Sub
     
    ' ---
    ' EXTRACTION DES PIECES JOINTES D'UN DOSSIER
    ' ---
    '
    Sub SaveFolderAttachments( _
      fld As Outlook.MAPIFolder, _
      strTargetFolder As String, _
      Optional ByVal blnIncludeSubFolders As Boolean = False)
     
      Dim mi As Outlook.MailItem
      Dim att As Outlook.Attachment
      Dim strFile As String
     
      ' Debug
      Debug.Print "---"
      Debug.Print "DOSSIER : " & fld.Name
      Debug.Print "---"
     
      ' Parcourir tous les messages
      For Each mi In fld.Items
        If mi.Attachments.Count > 0 Then
          ' Pour info...
          Debug.Print mi.Subject
     
          For Each att In mi.Attachments
            strFile = FilenameInc(strTargetFolder & att.Filename)
     
            ' Sauvegarder la pièce jointe sous son nom original
            ' ou avec un nom incrémenté en cas de doublons
            att.SaveAsFile strFile
            Debug.Print "  -> " & strFile
          Next
        End If
      Next
     
      ' Si nécessaire, effectuer le même traitement
      ' sur les sous-dossiers
      If blnIncludeSubFolders Then
        Dim subfld As Outlook.MAPIFolder
        For Each subfld In fld.Folders
          SaveFolderAttachments subfld, strTargetFolder, blnIncludeSubFolders
        Next
      End If
    End Sub
    Si quelqu'un à le courage de comprendre

    Merci bcp

  2. #2
    Rédacteur/Modérateur

    Avatar de Jean-Philippe André
    Homme Profil pro
    Développeur VBA/C#/VB.Net/Power Platform
    Inscrit en
    Juillet 2007
    Messages
    14 595
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : Canada

    Informations professionnelles :
    Activité : Développeur VBA/C#/VB.Net/Power Platform
    Secteur : Finance

    Informations forums :
    Inscription : Juillet 2007
    Messages : 14 595
    Points : 34 274
    Points
    34 274
    Par défaut
    salut,

    beaucoup de lignes de code, on a connu plus expéditif

    l'enregistrement de ta PJ se fait dans la ligne
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
            ' Sauvegarder la pièce jointe sous son nom original
            ' ou avec un nom incrémenté en cas de doublons
            att.SaveAsFile strFile
            Debug.Print "  -> " & strFile
    à toi de modifier le strFile en amont pour lui attribuer la valeur qui te convient.
    Cycle de vie d'un bon programme :
    1/ ça fonctionne 2/ ça s'optimise 3/ ça se refactorise

    Pas de question technique par MP, je ne réponds pas

    Mes ouvrages :
    Apprendre à programmer avec Access 2016, Access 2019 et 2021

    Apprendre à programmer avec VBA Excel
    Prise en main de Dynamics 365 Business Central

    Pensez à consulter la FAQ Excel et la FAQ Access

    Derniers tutos
    Excel et les paramètres régionaux
    Les fichiers Excel binaires : xlsb,

    Autres tutos

  3. #3
    Nouveau membre du Club
    Homme Profil pro
    Etudiant
    Inscrit en
    Janvier 2012
    Messages
    118
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Etudiant

    Informations forums :
    Inscription : Janvier 2012
    Messages : 118
    Points : 35
    Points
    35
    Par défaut
    Merci,

    Mais j'avais vu que c'était le strFile qui donnait le nom à la piece jointes. Le probleme c'est que si je modifie le strFile comme ça pour les fichier excel:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    StrFile = .Range("O7") & "_" & .Range("O8") & "_" & .Range("O12") & "_" & .Range("O14")
    c'est assez facile MAIS lorque les pieces jointes sont des Word ou des PDF comment je fais?? Comment récupérer des informations d'un Word ou d'un PDF pour modifier le titre de la piece jointe?

    Thank u

  4. #4
    Rédacteur/Modérateur

    Avatar de Jean-Philippe André
    Homme Profil pro
    Développeur VBA/C#/VB.Net/Power Platform
    Inscrit en
    Juillet 2007
    Messages
    14 595
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : Canada

    Informations professionnelles :
    Activité : Développeur VBA/C#/VB.Net/Power Platform
    Secteur : Finance

    Informations forums :
    Inscription : Juillet 2007
    Messages : 14 595
    Points : 34 274
    Points
    34 274
    Par défaut
    hum, je pensais que les noms de fichiers etaient listés en avance dans ton fichier excel.

    Là, quel est la règle pour tes fichiers PDF ou word ? à quel niveau se situe l'information que tu chercherais ?
    Cycle de vie d'un bon programme :
    1/ ça fonctionne 2/ ça s'optimise 3/ ça se refactorise

    Pas de question technique par MP, je ne réponds pas

    Mes ouvrages :
    Apprendre à programmer avec Access 2016, Access 2019 et 2021

    Apprendre à programmer avec VBA Excel
    Prise en main de Dynamics 365 Business Central

    Pensez à consulter la FAQ Excel et la FAQ Access

    Derniers tutos
    Excel et les paramètres régionaux
    Les fichiers Excel binaires : xlsb,

    Autres tutos

  5. #5
    Nouveau membre du Club
    Homme Profil pro
    Etudiant
    Inscrit en
    Janvier 2012
    Messages
    118
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Etudiant

    Informations forums :
    Inscription : Janvier 2012
    Messages : 118
    Points : 35
    Points
    35
    Par défaut
    Re,

    En fait non le code enregistre sur le disque dur toutes les pièces jointes de ma boite de réception (et des sous dossiers).

    J'aimerais que mes pieces jointes s'enregistrent sous un nom tiré de la piece jointe.

    -Par exemple que toute les pieces jointes excel s'enregistre sous le titre
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    StrFile = .Range("O7") & "_" & .Range("O8") & "_" & .Range("O12") & "_" & .Range("O14")
    Mais pour les Word et les PDF je ne sais pas comment proceder!

    La regle pour mes sous dossiers est une adresse mail.

    Par exemple sous l'adresse mail toto@toto.fr j'ai des PDF qui arrivent en PJ (toujours sous le même format)
    Sous l'adresse titi@titi.fr j'ai des Word qui arrivent en PJ (toujours sous le même format)
    Sous l'adresse tete@tete.fr j'ai des excel qui arrivent en PJ (toujours sous le même format)


    J'espere avoir répondu a la question

  6. #6
    Rédacteur/Modérateur

    Avatar de Jean-Philippe André
    Homme Profil pro
    Développeur VBA/C#/VB.Net/Power Platform
    Inscrit en
    Juillet 2007
    Messages
    14 595
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : Canada

    Informations professionnelles :
    Activité : Développeur VBA/C#/VB.Net/Power Platform
    Secteur : Finance

    Informations forums :
    Inscription : Juillet 2007
    Messages : 14 595
    Points : 34 274
    Points
    34 274
    Par défaut
    Pas exactement, ce n'est pas tant le répertoire qui pose problème, c'est la nomenclature pour le nom du fichier

    Ce nom est-il contenu dans le fichier pdf ou word ? Si oui à quel endroit précisément ?
    Cycle de vie d'un bon programme :
    1/ ça fonctionne 2/ ça s'optimise 3/ ça se refactorise

    Pas de question technique par MP, je ne réponds pas

    Mes ouvrages :
    Apprendre à programmer avec Access 2016, Access 2019 et 2021

    Apprendre à programmer avec VBA Excel
    Prise en main de Dynamics 365 Business Central

    Pensez à consulter la FAQ Excel et la FAQ Access

    Derniers tutos
    Excel et les paramètres régionaux
    Les fichiers Excel binaires : xlsb,

    Autres tutos

  7. #7
    Nouveau membre du Club
    Homme Profil pro
    Etudiant
    Inscrit en
    Janvier 2012
    Messages
    118
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Etudiant

    Informations forums :
    Inscription : Janvier 2012
    Messages : 118
    Points : 35
    Points
    35
    Par défaut
    Oui le nom que je veux donner aux pièces jointes, qui sont sous fomats PDF, Word ou excel (mais excel ne pose pas de pb ...ou moins )sont tirées du document PDF, Word ou excel.

    Par exemple les pièces jointes des mails sont toujours envoyées avec un format standard pdf, word ou excel et je veux "chopper" sur ce PDF (prenons l'exemple du PDF) :

    Le nom de la société qui est en haut a droite info1


    L'ordre de bourse effectuer si c'est un achat ou une vente (qui est écrit au milieu du pdf) info2

    La date de passation d'odre(qui est aussi au milieu du pdf aussi) info3

    Le fond pour laquelle cette action est acheté qui est tout au début a droite du PDF info 4

    AINSI LE TITRE du document aura cette forme

    info1_info2_info3_info4

    J'espere que j'ai répondu a la question. C'est faisable en VBA?

  8. #8
    Inactif  

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

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

    Informations forums :
    Inscription : Avril 2009
    Messages : 15 379
    Points : 12 075
    Points
    12 075
    Billets dans le blog
    8
    Par défaut heu
    bonjours

    essaie un select case pour le strfiles

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    select case right (strfile.name,3)' l'extention du fichier
     
    case "pdf"
    ton choix ici
    case "xls"
     
     
    case "doc"
    'ect.....
    end select
    maintenant pour récupérer un nom ou une donnée dans un pdf tu a ca dans la faq
    pour exel tu a
    pour doc je suppose que ca pas etre loin de la methode d'excel


    au plaisir
    mes fichiers dans les contributions:
    mail avec CDO en vba et mail avec CDO en vbs dans un HTA
    survol des bouton dans userform
    prendre un cliché d'un range

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

  9. #9
    Rédacteur/Modérateur

    Avatar de Jean-Philippe André
    Homme Profil pro
    Développeur VBA/C#/VB.Net/Power Platform
    Inscrit en
    Juillet 2007
    Messages
    14 595
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : Canada

    Informations professionnelles :
    Activité : Développeur VBA/C#/VB.Net/Power Platform
    Secteur : Finance

    Informations forums :
    Inscription : Juillet 2007
    Messages : 14 595
    Points : 34 274
    Points
    34 274
    Par défaut
    C'est complexe à mettre en place.

    Que donne ton PDF si tu l'enregistres au format txt ?
    Cycle de vie d'un bon programme :
    1/ ça fonctionne 2/ ça s'optimise 3/ ça se refactorise

    Pas de question technique par MP, je ne réponds pas

    Mes ouvrages :
    Apprendre à programmer avec Access 2016, Access 2019 et 2021

    Apprendre à programmer avec VBA Excel
    Prise en main de Dynamics 365 Business Central

    Pensez à consulter la FAQ Excel et la FAQ Access

    Derniers tutos
    Excel et les paramètres régionaux
    Les fichiers Excel binaires : xlsb,

    Autres tutos

  10. #10
    Nouveau membre du Club
    Homme Profil pro
    Etudiant
    Inscrit en
    Janvier 2012
    Messages
    118
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Etudiant

    Informations forums :
    Inscription : Janvier 2012
    Messages : 118
    Points : 35
    Points
    35
    Par défaut
    Quand le modérateur me dis que c'est assez complexe je flip un peu !!

    Alors voici mon PDF en format txt. Mais pk ça m'aiderait???

    Goldman Sachs International (GSI)

    Peterborough Court | 133 Fleet Street | London EC4A 2BB | England
    Tel: +44 (20) 7774-1000
    BIC: GSILGB2X

    GSI is authorised and regulated by the Financial Services Authority
    and is a member of the London Stock Exchange.

    Trade Confirmation -Original


    To: XXXX Confirmation Ref: 20120454011704:1
    REF: FCP MOMENTUM


    Account:

    You have Bought on Principal terms

    Trade Date APR 23 2012
    Settlement Date APR 26 2012

    Security Name BIGBEN INTERACTIVE EUR2
    ISIN: FR0000074072 Sedol: 5800034 Ticker: BIG Sicovam: 007407

    Quantity 500
    Gross Price EUR 6.95
    Gross Consideration EUR 3,475.00

    Expenses:
    Transaction Charges EUR 0
    Commission EUR 2.43

    Total Expenses EUR 2.43
    Net Consideration EUR 3,477.43 Net Price EUR 6.954865

    We will Deliver Versus Payment at Place of Settlement: Euroclear France (Ex Sicovam) (BIC: SICVFRPP)

    From: GOLDMAN SACHS To: CLIENT
    /EGSP/00030
    GSILGB2X
    46450U
    DISFFRPP
    FETALULLISV

  11. #11
    Nouveau membre du Club
    Homme Profil pro
    Etudiant
    Inscrit en
    Janvier 2012
    Messages
    118
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Etudiant

    Informations forums :
    Inscription : Janvier 2012
    Messages : 118
    Points : 35
    Points
    35
    Par défaut
    Merci patricktoulon

    Peut tu me passer le lien pour récupérer un nom ou une donnée dans un pdf dans la faq STP je ne le trouve pas?


    Merci

    Bonjour je vais essayer d'aller pas a pas je garde l'idée de patricktoulon pour ce qui est du

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    select case right (strfile.name,3)
     
    case "pdf"
    case "xls"
    case "doc"
     
    end select
    Mais il me semble que j'ai un problème sur le renommage des fichiers excel

    j'essaye de modifier en amont strFile por qu'il devienne egal a cette valeur .
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Range("C22") & "_" & .Range("C20") & "_" & .Range("B8")
    J'ai dans ma macro a un moment :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    ' Si le fichier n'existe pas, on conserve son
      ' nom d'origine
      If Dir(strFile) = "" Then
        FilenameInc = strFile
        Exit Function
      End If
    Pour moi le nom du fichier ce trouve uniquement dans cette partie

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    strFile = FilenameInc(strTargetFolder & att.Filename)
    mais quand je change par
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    .Range("C22") & "_" & .Range("C20") & "_" & .Range("B8")
    ça bug!!!

    Je ne comprend pas!!

    Merci

    Have a good day

  12. #12
    Inactif  

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

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

    Informations forums :
    Inscription : Avril 2009
    Messages : 15 379
    Points : 12 075
    Points
    12 075
    Billets dans le blog
    8
    Par défaut re
    bonjour
    tu dis :
    Range("C22") & "_" & .Range("C20") & "_" & .Range("B8")
    le point devant range n'est pas necessaire a moins que ce soit dans une boucle" with end with"


    mais si je serais toi je preciserais le nom du sheets ou son index
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    sheets("toto"). Range("C22") & "_" & sheets("toto"). Range("C20") & "_" & sheets("toto"). Range("B8")
    a mon avis ca doit venir de la

    d'autre part tu dis

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    strFile = FilenameInc(strTargetFolder & att.Filename)
    a tu essayer de l'afficher dans un messagebox pour voir a mon avis il manque un antislach
    peut etre ca
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    strFile = FilenameInc(strTargetFolder &"\" &  att.Filename)
    au plaisir
    mes fichiers dans les contributions:
    mail avec CDO en vba et mail avec CDO en vbs dans un HTA
    survol des bouton dans userform
    prendre un cliché d'un range

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

  13. #13
    Nouveau membre du Club
    Homme Profil pro
    Etudiant
    Inscrit en
    Janvier 2012
    Messages
    118
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Etudiant

    Informations forums :
    Inscription : Janvier 2012
    Messages : 118
    Points : 35
    Points
    35
    Par défaut
    Bonjour Patrick

    Merci. Les points sont nécessaires et l'antishlash inutiles mon code marche pour l'instant seulement il enregistre les fichier excel de ma boite de reception sous le nom sous lequel je les recoit.

    Bref pour ta solution je pense que j'avance maintenant j'ai

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    strFile = FilenameInc(Sheets(GOBICS).Range("C22") & "_" & Sheets(GOBICS).Range("C20") & "_" & Sheets(GOBICS).Range("B9"))
    mais j'ai une erreur "l'indice n'appartient pas à la selection"???

    Mon code entier est plus haut je le remet ici il est un peu long mais bien documenté dans les titres sont facile a trouver.

    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
    199
    200
    201
    202
    203
    204
    205
    206
    207
    208
    209
    210
    211
    212
    213
    214
    215
    216
    217
    218
    219
    220
    221
    222
    223
    224
    225
    226
    ' ---
    ' AJOUT D'UN \ EN FIN DE CHEMIN
    ' ---
    ' Entrée : strFolder <- Chemin à retraiter.
    ' Sortie : Chemin avec \ ajouté à la fin si nécessaire.
    '
    Function AddBackslash( _
      ByVal strFolder As String) As String
     
      strFolder = Trim(strFolder)
      If Right(strFolder, 1) <> "\" Then strFolder = strFolder & "\"
      AddBackslash = strFolder
    End Function
     
        ' ---
        ' INSERTION DE VALEURS DANS UNE CHAINE DE CARACTERES
        ' ---
        '
        Function StringFormat( _
          ByVal strChaine As String, _
          ParamArray varValeurs() As Variant) As String
     
          Dim intI As Integer
          For intI = LBound(varValeurs) To UBound(varValeurs)
            strChaine = Replace(strChaine, "{" & intI & "}", (varValeurs(intI)))
          Next
     
          StringFormat = strChaine
        End Function
     
     
     
    ' ---
    ' INCREMENTATION BASIQUE D'UN NOM DE FICHIER
    ' ---
    ' Entrée : Chemin complet
    '          Ex. : C:\un\chemin\quelconque\test.jpg
    ' Sortie : Chemin incrémenté, si un fichier existe déjà à cet emplacement.
    '          Ex. : C:\un\chemin\quelconque\test-00001.jpg
    Function FilenameInc(ByVal strFile As String) As String
      Dim strFileTemp As String
      Dim intI As Integer
     
      ' Si le fichier n'existe pas, on conserve son
      ' nom d'origine
      If Dir(strFile) = "" Then
        FilenameInc = strFile
        Exit Function
      End If
     
      ' Créer un nouveau nom de fichier numéroté,
      ' en vérifiant qu'il n'existe pas déjà
      intI = 1
      strFileTemp = strFile
      While Dir(strFileTemp) <> ""
        strFileTemp = StringFormat("{0}{1}-{2}.{3}", _
          FilePath(strFile), _
          FilenameWithoutExt(strFile), _
          Format(intI, "00000"), _
          FileExt(strFile))
        intI = intI + 1
      Wend
     
      ' Valeur de retour
      FilenameInc = strFileTemp
    End Function
     
    ' ---
    ' EXTRACTION D'UN NOM DE FICHIER SANS SON EXTENSION
    ' ---
    ' Entrée : strPath : Chemin d'un fichier
    '                    Ex. : test.jpg
    '                          C:\un\chemin\quelconque\test.jpg
    ' Sortie : Nom du fichier sans son extension (ex. : test).
    '
    Function FilenameWithoutExt( _
      ByVal strPath As String)
     
      Dim intI As Integer
     
      ' Extraire uniquement le nom de fichier
      ' (au cas où on aurait transmis un chemin complet)
      strPath = Filename(strPath)
     
      intI = InStrRev(strPath, ".", -1, vbTextCompare)
      If intI = 0 Then
        FilenameWithoutExt = strPath
      Else
        FilenameWithoutExt = Left(strPath, intI - 1)
      End If
    End Function
     
    ' ---
    ' EXTRACTION D'UN NOM DE FICHIER AVEC SON EXTENSION
    ' ---
    ' Entrée : strPath : Chemin d'un fichier
    '                    Ex. : test.jpg
    '                          C:\un\chemin\quelconque\test.jpg
    ' Sortie : Nom du fichier avec son extension (ex. : test.jpg).
    '
    Function Filename(ByVal strPath As String) As String
      ' Trouver le dernier backslash, s'il y en a un...
      Dim intI As Integer
      intI = InStrRev(strPath, "\", -1, vbTextCompare)
     
      ' Renvoyer la partie après le backslash
      Filename = IIf(intI = 0, strPath, Mid(strPath, intI + 1))
    End Function
     
    ' ---
    ' EXTRACTION DE L'EXTENSION D'UN FICHIER
    ' ---
    ' Entrée : strPath : Chemin d'un fichier
    '                    Ex. : test.jpg
    '                          C:\un\chemin\quelconque\test.jpg
    ' Sortie : Extension du fichier (ex. : jpg).
    '
    Function FileExt(ByVal strPath As String) As String
      ' Ne conserver que le nom de fichier
      strPath = Filename(strPath)
     
      ' Trouver le dernier point
      Dim intI As Integer
      intI = InStrRev(strPath, ".", -1, vbTextCompare)
      FileExt = IIf(intI = 0, "", Mid(strPath, intI + 1))
    End Function
     
    ' ---
    ' EXTRACTION D'UN CHEMIN
    ' ---
    ' Entrée : strPath : Chemin d'un fichier
    '                    Ex. : test.jpg
    '                          C:\un\chemin\quelconque\test.jpg
    ' Sortie : Chemin du fichier (ex. : C:\un\chemin\quelconque\).
    '
    Function FilePath(ByVal strPath As String) As String
      ' Trouver le dernier \
      Dim intI As Integer
      intI = InStrRev(strPath, "\", -1, vbTextCompare)
     
      ' Valeur de retour
      FilePath = IIf(intI = 0, strPath, Left(strPath, intI))
    End Function
     
     
     
    ' ---
    ' EXTRACTION DE PIECES JOINTES OUTLOOK
    ' ---
    '
    Sub SaveAttachments( _
      ByVal strTargetFolder As String, _
      Optional ByVal blnIncludeSubFolders As Boolean = False)
     
      ' Quelques variables...
      Dim olApp As Outlook.Application
      Dim ns As Outlook.Namespace
      Dim fld As Outlook.MAPIFolder
     
      ' Vérifier si le dossier de destination existe bien
      If Dir(strTargetFolder, vbDirectory) = "" Then
        MsgBox "Le dossier destination n'existe pas !", vbExclamation
        Exit Sub
      End If
      strTargetFolder = AddBackslash(strTargetFolder)
     
      ' Démarrer Outlook
      Set olApp = New Outlook.Application
     
      ' Pointer sur la boîte de réception
      Set ns = olApp.GetNamespace("MAPI")
      Set fld = ns.GetDefaultFolder(olFolderInbox)
     
      ' Extraire tous les messages du dossier
      SaveFolderAttachments fld, strTargetFolder, blnIncludeSubFolders
     
      Set fld = Nothing
      Set ns = Nothing
      olApp.Quit
      Set olApp = Nothing
    End Sub
     
    ' ---
    ' EXTRACTION DES PIECES JOINTES D'UN DOSSIER
    ' ---
    '
    Sub SaveFolderAttachments( _
      fld As Outlook.MAPIFolder, _
      strTargetFolder As String, _
      Optional ByVal blnIncludeSubFolders As Boolean = False)
     
      Dim mi As Outlook.MailItem
      Dim att As Outlook.Attachment
      Dim strFile As String
     
      ' Debug
      Debug.Print "---"
      Debug.Print "DOSSIER : " & fld.Name
      Debug.Print "---"
     
      ' Parcourir tous les messages
      For Each mi In fld.Items
        If mi.Attachments.Count > 0 Then
          ' Pour info...
          Debug.Print mi.Subject
     
          For Each att In mi.Attachments
            strFile = FilenameInc(strTargetFolder & att.Filename)
     
            ' Sauvegarder la pièce jointe sous son nom original
            ' ou avec un nom incrémenté en cas de doublons
            att.SaveAsFile strFile
            Debug.Print "  -> " & strFile
          Next
        End If
      Next
     
      ' Si nécessaire, effectuer le même traitement
      ' sur les sous-dossiers
      If blnIncludeSubFolders Then
        Dim subfld As Outlook.MAPIFolder
        For Each subfld In fld.Folders
          SaveFolderAttachments subfld, strTargetFolder, blnIncludeSubFolders
        Next
      End If
    End Sub

  14. #14
    Nouveau membre du Club
    Homme Profil pro
    Etudiant
    Inscrit en
    Janvier 2012
    Messages
    118
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Etudiant

    Informations forums :
    Inscription : Janvier 2012
    Messages : 118
    Points : 35
    Points
    35
    Par défaut
    J'ai tout refais en plus simple

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

Discussions similaires

  1. Réponses: 0
    Dernier message: 11/05/2014, 11h50
  2. [OL-2010] enregistrer les piece jointe sans ouvrir le mail dont je suis en coupie
    Par nassiri dans le forum VBA Outlook
    Réponses: 0
    Dernier message: 10/11/2013, 15h16
  3. Réponses: 0
    Dernier message: 23/04/2012, 17h55
  4. [OL-2002] Enregistrer les pieces jointes sur le disque
    Par youde dans le forum VBA Outlook
    Réponses: 1
    Dernier message: 02/11/2009, 16h49
  5. [IMAP] distinguer les pieces jointes et les images inlines
    Par firejocker dans le forum Bibliothèques et frameworks
    Réponses: 6
    Dernier message: 04/11/2005, 13h11

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