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 :

Gérer les points dans une expression


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Femme Profil pro
    Étudiant
    Inscrit en
    Mai 2019
    Messages
    20
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2019
    Messages : 20
    Par défaut Gérer les points dans une expression
    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

    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
    '-----------------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
    Next
    Merci

  2. #2
    Expert éminent Avatar de Menhir
    Homme Profil pro
    Ingénieur
    Inscrit en
    Juin 2007
    Messages
    16 037
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2007
    Messages : 16 037
    Par défaut
    Citation Envoyé par candyneige Voir le message
    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.
    Ces deux exemples sont des cas différents : dans le premier, il faut retirer les points alors que dans le second il faut en ajouter un.

    On ne peut pas bâtir un algorithme (et encore moins un code) sur des exemples.
    Il faut une règle précise qui couvre tous les cas possibles.

    Pour ton premier cas, tu peux utiliser la fonction Replace https://docs.microsoft.com/fr-fr/off...place-function
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Replace("12.13.145.1265","."," ")
    Pour le second, une simple concaténation suffit

  3. #3
    Membre Expert
    Profil pro
    Inscrit en
    Février 2007
    Messages
    2 266
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 2 266
    Par défaut
    Bonjour à tous,

    tu peux te le faire sous forme de fonction personnalisée que tu complètera au fur et à mesure des nouveaux cas.
    A mettre dans un module Standard :
    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
    Sub test()
        Debug.Print formatFact("Facture 12.13.145.1265")
        Debug.Print formatFact("Facture FA15121785")
    End Sub
     
     
    Function formatFact(num As String)
        Dim typ As Long
        'types :
        ' 1: Facture 12.13.145.1265 en Facture 12 13 145 1265 (sans les points)
        ' 2: Facture FA15121785 en Facture 15121785.
        If num Like "Facture #*.#*.#*.#*" Then typ = 1
        If num Like "Facture FA######*" Then typ = 2
        Select Case typ
        Case 1
            formatFact = Replace(num, ".", " ")
        Case 2
            formatFact = "Facture " & Mid(num, 11)
        Case Else
            formatFact = CVErr(xlErrValue)
        End Select
    End Function
    Tu peux compléter les tests déterminant le type pour être plus rigoureux.
    eric

Discussions similaires

  1. [PHP 5.0] fonction pour gerer les accents dans une chaine
    Par adel25 dans le forum Langage
    Réponses: 1
    Dernier message: 21/08/2013, 14h36
  2. liaison entre les points dans une courbe
    Par benza dans le forum MATLAB
    Réponses: 3
    Dernier message: 28/12/2012, 14h58
  3. [Sql server 2000] gerer les erreurs dans une procedure
    Par lemagicien dans le forum MS SQL Server
    Réponses: 1
    Dernier message: 19/03/2008, 21h15
  4. [syntaxe] Gerer les variables dans une requete
    Par rastapopulos dans le forum MS SQL Server
    Réponses: 12
    Dernier message: 15/04/2003, 12h53

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