Gérer les points dans une expression

Candy -  
 Candy -
Bonjour,
J'ai un soucis. Je suis en train d'écrire une macro qui doit ajouter des pièces jointes .PDF dans un mail. Il faut donc que la ou les pièces soient trouvés facilement.
Ma difficulté réside dans le fait que le numéro de facture dans mon tableau, que je peux mettre à jour chaque fois et dans lequel je sélectionne les compagnies auxquels je dois envoyer un mail, est différent de celui sur le serveur.

exemple.

dans mon tableau je peux avoir ceci: Facture 12.13.145.1265 et sur le serveur c'est plutôt Facture 12 13 145 1265 (sans les points). ou encore
dans le tableau: Facture FA15121785 et sur le serveur Facture 15121785.

Je ne sais pas comment gérer ça avec VBA.

J'essaie de chercher sur les forums, mais je ne trouve rien pour le moment. Si vous avez des pistes ca serait cool.

Je vous donne le bout de code sur lequel je travaille
'-----------------Pièces jointes------------------------------------------------------------------------------------------------------
p = UD.Cells(Rows.Count, "E").End(xlUp).Row - 2
For l = 2 To p
fichierpdf = UD.Range("e" & l).Value

Set fso = CreateObject("Scripting.FileSystemObject")
Set dossier = fso.GetFolder("S:\bbbbbbb\ACTIVITY\CLIENTS\")

z = dossier.SubFolders.Count

nomdossier = UCase(UD.Range("A2").Value)
Worksheets("Recipients CC").Range("G:K").Clear

Set dossiercompany = fso.GetFolder("S:\bbbbbbb\ACTIVITY\CLIENTS\" & nomdossier & "\" & UCase("Invoicing"))
Debug.Print dossiercompany

' MsgBox nomdossier

For Each sousdossiercompany In dossiercompany.SubFolders

m = sousdossiercompany.Name

lngrow = lngrow + 1

If IsNumeric(m) And m <> "Trams" Then

Worksheets("Recipients CC").Range("G" & lngrow).Value = CInt(m)
End If

Next sousdossiercompany

derlng = Worksheets("Recipients CC").Cells(Rows.Count, "G").End(xlUp).Row

If Worksheets("Recipients CC").Range("G" & derlng).Value > Worksheets("Recipients CC").Range("G" & derlng - 1).Value Then

ssdossier = CStr(Worksheets("Recipients CC").Range("G" & derlng).Value)

End If

Dim mesfichiers, t()

chemin = dossiercompany & "\" & ssdossier ' racine pour la recherche

Debug.Print chemin

exT = ".pdf" ' extention de fichiers recherchés
argmt1 = fichierpdf ' partie du nom de fichiers recherchés

mesfichiers = cherche(chemin, exT, argmt1) ' ||mesfichiers|| deviendra un tableau de nom de fichiers selon les condition précédemment énumérée


If UBound(mesfichiers) > 0 Then

'MsgBox Join(mesfichiers, vbCrLf)
i = i + 1
UD.Range("M" & i).Value = mesfichiers

End If


Next l

PieceJointe = PieceJointe

For u = 2 To UD.Range("M65536").End(xlUp).Row - 1
PieceJointe = PieceJointe & "; " & UD.Range("M" & u).Value
Debug.Print PieceJointe
Nex
t


Merci

3 réponses

[Dal] Messages postés 6205 Date d'inscription   Statut Contributeur Dernière intervention   1 105
 
Salut Candy,

Si tu peux compter sur le fait que le format des noms de factures dans le tableau est celui que tu décris, et que tu n'as pas à le vérifier, tu peux utiliser "Replace" comme ceci :

    factNom = Replace(factNom, "Facture FA", "Facture ")
    factNom = Replace(factNom, ".", " ")


Cela va simplement remplacer "Facture FA" par "Facture " si cet argument recherché s'y trouve (et là où il se trouve), et pareil pour les "." qui sont remplacés par les espaces si des points s'y trouvent (et là où les points se trouvent).
0
[Dal] Messages postés 6205 Date d'inscription   Statut Contributeur Dernière intervention   1 105
 
tu peux même te faire une fonction qui normalise les noms de factures

Function normalise(st As String) As String
    normalise = Replace(st, "Facture FA", "Facture ")
    normalise = Replace(normalise, ".", " ")
End Function


que tu pourras appeler sur chaque nom

par exemple :

    Dim factTableau As String

    factTableau = "Facture FA15121785"
    factTableau = normalise(factTableau)
    MsgBox factTableau
    
    factTableau = "Facture 12.13.145.1265"
    factTableau = normalise(factTableau)
    MsgBox factTableau


affichera successivement : "Facture 15121785" puis ""Facture 12 13 145 1265"
0
Candy
 
Bonjour Dal,

Merci beaucoup pour ton aide. je vais le faire tout de suite. Je veux profiter de ta gentillesse pour te demander quelque chose d'autre. voila. je dois joindre les factures en question dans un emails. et je peux en avoir plusieurs pour un seul client (compagnie).

j'ai reussi la macro qui me permet d'afficher les chemins d'acces aux differentes factures dans un tableau excel.

je me suis dis que je devais creer une variable concatener ou je concatene le contenu de chaque ligne du tableau avec un ";" pour les separer. et cette variable va me servir de piece à attacher:
exemple

M1 = "S:\facture\piecejointe.pdf"
M2 = "S:\facture\piecejointe1.pdf"
M3 = "S:\facture\piecejointe2.pdf"
M4 = "S:\facture\piecejointe3.pdf"
M5 = "S:\facture\piecejointe4.pdf"

for i=2 to z
concatene=range("M1").value
concatene=concatene & ";" & range("M"& i).value
next i; 



j'aurai donc
concatène= S:\facture\piecejointe.pdf ; S:\facture\piecejointe1.pdf ; S:\facture\piecejointe2.pdf" ; S:\facture\piecejointe3.pdf" ; "S:\facture\piecejointe4.pdf"


mais ca ne marche pas.

c'est pas possible egalement de faire plusieurs attachements.add vu qu'on ne maitrise pas le nombre de pieces à ajouter

Du coup, comment je peux faire?

Merci beaucoup pour ton aide
0
[Dal] Messages postés 6205 Date d'inscription   Statut Contributeur Dernière intervention   1 105
 
Tu devrais poser ta nouvelle question dans un nouveau fil de discussion.

Je n'utilise pas Outlook et Excel seulement très occasionnellement.

Cependant, si tu disposes des chemins d'accès aux différentes factures à envoyer dans un tableau VBA, je ne vois pas ce qui t'empêche, pour chacun des chemins d'accès stocké dans un élément du tableau, d'appeler la méthode attachements.add

Par exemple :

    Dim mesfichiers(4) As String
    Dim i As Integer
    
    mesfichiers(0) = "Facture 15121785"
    mesfichiers(1) = "Facture 15121786"
    mesfichiers(2) = "Facture 15121787"
    mesfichiers(3) = "Facture 15121788"
    mesfichiers(4) = "Facture 15121789"

    ' parcourir les éléments du tableau quels que soient les indices de
    ' début et de fin du tableau en les déterminant avec LBound() et UBound()
    For i = LBound(mesfichiers) To UBound(mesfichiers)
        ' mettre à la place l'appel à attachements.add
        MsgBox mesfichiers(i)
    Next i
0
Candy
 
Merci Dal
0