Programme VBA
Répondre à la discussion
Affichage des résultats 1 à 13 sur 13

Programme VBA



  1. #1
    matthieu2

    Programme VBA


    ------

    Bonjour a toutes et a tous,

    J'ai cree un programme (VBA) qui me permet de convertir un fichier Excel en PDF, de le sauvegarder puis de l'envoyer a une adresse mail specifiee. Pour cela, l'operateur doit renseigner le nom qui veut donner au fichier et clicker sur envoyer.

    Et la j'ai un petit soucis car le format PDF ne prend pas en charge certain caracteres tels que: ? / | \ : et bien d'autres pour la sauvegarde.

    J'utilise donc une fonction REPLACE et voici une partie de mon code correspondant:

    Dim TheName As String
    TheName=txtName.text

    TheName = Replace(txtName.text, "|", "_")
    TheName = Replace(txtName.text, "\", "_")
    TheName = Replace(txtName.text, "/", "_")
    TheName = Replace(txtName.text, ":", "_")
    TheName = Replace(txtName.text, "*", "_")
    TheName = Replace(txtName.text, "<", "_")
    TheName = Replace(txtName.text, ">", "_")
    TheName = Replace(txtName.text, """", "_")
    TheName = Replace(txtName.text, "?", "_")

    msgbox TheName 'juste pour voir si ca marche (ne fera pas parti du programme final)

    Et la... il ne me remplace rien du tout.
    Par contre si je laisse une seule fonction REPLACE (les autres en commentaires) et bien ca marche Je comprend pas pourquoi

    Donc si quelqu'un a une explication a me proposer?

    Merci d'avance pour vos futurs commentaires.

    @+

    -----

  2. #2
    invite765732342432
    Invité

    Re : Programme VBA

    Citation Envoyé par matthieu2 Voir le message
    Et la j'ai un petit soucis car le format PDF ne prend pas en charge certain caracteres tels que: ? / | \ : et bien d'autres pour la sauvegarde.
    Si, si, PDF les prends en charge... Par contre, il faut peut-être les encoder avant, c'est possible.

    Par contre si je laisse une seule fonction REPLACE (les autres en commentaires) et bien ca marche Je comprend pas pourquoi

    Donc si quelqu'un a une explication a me proposer?
    Oui: à chaque ligne où tu fait un Replace, tu repars de txtName.text au lieu de TheName, donc c'est logique que seule le dernier replace est pris en compte...

  3. #3
    matthieu2

    Re : Programme VBA

    Re,

    Merci pour l'explication, j'ai trouve une solution:

    Dim TheName As String
    Dim TheName2 As String

    TheName2 = Replace(TheName, "|", "_")
    TheName2 = Replace(TheName2, "\", "_")
    TheName2 = Replace(TheName2, "/", "_")
    TheName2 = Replace(TheName2, ":", "_")
    TheName2 = Replace(TheName2, "*", "_")
    TheName2 = Replace(TheName2, "<", "_")
    TheName2 = Replace(TheName2, ">", "_")
    TheName2 = Replace(TheName2, """", "_")
    TheName2 = Replace(TheName2, "?", "_")

    MsgBox TheName2

    Et la ca fonctionne.

    @Faith:
    lorsque je cherche a mettre un caractere type "?" par exemple, un message me dit:
    A file name cannot contain any of the following characters:
    \ / : * ? " < > |

    Du coup tu penses qu'il faut les encoder comment quon fait ca (c'est juste pour ma curiosite personnelle vu que le pg marche )

    @+

  4. #4
    Tryph

    Re : Programme VBA

    Salut,

    le fait que tu ne puisses pas mettre certain caractères dans un nom de fichier n'a rien à voir avec le format PDF, mais plutôt avec l'OS.
    tu peux essayer de créer un fichier texte en y mettant les caractères cités, ton OS refusera.

    Faith t'as dit que tu pouvais les encoder car il a mal compris je pense (faut dire que parler du format PDF prête à confusion). il a du penser que tu avais des problèmes de caractères dans le contenu de ton fichier et non dans le nom de celui-ci.

    en gros, tu ne pourras pas mettre ces caractères dans ton nom de fichier, et les remplacer par un underscore me parait être une bonne solution.
    Dernière modification par Tryph ; 29/11/2012 à 11h24.

  5. A voir en vidéo sur Futura
  6. #5
    matthieu2

    Re : Programme VBA

    Re,

    Citation Envoyé par Tryph Voir le message
    le fait que tu ne puisses pas mettre certains caractères dans un nom de fichier n'a rien à voir avec le format PDF, mais plutôt avec l'OS.
    A ouai ta raison... j'avais jamais fait gaffe

    +

  7. #6
    invite765732342432
    Invité

    Re : Programme VBA

    Citation Envoyé par Tryph Voir le message
    il a du penser que tu avais des problèmes de caractères dans le contenu de ton fichier et non dans le nom de celui-ci.
    Effectivement, merci d'avoir rectifié

  8. #7
    matthieu2

    Re : Programme VBA

    Bonjour a toutes et a tous,

    Je reviens vers vous car j'ai de nouveau un soucis avec mon code.

    Il s'agit du meme programme. Afin d'envoyer un pdf via Outlook (en passant par la macro excel), je dois ajouter une reference: Microsoft Outlook 14.0 Object Library sinon il me dit que:

    Dim ObjOutlook As New Outlook.Application

    est "User-defined type not defined"

    En cochant cette reference dans VBA => Tools => References cela marche.

    J'aimerais que cette references s'ajoute directement lors du lancement de la macro.

    J'ai deja essaye avec la methode:
    ThisWorkbook.VBProject.Referen ces.AddFromFile ("C:\Program Files\Microsoft Office\Office 14\msoult.olb") que j'ai ajoute juste avant le Dim ObjOutlook... mais cela ne donne rien de probant... En effet en lancant la macro ligne par ligne, j'ai l'impression qu'il ne lit meme pas ce code et qu'il passe directement a Dim ObjOutlook As New Outlook.Application en me notifiant une erreur

    Voila, je suis un peu perdu... donc si quelqu'un veut bien m'aider.

    Merci d'avance.

    @+
    Dernière modification par matthieu2 ; 14/01/2013 à 12h44.

  9. #8
    matthieu2

    Re : Programme VBA

    Re,

    J'ai essayer de mettre mon code permettant l'initialisation des references dans la page "This Workbook":

    '***************************** ****************************** **********************
    With ThisWorkbook.VBProject.Referen ces
    .AddFromFile ("C:\Program Files\Microsoft Office\Office14\msoult.olb")
    .AddFromFile ("C:\Program Files\Microsoft Office\Office14\SOCIALPROVIDER .DLL")
    .AddFromFile ("C:\Program Files\Microsoft Office\Office14\OUTLCTL.DLL")
    End With
    '***************************** ****************************** **********************

    Et la nouveau message d'erreur mais different cette fois-ci:
    Run time error '48':
    Error in loading DLL

    @+

  10. #9
    matthieu2

    Re : Programme VBA

    Bonjour,

    Petite mise a jour sur l'avancement.

    J'ai reussi a palier l'erreur 48 en copiant ces 3 fichiers sur le bureau (par exemple) et en changeant par le chemin d'acces correspondant. Cela fonctionne!

    J'ai egalement fais un autre test consistant a creer un boutton reprenant le code suivant:

    Private Sub cmdActRef_Click()

    On Error Resume Next

    With ThisWorkbook.VBProject.Referen ces
    Application.DisplayAlerts = False
    .AddFromFile ("C:\Program Files\Microsoft Office\Office14\msoutl.olb")
    .AddFromFile ("C:\Program Files\Microsoft Office\Office14\SOCIALPROVIDER .DLL")
    .AddFromFile ("C:\Program Files\Microsoft Office\Office14\OUTLCTL.DLL")
    End With

    Application.DisplayAlerts = True
    On Error GoTo 0

    End Sub

    Cela fonctionne!

    => L'objectif est maintenant de faire un seul et meme boutton permettant l'activation de ces references et l'execution du reste de mon programme (conversion de l'excel en PDF, Sauvegarde du PDF, Creation et envoi du mail) qui lui fonctionne bien en 1 click.

    Si vous avez des idees je suis preneur.

    Au revoir.

  11. #10
    francess

    Re : Programme VBA

    Bonjour,

    hé bien je vois que vous vous y connaissez bien a ce sujet donc moi mon problème c'est que
    je dois faire un programme avec vba sur excel et j'ai aucune idée comment commencer ce programme.

    il consiste a coder et décoder (de la cryptographie) un message a l'aide d'une clé.


    Il faut utilisé les alphabet décaler par rapport à l'alphabet normal :

    l’alphabet qui commence par B et finit par …YZA (alphabet décalé de +1)
    l’alphabet qui commence par C et finit par …ZAB (alphabet décalé de +2)
    etc…
    l’alphabet qui commence par Z et finit par …WXY (alphabet décalé de +25)

    Le codage va s’effectuer sur le principe du chiffre de César : on remplace la lettre d’origine par la lettre occupant la même place dans le nouvel alphabet décalé.
    Mais à la différence du chiffre de César, un même message va utiliser non pas un, mais plusieurs alphabets décalés. Pour savoir quels alphabets doivent être utilisés, et dans quel ordre, on utilise une clé.
    Si cette clé est "VIGENERE" et le message est "Il faut coder cette phrase", on procèdera comme suit :
    La première lettre du message (en majuscule), « I », est la 9e lettre de l’alphabet normal. Elle doit être codée en utilisant l’alphabet commençant par la première lettre de la clé, « V ». Dans cet alphabet, la 9e lettre est le « D ». « I » devient donc un « D ».
    La deuxième lettre du message (toujours en majuscule), « L », est la 12e lettre de l’alphabet normal. Elle doit être codée en utilisant l’alphabet commençant par la deuxième lettre de la clé, « I ». Dans cet alphabet, la 12e lettre est le « T ». L devient donc un « T », etc.
    Quand on arrive à la dernière lettre de la clé, on recommence à la première. Les lettres de la clé seront ainsi utilisées de façon cyclique (eg. V, I, G, E, N, E, R, E, V, I, G, E, etc.).
    Écrire l’algorithme qui effectue un cryptage de Vigenère, en demandant bien sûr au départ le message à coder et la clé à l’utilisateur.

    Exemple : Quel est le message ? il faut coder cette phrase!
    Quel est la clé ? abcde
    Voici le message codé : IM IEUU FSDFT GEUVH PITDWE!
    Voici le message décodé : IL FAUT CODER CETTE PHRASE!


    voici les fonctions que je dois utiliser:

    Function Trouver_Lettre(lettre As String, Debut_Alphabet As String) As String
    Cette fonction renvoie la transposition de "lettre" dans l'alphabet qui commence à "Debut_Alphabet". Renvoie un nouveau caractère dans [A..Z]

    Function Trouver_Pos(lettre As String, Debut_Alphabet As String) As Integer
    Cette fonction renvoie la position relative de la "lettre" dans l'alphabet qui commence à "Debut_Alphabet". Renvoie une valeur entre [0..25].

    Function Cryptage(texte As String, cle As String) As String
    Cette fonction renvoie la version encodée d'un message selon la clé utilisée.

    Function Decryptage(texte_code As String, cle As String) As String
    Cette fonction renvoie la version décodée d'un message déjà codé selon la clé utilisée.

    merci !!!

  12. #11
    whoami

    Re : Programme VBA

    Bonjour,

    @francess

    En lisant la charte du forum, tu aurais appris qu'ici, personne ne fera ton travail.

    Donc, montre-nous ce que tu as fait, explique-nous ce qui te bloque, et on verra.

  13. #12
    JPL
    Responsable des forums

    Re : Programme VBA

    Plus exactement l'information se trouve ici : http://forums.futura-sciences.com/pr...ces-forum.html
    Rien ne sert de penser, il faut réfléchir avant - Pierre Dac

  14. #13
    whoami

    Re : Programme VBA

    Bonjour,

    Je ne donne jamais ce genre de lien, les nouveaux arrivants peuvent bien faire l'effort de chercher un peu, et avec un peu de chance, ils verront en supplément quelques trucs intéressants.

Discussions similaires

  1. excel et vba
    Par littlegirl dans le forum Programmation et langages, Algorithmique
    Réponses: 4
    Dernier message: 02/08/2012, 04h16
  2. vba word
    Par invitef9b61c39 dans le forum Programmation et langages, Algorithmique
    Réponses: 0
    Dernier message: 16/03/2011, 13h20
  3. comment utiliser les résultats d'un programme fortran dans un autre programme
    Par invitedb78a3a3 dans le forum Logiciel - Software - Open Source
    Réponses: 1
    Dernier message: 30/09/2010, 19h21
  4. Vba excel
    Par pyrosigma dans le forum Logiciel - Software - Open Source
    Réponses: 3
    Dernier message: 24/06/2010, 11h44
  5. script vba
    Par invitebcff3455 dans le forum Logiciel - Software - Open Source
    Réponses: 1
    Dernier message: 13/03/2008, 14h18