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 :

[E-00] Transcrire une formule Excel en script VBA


Sujet :

Macros et VBA Excel

  1. #1
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Octobre 2008
    Messages
    10
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Octobre 2008
    Messages : 10
    Points : 1
    Points
    1
    Par défaut [E-00] Transcrire une formule Excel en script VBA
    Bonjour,

    Novice en VBA, je souhaiterais compléter une macro existante de la formule Excel virtuelle suivante :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    IF(A4="";"";IF((VLOOKUP(A4;Codes!A2: D36;3;FALSE))="";FaxTo(VLOOKUP(A4;Codes!A2: D36;4;FALSE));MailTo(VLOOKUP(A4;Codes!A2: D36;3;FALSE))))
    Un expert en VBA saurait-il m'aider ?
    D'avance merci.

  2. #2
    Membre éclairé

    Profil pro
    Inscrit en
    Mai 2007
    Messages
    514
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2007
    Messages : 514
    Points : 824
    Points
    824
    Par défaut
    Bonsoir et bienvenue sur dvp,

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    If Range("A4") = "" Then
       '
    Else
       If WorksheetFunction.VLookup(Range("A4"), Sheets("Codes").Range("A2:D36"), 3, False) = "" Then
          FaxTo VLookup(Range("A4"), Sheets("Codes").Range("A2:D36"), 4, False)
       Else
          MailTo VLookup(Range("A4"), Sheets("Codes").Range("A2:D36"), 3, False)
       End If
    End If
    Ce n'est qu'une interprétation possible de ce que tu as écrit, à tester donc. Sinon essaye de reformuler ta question plus précisément.

    Cordialement,

    Tirex28/

  3. #3
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Octobre 2008
    Messages
    10
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Octobre 2008
    Messages : 10
    Points : 1
    Points
    1
    Par défaut
    Merci pour ta réponse Tirex28 !

    J'ai fait l'essai mais ça bug sur Vlookup (après FaxTo)... "Erreur de compilation, Sub ou Function non définie"

    Pour être peut-être plus explicite je souhaiterais qu'à partir d'une page donnée et du contenu d'une cellule de celle-ci, la macro fasse une recherche en V dans un tableau, si la colonne Mail est vide, elle va dans la colonne Fax et envoie un fax au numéro qui s'y trouve et sinon, si la colonne Mail contient une adresse, envoyer un mail à celle-ci.

    J'espère avoir été plus claire.
    En tout cas merci beaucoup pour ton aide.

  4. #4
    Membre émérite Avatar de Godzestla
    Homme Profil pro
    Chercheur de bonheur
    Inscrit en
    Août 2007
    Messages
    2 392
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 59
    Localisation : Belgique

    Informations professionnelles :
    Activité : Chercheur de bonheur
    Secteur : Industrie

    Informations forums :
    Inscription : Août 2007
    Messages : 2 392
    Points : 2 985
    Points
    2 985
    Par défaut
    Bonjour,

    si ta formule existe dans une cellule, tu démarres l'enregistreur de macro, tu prends ta cellule en modif (F2) sans rien changer, tu arrêtes l'enregistreur de macro et tu regarde dans medule (Module1 ?) le code génér pour remplacer ta formule.

    cela donne généralement une bonne base de départ.

  5. #5
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Octobre 2008
    Messages
    10
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Octobre 2008
    Messages : 10
    Points : 1
    Points
    1
    Par défaut
    Bonjour Godzestla et merci pour ta réponse.

    La formule n'existe pas dans une cellule, à cause de MailTo et FaxTo qui ne sont pas compatibles (je crois) avec une formule Excel. C'est pour cela que j'ai parlé d'une formule virtuelle. Elle était juste là pour expliquer ce que je souhaitais obtenir.

    Et je ne sais pas trop comment générer du code pour les si, les recherches, MailTo et FaxTo... et tout compiler pour que ça tienne la route !

  6. #6
    Membre éclairé

    Profil pro
    Inscrit en
    Mai 2007
    Messages
    514
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2007
    Messages : 514
    Points : 824
    Points
    824
    Par défaut
    Bonjour,

    Les procédures MailTo et FaxTo sont elles déja ecrites?

    Cordialement,

    Tirex28/

  7. #7
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Octobre 2008
    Messages
    10
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Octobre 2008
    Messages : 10
    Points : 1
    Points
    1
    Par défaut
    Bonjour Tirex28,

    Non les procédures ne sont pas écrites, je n'en connais pas la syntaxe

    Bien cordialement.

  8. #8
    Membre éclairé

    Profil pro
    Inscrit en
    Mai 2007
    Messages
    514
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2007
    Messages : 514
    Points : 824
    Points
    824
    Par défaut
    Re,

    Pour ce qui est d'envoyer un mail tu peux commencer par rechercher dans la
    FAQ. Pour ce qui est du fax je ne sais pas.

    Cordialement,

    Tirex28/

  9. #9
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Octobre 2008
    Messages
    10
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Octobre 2008
    Messages : 10
    Points : 1
    Points
    1
    Par défaut
    Re,

    Merci, je suis allée voir les FAQ... mais à vrai dire, je me sens un peu dépassée. Comme si j'essayais de m'exprimer dans une langue étrangère inconnue de moi (VBA), tout en sachant très bien ce que je veux exprimer en Excel

    Il me faut la procédure pour envoyer un mail de la page en cours en donnant un objet au message, celle pour l'envoi d'un fax, celle pour inclure si et recherche en V, et compiler tout ça adroitement pour que ça convienne à VBA...

    Ca me paraît juste une montagne

  10. #10
    Membre éclairé

    Profil pro
    Inscrit en
    Mai 2007
    Messages
    514
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2007
    Messages : 514
    Points : 824
    Points
    824
    Par défaut
    Re,

    Novice en VBA, je souhaiterais compléter une macro existante
    Si tu n'as vraiment aucune notions de programmation l'auteur de cette macro pourrait sans doute t'aider.

    Ca me paraît juste une montagne
    Un exemple pour envoyer le classeur actif:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Sub EnvoyerClasseur()
       ActiveWorkbook.SendMail Recipients:="adresse@destinataire"
    End Sub
    Cordialement,

    Tirex28/

  11. #11
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Octobre 2008
    Messages
    10
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Octobre 2008
    Messages : 10
    Points : 1
    Points
    1
    Par défaut
    Le problème c'est que l'auteur de cette macro... c'est moi !

    En enregistrant les différentes opérations puis avec des copier-coller afin que tout y soit, en posant une question ici ou là, et en allant dans le code déjà écrit pour faire les dernières modifications. Sauf que là je n'y arrive pas de cette manière, les fonctions sont imbriquées et je ne sais pas comment contourner les problèmes...

    Dans ton code "adresse@destinataire" serait le résultat de la recherche en V....

    Merci pour ton aide Tirex28.

  12. #12
    Membre éclairé

    Profil pro
    Inscrit en
    Mai 2007
    Messages
    514
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2007
    Messages : 514
    Points : 824
    Points
    824
    Par défaut
    Re,

    Tu peux adapter et tester ceci:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    Sub EnvoyerClasseur()
       Dim Adresse As String
       Adresse = WorksheetFunction.VLookup("Valeur", Range("A1:D100"), 3, False)
       ThisWorkbook.SendMail Recipients:=Adresse
    End Sub
    Cordialement,
    Tirex28/

  13. #13
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Octobre 2008
    Messages
    10
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Octobre 2008
    Messages : 10
    Points : 1
    Points
    1
    Par défaut
    Je l'ai adapté ainsi :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    Sub EnvoiCondition()
     
       Dim Adresse As String
       Adresse = WorksheetFunction.VLookup("A4", Range(Codes!;"A2:D36"), 3, False)
       ThisWorkbook.SendMail Recipients:=Adresse
     
    End Sub
    mais au test il bute sur "A2: D36" en indiquant qu'un séparateur de liste est attendu.

  14. #14
    Membre éclairé

    Profil pro
    Inscrit en
    Mai 2007
    Messages
    514
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2007
    Messages : 514
    Points : 824
    Points
    824
    Par défaut
    Ceci devrait etre un peu mieux:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    Sub EnvoiCondition()
     
       Dim Adresse As String
       Adresse = WorksheetFunction.VLookup(Range("A4"), _
             Worksheets("Codes").Range("A2:D36"), 3, False)
       ThisWorkbook.SendMail Recipients:=Adresse
     
    End Sub

  15. #15
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Octobre 2008
    Messages
    10
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Octobre 2008
    Messages : 10
    Points : 1
    Points
    1
    Par défaut
    C'est tout bon

    Alors au stade actuel si la macro tombe sur une cellule du tableau sans adresse e-mail il prépare le mail quand même et attend. Maintenant ce que je souhaiterais, c'est que dans ce cas-là il se rabatte sur la colonne fax et envoie un fax...

    Grand merci Tirex28, j'avance

    Si j'enregistre la macro pour envoyer un fax, il me donne ça

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    Sub FaxTo()
        Application.ActivePrinter = "DelFax sur Ne03:"
        ActiveWindow.SelectedSheets.PrintOut Copies:=1, ActivePrinter:= _
            "DelFax sur Ne03:", Collate:=True
        Application.WindowState = xlMinimized
        Application.WindowState = xlNormal
    End Sub

  16. #16
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Octobre 2008
    Messages
    10
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Octobre 2008
    Messages : 10
    Points : 1
    Points
    1
    Par défaut
    Là je crois que j'ai tout mais encore dans le désordre

    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
     
    Sub EnvoiCondition()
     
    If Range("A4") = "" Then
       '
    Else
       If WorksheetFunction.VLookup(Range("A4"), Sheets("Codes").Range("A2:D36"), 3, False) = "" Then
          FaxTo VLookup(Range("A4"), Sheets("Codes").Range("A2:D36"), 4, False)
       Else
          MailTo VLookup(Range("A4"), Sheets("Codes").Range("A2:D36"), 3, False)
       End If
     
     
     
        Application.ActivePrinter = "DelFax sur Ne03:"
        ActiveWindow.SelectedSheets.PrintOut Copies:=1, ActivePrinter:= _
            "DelFax sur Ne03:", Collate:=True
        Application.WindowState = xlMinimized
        Application.WindowState = xlNormal
     
    End If
     
       Dim Adresse As String
       Adresse = WorksheetFunction.VLookup(Range("A4"), _
             Worksheets("Codes").Range("A2:D36"), 3, False)
       ThisWorkbook.SendMail Recipients:=Adresse
     
    End Sub
    C'est aussi "Adresse =" pour l'envoi du fax ? je ne pense pas. Number =, ou FaxNumber peut-être ?

    Alors dans mon ordre de novice, ça donne ça

    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
     
    Sub EnvoiCondition()
     
    If Range("A4") = "" Then
       '
    Else
       If WorksheetFunction.VLookup(Range("A4"), Sheets("Codes").Range("A2:D36"), 3, False) = "" Then
         Adresse = WorksheetFunction.VLookup(Range("A4"), Sheets("Codes").Range("A2:D36"), 4, False)
         ThisWorkbook.SendFAX Recipients:=Adresse
         Application.ActivePrinter = "DelFax sur Ne03:"
        ActiveWindow.SelectedSheets.PrintOut Copies:=1, ActivePrinter:= _
            "DelFax sur Ne03:", Collate:=True
        Application.WindowState = xlMinimized
        Application.WindowState = xlNormal
       Else
          Dim Adresse As String
       Adresse = WorksheetFunction.VLookup(Range("A4"), _
             Worksheets("Codes").Range("A2:D36"), 3, False)
       ThisWorkbook.SendMail Recipients:=Adresse
     
     End Sub
    Et bien sûr il bug sur SendFax
    Quelle est la syntaxe pour envoyer un fax ?...

    Après recherches, il semble que PrintOut remplace SendFax, par contre il bute sur Recipients:=

    En plus, je ne peux recourir à l'aide du logiciel, elle n'est pas installée ! Et mon patron n'a pas encore remis la main sur le CD d'installation...

  17. #17
    Membre éclairé

    Profil pro
    Inscrit en
    Mai 2007
    Messages
    514
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2007
    Messages : 514
    Points : 824
    Points
    824
    Par défaut
    Bonsoir,

    Pour clarifier un peu:

    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
    Sub EnvoiCondition()
        Dim Adresse As String   'Les déclarations de variables au début
        Dim Table As Range
        Dim Valeur
     
        Set Table = Sheets("Codes").Range("A2:D36")  'Définition de la plage de donnée
        Valeur = Range("A4").Value                   'Valeur à rechercher
        If Valeur <> "" Then
            On Error GoTo ErrH
            Adresse = WorksheetFunction.VLookup(Valeur, Table, 3, False)
            On Error GoTo 0
            If Adresse <> "" Then
                'Envoyer un mail
                ThisWorkbook.SendMail Recipients:=Adresse
            Else
                'Envoyer un fax
                ActiveWindow.SelectedSheets.PrintOut Copies:=1, _
                    ActivePrinter:="DelFax sur Ne03:", Collate:=True
            End If
        End If
        Exit Sub
    ErrH:
        MsgBox "La valeur " & Valeur & " n'existe pas dans la table."
    End Sub
    Quelle est la syntaxe pour envoyer un fax ?...
    Tu me poses une colle. Récupérer le numéro de fax dans la table ne présente pas de difficulté mais j'ignore comment l'utiliser.

    Bon courage,

    Tirex28/

  18. #18
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Octobre 2008
    Messages
    10
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Octobre 2008
    Messages : 10
    Points : 1
    Points
    1
    Par défaut
    Bonjour Tirex28 et à vous tous,

    Merci beaucoup pour la clarification ! Ca fonctionne nickel. Ne reste plus que le code pour que le n° de fax soit pris en compte. Le logiciel s'ouvre en attente du n°.

    Donc on n'est vraiment pas loin du compte !
    J'ai reçu des lignes de code sur un autre forum mais je ne sais pas encore comment l'intégrer, si tu as une idée :

    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
     
    Faxcom 1.0 Type Library
     
    'ServName name of your computer
    'DocName document which you want to send, in your case it’s Report
    'FaxNo Fax number where you want the fax to be delivered
     
    Public Function SendFax(ServName As String, DocName As String, _
    FaxNo As String, RecName As String) As String
     
    'varable for FAX Server
    Dim FaxServer As FAXCOMLib.FaxServer
    Dim FaxDoc As FAXCOMLib.FaxDoc
     
    'on error execution jumps to lable ErrSendFax
    On Error GoTo ErrSendFax
     
    'Create FaxServer object...
    Set FaxServer = CreateObject("FaxServer.FaxServer")
    '...and connect to it - no empty name allowed
    FaxServer.Connect (ServName)
    'Attaches document for sending FAX
    Set FaxDoc = FaxServer.CreateDocument(DocName)
     
    'Recepent FAX Number
    FaxDoc.FaxNumber = FaxNo
    'Recepent Name
    FaxDoc.RecipientName = RecName
    'Sends FAX using telephone which must be connected to FAX MODEM
    FaxDoc.Send
    'Kills FaxDoc Object
    Set FaxDoc = Nothing
    'Connection is Terminated
    FaxServer.Disconnect
    'Kills FaxServer object
    Set FaxServer = Nothing
    'Message is sent Back to calling function
    SendFax = ""
    Exit Function
    'on error execution jumps here
    ErrSendFax:
    'Message is sent back to calling function
    SendFax = "n"
    End FunctionCordialement
    La réflexion continue, merci pour toutes les remarques.

Discussions similaires

  1. Exécution automatique d'une formule Excel à partir de VBA
    Par jumiara dans le forum Macros et VBA Excel
    Réponses: 6
    Dernier message: 02/11/2010, 12h13
  2. Transformé une formule Excel en script VBA ?
    Par SFLEY dans le forum Macros et VBA Excel
    Réponses: 14
    Dernier message: 06/01/2007, 11h48
  3. Simplifier une formule excel
    Par beegees dans le forum Macros et VBA Excel
    Réponses: 12
    Dernier message: 24/04/2006, 09h10
  4. [debutant] Traduite une formule excel dans access
    Par zelob dans le forum Access
    Réponses: 5
    Dernier message: 25/02/2006, 05h17
  5. [VBA]Passer une variable dans une formule Excel
    Par David1974 dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 27/01/2006, 16h52

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