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 :

Problèmes de chemin DLL entre Windows Seven 32 et 64 bits. [XL-2003]


Sujet :

Macros et VBA Excel

  1. #1
    Nouveau membre du Club
    Homme Profil pro
    Technicien de laboratoire routier
    Inscrit en
    Novembre 2014
    Messages
    39
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Technicien de laboratoire routier
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Novembre 2014
    Messages : 39
    Points : 32
    Points
    32
    Par défaut Problèmes de chemin DLL entre Windows Seven 32 et 64 bits.
    Bonjour,
    Je m'adresse à votre communauté, car je suis en train de développer une macro VBA sous Excel qui sera utilisé sous un système 32 et 64 bits. Je rencontre un problème au niveau de mes chemins de référence DLL, en effet sous un environnement 32 bits mon chemin d'accès est : « C:\Program Files\ …. » Alors que sous un système 64 bits il sera : « C:\Program Files (x86)\ … ».
    Donc, ma question est : existe-t-il une façon de déclarer le chemin des DLL en fonction du système sous lequel ma macro s'exécute.
    Merci d’avance pour l'attention portée à mon problème.

  2. #2
    Membre habitué
    Inscrit en
    Décembre 2008
    Messages
    115
    Détails du profil
    Informations forums :
    Inscription : Décembre 2008
    Messages : 115
    Points : 180
    Points
    180
    Par défaut
    Bonjour

    A essayer, la fonction Environ. C'est un classique, mais ça aide toujours
    Dans un module standard la fonction MyEnv
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Function MyEnv(arg1 As Integer) As String
        MyEnv = Environ(arg1)      'Un coup de F1 sur Environ pour + d'explications, mais on reste dans le laconique
    End Function
    Dans une feuille vierge, "A1" =1, "B1"=MyEnv(A1), tirer vers le bas. Pour du 64 bits, ça va jusqu'à 39.
    Après, il faut faire le tri



    Cordialement

  3. #3
    Invité
    Invité(e)
    Par défaut
    Bonjour,
    Visual Basic For Applications est une librairie par défaut elle se trouve comme tu l'as dit dans C:\Program Files\ ou C:\Program Files (x86)!

    pour palier a cela tu peux utiliser l'instance effectivement chargé.
    Code instance Vba : Sélectionner tout - Visualiser dans une fenêtre à part
    txt =VBA.Left("TOTO",1)

    pour Word, Excel, Fso... pas de référence mais du CreateObject
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Dim fso As Object
    Set fso = CreateObject("Scripting.FileSystemObject")
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Dim Wdr As Object
    Set Wdr = CreateObject("Word.Application")

  4. #4
    Nouveau membre du Club
    Homme Profil pro
    Technicien de laboratoire routier
    Inscrit en
    Novembre 2014
    Messages
    39
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Technicien de laboratoire routier
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Novembre 2014
    Messages : 39
    Points : 32
    Points
    32
    Par défaut
    merci pour vos réponses mais mes connaissances en VBA ne permettent pas de comprendre. Pourriez-vous détailler un petit peu plus, je vous remercie d'avance.

  5. #5
    Invité
    Invité(e)
    Par défaut
    Bonjour,
    comme dit plus haut, Visual Basic For Applications est une référence chargé par défaut, elle ce trouve au choix dans C:\Program Files\ ou C:\Program Files (x86); comme les référence sont incluses dans ton projet VB elle ce retrouve en doublons (Conflit)! toutes le instruction VBA (Trim, Left, Ucase...) font référence à cette dll difficile de ce passer de Visual Basic dans VBA!

    donc on utilisera l'instance VBA qu’excelle aura réellement chargé en mémoire.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    txt =VBA.Left("TOTO",1)
    on évitera dans la mesure du possible de sélectionner de référence dans son projet VBA.

    Code Avec sélection de référence : Sélectionner tout - Visualiser dans une fenêtre à part
    dim Wrd as New  Word.Application
    Code Pas de sélection de référence : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    dim Wrd as Object
    Set Wrd = CreateObject("Word.Application")

  6. #6
    Nouveau membre du Club
    Homme Profil pro
    Technicien de laboratoire routier
    Inscrit en
    Novembre 2014
    Messages
    39
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Technicien de laboratoire routier
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Novembre 2014
    Messages : 39
    Points : 32
    Points
    32
    Par défaut
    Un grand merci pour vos explications.
    j'ai pu appliquer vos précieux conseils sur la partie de macro que j'ai écrite moi-même, ce qui a corrigé mes problèmes concernant la DLL relatifs à Word.
    mais il doit me manquer une subtilité car je n'arrive pas à appliquer ce correctif dans un code j'ai récupéré sur le net pour générer un fichier PDF, la DLL concernant PDF créateur ne pose toujours problème.

  7. #7
    Expert éminent sénior
    Avatar de kiki29
    Homme Profil pro
    ex Observeur CGG / Analyste prog.
    Inscrit en
    Juin 2006
    Messages
    6 132
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : ex Observeur CGG / Analyste prog.

    Informations forums :
    Inscription : Juin 2006
    Messages : 6 132
    Points : 11 274
    Points
    11 274
    Par défaut
    Salut, PDF créateur, PDFCreator , ou PDF Creator ? ceux sont tous des logiciels différents. pour PDFCreator (1.7.3) il n'y pas de problème.

  8. #8
    Nouveau membre du Club
    Homme Profil pro
    Technicien de laboratoire routier
    Inscrit en
    Novembre 2014
    Messages
    39
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Technicien de laboratoire routier
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Novembre 2014
    Messages : 39
    Points : 32
    Points
    32
    Par défaut
    J'utilise PDFCretor 1.7.3,et voici le code que j'utilise pour créer mon PDF:

    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
    Sub pdf()
        AwKN = ActiveWorkbook.Name
        SplitAwKN = Split(AwKN, ".")
        NomFichier = SplitAwKN(0)
     MsgBox NomFichier
     
    '---Imprimer les feuilles Feuil1 et Feuil2-----
      Sheets(Array("Page de garde", "note_technique")).Select
     
      SaveAsPDF NomFichier & " " & Date 'ActiveWorkbook.Name permet de recuper le non du fichier
     
     
     
     
    End Sub
    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
    Sub printtest()
    Dim Wk As Workbook
     
    Dim Repertoire As String
    Dim Sauvegarde As String
    Dim Fichier As String
     
    'où sont les fichiers
    Repertoire = "C:\Users\user\Documents\Developement\Sondage"
    'Où tu veux enregistrer les fichiers pdf
    Sauvegarde = "C:\Users\user\Documents\Developement\Sondage\Teste"
     
    If Dir(Sauvegarde, vbDirectory) = "" Then
    'Évidemment on pourrait ajouter du code pour le créer !
    MsgBox "Le répertoire de sauvegarde est inexistant"
    Exit Sub
    End If
     
    Fichier = Dir(Repertoire & "*.xl*")
     
    Do While Fichier <> ""
    Set Wk = Workbooks.Open(Repertoire & Fichier)
    PrintWorkbookInPdf Wk, Sauvegarde
    Wk.Close False
    Fichier = Dir()
    Loop
    End Sub
    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
    Sub PrintWorkbookInPdf(Wk As Workbook, Sauvegarde As String)
    Dim pdfjob As Object
    Call killtask("PDFCreator.exe")
    Set pdfjob = CreateObject("PDFCreator.clsPDFCreator")
    With pdfjob
    If .cStart("/NoProcessingAtStartup") = False Then
    MsgBox "Can't initialize PDFCreator.", _
    vbCritical + vbOKOnly, "PrtPDFCreator"
    Exit Sub
    End If
    .cOption("UseAutosave") = 1
    .cOption("UseAutisaveDirectory") = 1
    .cOption("AutosaveDirectory") = Sauvegarde
    .cOption("AutosaveFilename") = Wk.Name & ".pdf"
    .cOption("AutosaveFormat") = 0
    .cClearCache
    End With
    Wk.PrintOut copies:=1, ActivePrinter:="PDFCreator"
    Do Until pdfjob.cCountOfPrintjobs = 1
    DoEvents
    Loop
    pdfjob.cPrinterStop = False
    Do Until pdfjob.cCountOfPrintjobs = 0
    DoEvents
    Loop
    With pdfjob
    .cDefaultPrinter = DefaultPrinter
    .cClearCache
    Application.Wait (Now + TimeValue("0:00:03"))
    .cClose
    End With
    Set pdfjob = Nothing
    End Sub
    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
    Sub killtask(sappname As String)
    Dim oProclist As Object
    Dim oWMI As Object
    Dim oProc As Object
    Set oWMI = GetObject("winmgmts:")
    If IsNull(oWMI) = False Then
    Set oProclist = oWMI.InstancesOf("win32_process")
    For Each oProc In oProclist
    If UCase(oProc.Name) = UCase(sappname) Then
    oProc.Terminate (0)
    End If
    Next oProc
    Else
    MsgBox "Killing """ & sappname & _
    """ - Can't create WMI Object.", _
    vbOKOnly + vbCritical, "CloseAPP_B"
    End If
    Set oProclist = Nothing
    Set oWMI = Nothing
    End Sub
    Une partie du code a été trouvé sur internet et pour certaines parties, je ne comprend pas forcément tout.
    Si vous avez un code plus simple pour une impression pdf, n'hésiter pas a me la proposer.
    Merci d'avance

  9. #9
    Expert éminent sénior
    Avatar de kiki29
    Homme Profil pro
    ex Observeur CGG / Analyste prog.
    Inscrit en
    Juin 2006
    Messages
    6 132
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : ex Observeur CGG / Analyste prog.

    Informations forums :
    Inscription : Juin 2006
    Messages : 6 132
    Points : 11 274
    Points
    11 274
    Par défaut
    Salut, pour PDFCreator va jeter un oeil ici

    il y a cette liste qui permet de s'y retrouver dans le bazar/salmigondis

    Sinon si tu as suivi les conseils éclairés de Robert cela devrait suffire : Early ou Late binding

  10. #10
    Nouveau membre du Club
    Homme Profil pro
    Technicien de laboratoire routier
    Inscrit en
    Novembre 2014
    Messages
    39
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Technicien de laboratoire routier
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Novembre 2014
    Messages : 39
    Points : 32
    Points
    32
    Par défaut
    bonjour. Merci de ces informations, je n'ai pas vraiment le temps de tout explorer mais je pense que ces informations Vont me permet de résoudre ce problème je classe donc ce Topic en résolu

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

Discussions similaires

  1. Problème de fenêtre modale sous Windows Seven
    Par MicroPuce dans le forum Interfaces Graphiques en Java
    Réponses: 3
    Dernier message: 18/03/2011, 16h42
  2. Réponses: 0
    Dernier message: 20/12/2010, 15h54
  3. La différence entre windows 7 64 et 32 bits
    Par scaryfan dans le forum Windows 7
    Réponses: 8
    Dernier message: 23/10/2009, 15h44
  4. Réponses: 5
    Dernier message: 16/03/2006, 00h09
  5. Réponses: 2
    Dernier message: 21/10/2004, 15h08

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