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 :

Variables qui jouent à cache - cache [XL-2013]


Sujet :

Macros et VBA Excel

  1. #1
    Membre confirmé
    Homme Profil pro
    Inscrit en
    Août 2012
    Messages
    187
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Août 2012
    Messages : 187
    Par défaut Variables qui jouent à cache - cache
    Bonjour,

    Je souhaite ouvrir un fichier protégé par un mot de passe sans l'afficher.
    Le fichier ne s'affiche pas, cependant, pour une raison que je ne comprends pas, il me demande d'entrer le mot de passe, malgré le paramètre Password. Qu'est-ce qui n'est pas d'équerre ?
    Par ailleurs, j'imagine utiliser ce code pour ouvrir le fichier

    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
     
    Function OpenFileExcel()
    Dim appxl As Excel.Application
    Dim FichNumero As String, FichCopie As String
    Set appxl = CreateObject("Excel.application")
     
        If FichierExiste("C:\WinBooks\Office\160302 - Numerotation des ordres de paiements bancaires.xlsx") Then
            FichNumero = "C:\WinBooks\Office\160302 - Numerotation des ordres de paiements bancaires.xlsx"
            FichCopie = "C:\WinBooks\Office\Copie - Numerotation des ordres de paiements bancaires.xlsx"
        ElseIf FichierExiste("d:\Dossiers\DOCUMENTS GENERAUX\Sur mesure - originaux\Habari Kani\160302 - Numerotation des ordres de paiements bancaires.xlsx") Then
            FichNumero = "d:\Dossiers\DOCUMENTS GENERAUX\Sur mesure - originaux\Habari Kani\160302 - Numerotation des ordres de paiements bancaires.xlsx"
            FichCopie = "d:\Dossiers\DOCUMENTS GENERAUX\Sur mesure - originaux\Habari Kani\Copie - Numerotation des ordres de paiements bancaires.xlsx"
        Else
            MsgBox ("Ce fichier n'existe pas")
        End If
     
    With appxl
        .ScreenUpdating = False
        .Visible = False
        .Workbooks.Open Filename:=FichNumero, Password:="160302"
     
    End With
     
    End Function
    et ce code pour le fermer

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    Function CloseFileExcel()
        appxl.Workbooks(FichNumero).Save
        appxl.Workbooks(FichNumero).Close
     
        Set appxl = Nothing
        FileCopy FicheNumero, FichCopie
     
    End Function
    Deux questions :
    Les variables FichNumero et FichCopie ne suivent pas de OpenFcileExcel à CloseFileExcel. Que faut-il faire pour qu'une variable soit reconnue d'une fonction à une sub ou à une autre fonction ? Même en les déclarant publiques, elles ne sont pas visibles.
    En outre, cette fonction ne sauve ni ferme rien du tout, même pas les processus d'Excel ouverts.

    Une idée de l'erreur ?

    D'avance merci de prendre la peine de corriger mes incompétences et bonne journée !

    Henri

  2. #2
    Invité
    Invité(e)
    Par défaut
    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
    public FichNumero As String, appxl As Excel.Application,FichCopie As String
    Function OpenFileExcel()
    Set appxl = CreateObject("Excel.application")
     
        If FichierExiste("C:\WinBooks\Office\160302 - Numerotation des ordres de paiements bancaires.xlsx") Then
            FichNumero = "C:\WinBooks\Office\160302 - Numerotation des ordres de paiements bancaires.xlsx"
            FichCopie = "C:\WinBooks\Office\Copie - Numerotation des ordres de paiements bancaires.xlsx"
        ElseIf FichierExiste("d:\Dossiers\DOCUMENTS GENERAUX\Sur mesure - originaux\Habari Kani\160302 - Numerotation des ordres de paiements bancaires.xlsx") Then
            FichNumero = "d:\Dossiers\DOCUMENTS GENERAUX\Sur mesure - originaux\Habari Kani\160302 - Numerotation des ordres de paiements bancaires.xlsx"
            FichCopie = "d:\Dossiers\DOCUMENTS GENERAUX\Sur mesure - originaux\Habari Kani\Copie - Numerotation des ordres de paiements bancaires.xlsx"
        Else
            MsgBox ("Ce fichier n'existe pas")
        End If
     
    With appxl
        .ScreenUpdating = False
        .Visible = False
        .Workbooks.Open Filename:=FichNumero, Password:="160302"
     
    End With
     
    End Function
     
    Function CloseFileExcel()
        appxl.Workbooks(FichNumero).Save
        appxl.Workbooks(FichNumero).Close
     
        Set appxl = Nothing
        FileCopy FicheNumero, FichCopie
     
    End Function

  3. #3
    Membre confirmé
    Homme Profil pro
    Inscrit en
    Août 2012
    Messages
    187
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Août 2012
    Messages : 187
    Par défaut
    Bonjour rdurupt,

    Merci pour la réponse.

    Tout d'abord, concernant le mot de passe, j'ai pu remarquer ceci.
    Si d'autres feuilles Excel sont ouvertes simultanément avec mon fichier XLTM, il me demande d'entrer le mot de passe.
    Comme la macro se comportait de manière complètement incompréhensible, j'ai décidé de fermer complètement Excel, y compris dans la colonne détail du gestionnaire de tâches où, après avoir tout fermé, j'ai trouvé deux occurrences d'Excel ouvertes.

    Lors du redémarrage suivant, uniquement avec le fichier XLTM d'ouvert, il ne m'a plus demandé le mot de passe. Par contre, il se plante toujours avec le message Erreur d'exécution n°9. L'indice n'appartient pas à la sélection et cela sur la ligne :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    appxl.Workbooks(FichNumero).Save
    Une idée ? Soyez-en remercié

    Bien à vous

    Henri

  4. #4
    Invité
    Invité(e)
    Par défaut
    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
    public FichNumero As String, appxl As Excel.Application,FichCopie As String
    Poblic Wb as Workbook 'ici on déclare un objet Workbook afin de pouvoir le traité par la suite! 
    Function OpenFileExcel()
    Set appxl = CreateObject("Excel.application")
     
        If FichierExiste("C:\WinBooks\Office\160302 - Numerotation des ordres de paiements bancaires.xlsx") Then
            FichNumero = "C:\WinBooks\Office\160302 - Numerotation des ordres de paiements bancaires.xlsx"
            FichCopie = "C:\WinBooks\Office\Copie - Numerotation des ordres de paiements bancaires.xlsx"
        ElseIf FichierExiste("d:\Dossiers\DOCUMENTS GENERAUX\Sur mesure - originaux\Habari Kani\160302 - Numerotation des ordres de paiements bancaires.xlsx") Then
            FichNumero = "d:\Dossiers\DOCUMENTS GENERAUX\Sur mesure - originaux\Habari Kani\160302 - Numerotation des ordres de paiements bancaires.xlsx"
            FichCopie = "d:\Dossiers\DOCUMENTS GENERAUX\Sur mesure - originaux\Habari Kani\Copie - Numerotation des ordres de paiements bancaires.xlsx"
        Else
            MsgBox ("Ce fichier n'existe pas")
        End If
     
    With appxl
        .ScreenUpdating = False
        .Visible = False
       set wb= .Workbooks.Open Filename:=FichNumero, Password:="160302"
     
    End With
     
    End Function
     
    Function CloseFileExcel()
        Wb.Save
        Wb.Close 
     
        Set appxl = Nothing
        FileCopy FicheNumero, FichCopie
     
    End Function

  5. #5
    Membre confirmé
    Homme Profil pro
    Inscrit en
    Août 2012
    Messages
    187
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Août 2012
    Messages : 187
    Par défaut
    Il me donne une erreur de syntaxe ou de compilation lorsque j'entre la commande set wb telle que vous me la proposez.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    With appxl
        .ScreenUpdating = False
        .Visible = False
        set wb=.Workbooks.Open Filename:=FichNumero, Password:="160302"
     
    End With

  6. #6
    Invité
    Invité(e)
    Par défaut
    sans doute parce que j'ai tenté un innovation, j'ai écris Poblic et ça n'existe pas!


  7. #7
    Membre confirmé
    Homme Profil pro
    Inscrit en
    Août 2012
    Messages
    187
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Août 2012
    Messages : 187
    Par défaut
    Non, non, ça, j'avais corrigé la coquille... Ce doit être autre chose...

  8. #8
    Invité
    Invité(e)
    Par défaut
    il semblerait que la fatigue ou l'age me gane!
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    With appxl
        .ScreenUpdating = False
        .Visible = False
        set wb=.Workbooks.Open( Filename:=FichNumero, Password:="160302")
     
    End With

  9. #9
    Membre confirmé
    Homme Profil pro
    Inscrit en
    Août 2012
    Messages
    187
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Août 2012
    Messages : 187
    Par défaut
    Ben, j'espère que c'est la fatigue, ça laisse moins de traces que l'âge... :-)

    Donc, ça fonctionne, merci beaucoup, on avance, je suis content, mais...

    Je suppose que le fichier s'ouvre (en tout cas ça ne se plante plus, ni à l'ouverture, ni à la fermeture).
    Je ne l'ouvre pas juste pour faire du vent, je l'ouvre pour y appliquer un traitement qui finit par ajouter à la suite des précédentes 1 ligne de 4 cellules.
    Hors, mes 4 cellules s'ajoutent à mon fichier XLTM qui n'est ouvert que pour travailler la macro en attendant d'en faire un XLAM.

    Comment lui dire qu'il se trompe de cible ?

    Bien à vous et merci pour la première solution.

    Henri

  10. #10
    Invité
    Invité(e)
    Par défaut
    la je vais écrire le code en abrégé, a toi de 'adapter !

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    set wb=.Workbooks.add(FichNumero, Password:="160302")
    'traitement 
    wb.saveAs FichierCible

  11. #11
    Membre confirmé
    Homme Profil pro
    Inscrit en
    Août 2012
    Messages
    187
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Août 2012
    Messages : 187
    Par défaut
    Bonjour,

    Merci pour votre proposition de solution, mais il y a un petit souci à son application.
    Compliqué à expliquer, je vous ai fait une petite vidéo commentée.
    Malheureusement, le fichier qui ne fait que 4,5 Mb est considéré comme trop grand par Developpez.com. Puis-je vous l'envoyer à une adresse mail ?
    Merci pour votre compréhension. Désolé d'être un peu "dur de comprenure", mais j'apprends petit à petit.

    Bien à vous

    Henri

  12. #12
    Invité
    Invité(e)

  13. #13
    Membre confirmé
    Homme Profil pro
    Inscrit en
    Août 2012
    Messages
    187
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Août 2012
    Messages : 187
    Par défaut
    Le voici : http://www.cjoint.com/c/FCikvXxhSmL

    Très pratique comme adresse, merci.

    Henri

  14. #14
    Invité
    Invité(e)
    Par défaut
    Ok effectivement Excel ne peut pas créer de nouveau ficher selon un modèle avec mot de passe!

    il faut donc se résoudre à l’ouvrir de façon classique et de l'enregistre sous!

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    set wb=.Workbooks.open(FichNumero, Password:="160302")
    'traitement 
    wb.saveAs FichierCible

  15. #15
    Membre confirmé
    Homme Profil pro
    Inscrit en
    Août 2012
    Messages
    187
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Août 2012
    Messages : 187
    Par défaut
    D'accord, mais quand j'utilise ce code il n'écrit pas dans le fichier que je viens d'ouvrir mais dans le fichier XLTM qui contient la macro.
    Comment lui dire d'écrire dans le bon fichier ?

  16. #16
    Invité
    Invité(e)
    Par défaut
    oui mais comme tu l'enregistre sous il prend le nom de FichierCible

  17. #17
    Membre confirmé
    Homme Profil pro
    Inscrit en
    Août 2012
    Messages
    187
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Août 2012
    Messages : 187
    Par défaut
    Voici encore un petit film, selon le principe qu'un petit dessin (animé) vaut mieux qu'un long discours.

    http://www.cjoint.com/c/FCinsy1u85J

    Voici le code tel qu'il est maintenant:

    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
     
    Function OpenFileExcel()
    Set appxl = CreateObject("Excel.application")
     
        If FichierExiste("C:\WinBooks\Office\160302 - Habari Kani - Numerotation des ordres de paiements bancaires.xlsx") Then
            FichNumero = "C:\WinBooks\Office\160302 - Habari Kani - Numerotation des ordres de paiements bancaires.xlsx"
            FichCopie = "C:\WinBooks\Office\Copie - Habari Kani - Numerotation des ordres de paiements bancaires.xlsx"
        ElseIf FichierExiste("d:\Dossiers\DOCUMENTS GENERAUX\Sur mesure - originaux\Habari Kani\160302 - Habari Kani - Numerotation des ordres de paiements bancaires.xlsx") Then
            FichNumero = "d:\Dossiers\DOCUMENTS GENERAUX\Sur mesure - originaux\Habari Kani\160302 - Habari Kani - Numerotation des ordres de paiements bancaires.xlsx"
            FichCopie = "d:\Dossiers\DOCUMENTS GENERAUX\Sur mesure - originaux\Habari Kani\Copie - Habari Kani - Numerotation des ordres de paiements bancaires.xlsx"
        Else
            MsgBox ("Ce fichier n'existe pas")
        End If
     
    With appxl
        .ScreenUpdating = False
        .Visible = False
        Set Wb = .Workbooks.Open(Filename:=FichNumero, Password:="160302")
     
    End With
     
    End Function
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    Function CloseFileExcel()
    'Debug.Print FichNumero
     
        Wb.Save
        Wb.Close
     
        Set appxl = Nothing
        FileCopy FichNumero, FichCopie
     
    End Function
    Le Wb.saveAs quant à lui, n'apporte aucune solution.

    Encore merci pour votre patience.

    Henri

  18. #18
    Modérateur
    Avatar de AlainTech
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Mai 2005
    Messages
    4 235
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 71
    Localisation : Belgique

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : Finance

    Informations forums :
    Inscription : Mai 2005
    Messages : 4 235
    Par défaut
    Bonjour,

    Question (qui me parait) fondamentale: Pourquoi ouvrir une deuxième instance d'Excel?
    N'oubliez pas de cliquer sur quand vous avez obtenu ou trouvé vous-même la réponse à votre question.
    Si vous trouvez seul, pensez à poster votre solution. Elle peut servir à d'autres!
    Pensez aussi à voter pour les réponses qui vous ont aidés.
    ------------
    Je dois beaucoup de mes connaissances à mes erreurs!

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

Discussions similaires

  1. Des entrées qui jouent à cache-cache ?
    Par Pauloscorps dans le forum Requêtes
    Réponses: 2
    Dernier message: 16/10/2013, 12h14
  2. Réponses: 4
    Dernier message: 06/09/2006, 14h50
  3. Réponses: 2
    Dernier message: 06/09/2006, 14h27
  4. Site internet qui met en cache les pages web
    Par LFC dans le forum Général Conception Web
    Réponses: 2
    Dernier message: 07/06/2006, 10h10
  5. Réponses: 3
    Dernier message: 27/07/2005, 15h12

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