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 :

[VBA-E]bloquage sur end function


Sujet :

Macros et VBA Excel

  1. #1
    Membre habitué
    Inscrit en
    Mai 2005
    Messages
    335
    Détails du profil
    Informations forums :
    Inscription : Mai 2005
    Messages : 335
    Points : 196
    Points
    196
    Par défaut [VBA-E]bloquage sur end function
    salut tout le monde

    alors voila le probleme..

    j'ai un bouton
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    butTop = Range("g" & lastline + 7).Top
                butLeft = Range("g" & lastline + 7).Left
                butHeight = Range("g" & lastline + 7).Height
                butWidth = Range("g" & lastline + 7).Width
     
                Set Bouton = ActiveSheet.Buttons.Add(Left:=butLeft, Top:=butTop, Width:=butWidth, Height _
                :=butHeight * 2)
                With Bouton
                    .OnAction = Openfiles(XlsFiles(i))
                    .Caption = "consulter"
                End With
    XlsFiles(i) est le nom du fichier avecsont extention ( test1.xls )

    et une fonction

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    Public Function Openfiles(FileToOpen As String)
    MsgBox FileToOpen
    Workbooks.Open "C:\Documents and Settings\avaysse\Mes documents\" & FileToOpen, , True
    DoEvents
    End Function
    voila... je lance mon code en pas a pas... et je me rend compte quil fait tout se que je lui demande...( ouvrir mon fichier en lecture seule enfait...) et aprivé sur le end function... il renvoi une erreur
    erreur deffini par l'application ou pas l'objet..
    si quelq'un a une idée sur comment corigé sa ...merci
    c'est des choses qui arrivent, c'est la vie...(>_<)!

  2. #2
    Membre régulier
    Avatar de logica
    Profil pro
    Inscrit en
    Mars 2003
    Messages
    160
    Détails du profil
    Informations personnelles :
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations forums :
    Inscription : Mars 2003
    Messages : 160
    Points : 80
    Points
    80
    Par défaut
    Si c'est une fonction, il serait bien de retourner une valeur à cette fonction en typant son nom ...

    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
    Public Function Openfiles(FileToOpen As String) as Boolean
     
    On Error Goto Err_Trait:
     
    Openfiles = True
     
    MsgBox FileToOpen 
    Workbooks.Open "C:\Documents and Settings\avaysse\Mes documents\" & FileToOpen, , True 
    DoEvents 
     
    Exit_Trait:
      Exit function
     
    Err_Trait:
      Openfiles = False
      Msgbox "Erreur " & Err.number
      Goto Exit_Trait
    End Function
    A toi de tester ... mais ça doit marcher ...

    où alors tu convertis dans Function en Sub si elle ne retourne rien ...
    logica

  3. #3
    Membre habitué
    Inscrit en
    Mai 2005
    Messages
    335
    Détails du profil
    Informations forums :
    Inscription : Mai 2005
    Messages : 335
    Points : 196
    Points
    196
    Par défaut
    tu aurais pas une solution dans des "goto" partout stp...
    c'est des choses qui arrivent, c'est la vie...(>_<)!

  4. #4
    Membre régulier
    Avatar de logica
    Profil pro
    Inscrit en
    Mars 2003
    Messages
    160
    Détails du profil
    Informations personnelles :
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations forums :
    Inscription : Mars 2003
    Messages : 160
    Points : 80
    Points
    80
    Par défaut
    Je comprend pas ta question ?

    Mon code présente la gestion d'erreur classique d'un fonction VB ...
    logica

  5. #5
    Membre habitué
    Inscrit en
    Mai 2005
    Messages
    335
    Détails du profil
    Informations forums :
    Inscription : Mai 2005
    Messages : 335
    Points : 196
    Points
    196
    Par défaut
    j'ai quand meme testé ta fonction...

    mais elle plante tout comme la mienne a la diference prés que toi c'est sur je comprend plus trop moi..

    merci

    [EDIT] disons que j'ai un rejet dans l'utilisation du goto.. moin yen a ...mieu je me porte..
    c'est des choses qui arrivent, c'est la vie...(>_<)!

  6. #6
    Responsable
    Office & Excel


    Homme Profil pro
    Formateur et développeur chez EXCELLEZ.net
    Inscrit en
    Novembre 2003
    Messages
    19 122
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 57
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur et développeur chez EXCELLEZ.net
    Secteur : Enseignement

    Informations forums :
    Inscription : Novembre 2003
    Messages : 19 122
    Points : 55 918
    Points
    55 918
    Billets dans le blog
    131
    Par défaut
    Bonjour

    Citation Envoyé par logica
    où alors tu convertis dans Function en Sub si elle ne retourne rien ...
    Une fonction peut être employée et appelée comme une procédure, cela ne pose aucun problème.

    [EDIT] : Mais effectivement, dans le cas présent, il faut que ta fonction renvoie une valeur
    ogenki:

    En testant ta fonction, je ne tombe sur aucune erreur sur End Function.

    Le classeur que tu ouvres avec ta fonction/procédure contient-il une macro à l'ouverture? Il se pourrait que ce soit cela qui pose problème...

    Cela étant, je ne comprends pas l'utilité du "DoEvents" juste avant la fin de ta fonction... : :

    [EDIT]: Ta propriété onaction pour le bouton est une propriété de type string qui doit contenir un nom de procédure valable, ce qui est impossible dans ton cas de figure.

    Tu dois envoyer comme propriété de ton bouton
    Ta proc openfiles ne doit pas accepter de paramètres, et tu dois donc
    utiliser dans cette proc une variable initialisée avec le nom de ton fichier...


    Pierre Fauconnier
    "Plus les hommes seront éclairés, plus ils seront libres" (Voltaire)
    ---------------
    Mes billets de blog sur DVP
    Mes remarques et critiques sont purement techniques. Ne les prenez jamais pour des attaques personnelles...
    Pensez à utiliser les tableaux structurés. Ils vous simplifieront la vie, tant en Excel qu'en VBA ==> mon tuto
    Le VBA ne palliera jamais une mauvaise conception de classeur ou un manque de connaissances des outils natifs d'Excel...
    Ce ne sont pas des bonnes pratiques parce que ce sont les miennes, ce sont les miennes parce que ce sont des bonnes pratiques
    VBA pour Excel? Pensez D'ABORD en EXCEL avant de penser en VBA...
    ---------------

  7. #7
    Expert éminent sénior


    Profil pro
    Inscrit en
    Juin 2003
    Messages
    14 008
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 14 008
    Points : 20 038
    Points
    20 038
    Par défaut
    le plantage à lieu quand ? à l'utilisation ou à la création du bouton ?

    c'est quoi le "i"
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    With Bouton 
                    .OnAction = Openfiles(XlsFiles(i)) 
                    .Caption = "consulter" 
                End With

  8. #8
    Membre habitué
    Inscrit en
    Mai 2005
    Messages
    335
    Détails du profil
    Informations forums :
    Inscription : Mai 2005
    Messages : 335
    Points : 196
    Points
    196
    Par défaut
    Citation Envoyé par bbil
    le plantage à lieu quand ? à l'utilisation ou à la création du bouton ?

    c'est quoi le "i"
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    With Bouton 
                    .OnAction = Openfiles(XlsFiles(i)) 
                    .Caption = "consulter" 
                End With

    le i c'est " test1.xls" ( XlsFiles est un tableau dans lequel je recupere tout les .xls d'un meme repertoire )

    mon bouton est créer mais le caption n'est pas mis...donc je dirai en plin millieu... lol


    je vien de relancé le code en metant exit function a la place du DoEvent

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    Public Function Openfiles(FileToOpen As String)
     
    MsgBox FileToOpen
    Workbooks.Open "C:\Documents and Settings\avaysse\Mes documents\" & FileToOpen, , True
      Exit Function
    End Function
    bin il me renvoi la meme erreur mais sur le exit function... a croire que je ne doit surtout pas sortir de la fonction... lol
    c'est des choses qui arrivent, c'est la vie...(>_<)!

  9. #9
    Expert éminent sénior


    Profil pro
    Inscrit en
    Juin 2003
    Messages
    14 008
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 14 008
    Points : 20 038
    Points
    20 038
    Par défaut
    ben dans le .onAction .. ce n'est pas le résultat de la fonction à exécuter qu'il faut mettre .. mais son nom .. du genre :



    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    .OnAction = "Openfiles("  & XlsFiles(i) & ")"

  10. #10
    Rédacteur/Modérateur

    Avatar de SpaceFrog
    Homme Profil pro
    Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Bidouilleur SharePoint
    Inscrit en
    Mars 2002
    Messages
    39 637
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 74
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Bidouilleur SharePoint
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2002
    Messages : 39 637
    Points : 66 662
    Points
    66 662
    Billets dans le blog
    1
    Par défaut
    non je crois que ça plante sur le click du bouton ...
    Ma page Developpez - Mon Blog Developpez
    Président du CCMPTP (Comité Contre le Mot "Problème" dans les Titres de Posts)
    Deux règles du succès: 1) Ne communiquez jamais à quelqu'un tout votre savoir...
    Votre post est résolu ? Alors n'oubliez pas le Tag

    Venez sur le Chat de Développez !

  11. #11
    Responsable
    Office & Excel


    Homme Profil pro
    Formateur et développeur chez EXCELLEZ.net
    Inscrit en
    Novembre 2003
    Messages
    19 122
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 57
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur et développeur chez EXCELLEZ.net
    Secteur : Enseignement

    Informations forums :
    Inscription : Novembre 2003
    Messages : 19 122
    Points : 55 918
    Points
    55 918
    Billets dans le blog
    131
    Par défaut
    Voir l'édition de mon message précédent pour la solution.

    A savoir:
    onaction doit contenir une valeur texte qui renvoie vers une procédure valide...

    Cette procédure ne doit pas accepter d'arguments et tu dois donc utiliser en son sein une variable initialisée avec le nom de ton fichier

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    Public NomFichier as string
     
    Sub MaProc()
        MonBouton.Onaction = "Openfiles"
        NomFichier = "Fichier.xls"
        ...
    End Sub
     
    Sub OpenFiles()
        workbooks.open "c:..." & nomfichier
        ...
    End Sub
    Ok?

    Pierre Fauconnier
    "Plus les hommes seront éclairés, plus ils seront libres" (Voltaire)
    ---------------
    Mes billets de blog sur DVP
    Mes remarques et critiques sont purement techniques. Ne les prenez jamais pour des attaques personnelles...
    Pensez à utiliser les tableaux structurés. Ils vous simplifieront la vie, tant en Excel qu'en VBA ==> mon tuto
    Le VBA ne palliera jamais une mauvaise conception de classeur ou un manque de connaissances des outils natifs d'Excel...
    Ce ne sont pas des bonnes pratiques parce que ce sont les miennes, ce sont les miennes parce que ce sont des bonnes pratiques
    VBA pour Excel? Pensez D'ABORD en EXCEL avant de penser en VBA...
    ---------------

  12. #12
    Membre habitué
    Inscrit en
    Mai 2005
    Messages
    335
    Détails du profil
    Informations forums :
    Inscription : Mai 2005
    Messages : 335
    Points : 196
    Points
    196
    Par défaut
    Citation Envoyé par bbil
    ben dans le .onAction .. ce n'est pas le résultat de la fonction à exécuter qu'il faut mettre .. mais son nom .. du genre :



    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    .OnAction = "Openfiles("  & XlsFiles(i) & ")"
    je vien de le testé.. il me renvoi la meme erreur.. mais cette foi.. il ne rentre meme pas dans la fonction il plante sur le
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    .OnAction = "Openfiles("  & XlsFiles(i) & ")"
    c'est des choses qui arrivent, c'est la vie...(>_<)!

  13. #13
    Membre habitué
    Inscrit en
    Mai 2005
    Messages
    335
    Détails du profil
    Informations forums :
    Inscription : Mai 2005
    Messages : 335
    Points : 196
    Points
    196
    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
     
               butTop = Range("g" & lastline + 7).Top
                butLeft = Range("g" & lastline + 7).Left
                butHeight = Range("g" & lastline + 7).Height
                butWidth = Range("g" & lastline + 7).Width
     
                Set Bouton = ActiveSheet.Buttons.Add(Left:=butLeft, Top:=butTop, Width:=butWidth, Height _
                :=butHeight * 2)
                With Bouton
                    .OnAction = "Openfiles"
                    .Caption = "consulter"
                End With
    avec le bouton comme sa effectivement sa plante plus dans le code.. mais sa plante sur le click du bouton puisque comme je le pensais si on ne lui donne pas de parametre comment la fonction va faire pour " deviné" de quel .xls il s'agit

    ( je precise que se code est dans une boucle qui s'execute pour tout les .xls d'un repertoire...)
    c'est des choses qui arrivent, c'est la vie...(>_<)!

  14. #14
    Expert éminent sénior


    Profil pro
    Inscrit en
    Juin 2003
    Messages
    14 008
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 14 008
    Points : 20 038
    Points
    20 038
    Par défaut
    Citation Envoyé par ogenki
    Citation Envoyé par bbil
    ben dans le .onAction .. ce n'est pas le résultat de la fonction à exécuter qu'il faut mettre .. mais son nom .. du genre :



    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    .OnAction = "Openfiles("  & XlsFiles(i) & ")"
    je vien de le testé.. il me renvoi la meme erreur.. mais cette foi.. il ne rentre meme pas dans la fonction il plante sur le
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    .OnAction = "Openfiles("  & XlsFiles(i) & ")"
    ?? ben c'est normal qu'il ne rentre pas dans la fonction à la création des boutons ? non ? .... c'est quoi le message d'erreur? ...

  15. #15
    Membre habitué
    Inscrit en
    Mai 2005
    Messages
    335
    Détails du profil
    Informations forums :
    Inscription : Mai 2005
    Messages : 335
    Points : 196
    Points
    196
    Par défaut
    bin toujour la meme
    erreur defini par l'application ou par l'objet..
    si sa peu aidé..je suis sous excel 2003.. voila
    c'est des choses qui arrivent, c'est la vie...(>_<)!

  16. #16
    Responsable
    Office & Excel


    Homme Profil pro
    Formateur et développeur chez EXCELLEZ.net
    Inscrit en
    Novembre 2003
    Messages
    19 122
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 57
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur et développeur chez EXCELLEZ.net
    Secteur : Enseignement

    Informations forums :
    Inscription : Novembre 2003
    Messages : 19 122
    Points : 55 918
    Points
    55 918
    Billets dans le blog
    131
    Par défaut
    Tu dois utiliser une variable externe à ta proc car tu ne peux pas attribuer à un bouton une procédure qui requiert un paramètre...

    Si maintenant du veux créer autant de boutons que tu as de fichiers à ouvrir, c'est un tout autre problème.

    Chaque bouton devrait alors se voir attribuer une procédure qui lui est propre, ce qui est lourd, d'abord, et même parfaitement ingérable...

    Si c'est cela que tu souhaites faire, je crains que ce soit impossible à réaliser, car il me semble qu'il n'y a pas moyen de détecter sur quel bouton tu viens de cliquer (je suppose que ce sont des boutons de formulaire que tu crées...).

    Pourquoi ne pas créer une liste des fichiers dans des cellules Excel, puis utiliser openfiles en récupérant la valeur de la cellule active...??

    Il serait peut-être intéressant que tu expliques la finalité de ton projet pour que l'on puisse t'aider.

    Pierre Fauconnier
    "Plus les hommes seront éclairés, plus ils seront libres" (Voltaire)
    ---------------
    Mes billets de blog sur DVP
    Mes remarques et critiques sont purement techniques. Ne les prenez jamais pour des attaques personnelles...
    Pensez à utiliser les tableaux structurés. Ils vous simplifieront la vie, tant en Excel qu'en VBA ==> mon tuto
    Le VBA ne palliera jamais une mauvaise conception de classeur ou un manque de connaissances des outils natifs d'Excel...
    Ce ne sont pas des bonnes pratiques parce que ce sont les miennes, ce sont les miennes parce que ce sont des bonnes pratiques
    VBA pour Excel? Pensez D'ABORD en EXCEL avant de penser en VBA...
    ---------------

  17. #17
    Membre habitué
    Inscrit en
    Mai 2005
    Messages
    335
    Détails du profil
    Informations forums :
    Inscription : Mai 2005
    Messages : 335
    Points : 196
    Points
    196
    Par défaut
    sur ce projet se n'est pas la premiere fonction ou j'utilise le nom du fichier en paramentre... et sa a tres bien marché pour les autres.. dailleur je v surement reprendre la meme forme de code...


    enfait je liste les .xls... et je fait un bouton chaqun pour les ouvrir en lecture seule.. c'est tout;. lol
    c'est des choses qui arrivent, c'est la vie...(>_<)!

  18. #18
    Inactif  
    Avatar de ouskel'n'or
    Profil pro
    Inscrit en
    Février 2005
    Messages
    12 464
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 12 464
    Points : 15 543
    Points
    15 543
    Par défaut
    Déjà, tu ne peux pas dire On action "une fonction" Donc, mets plutôt

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    Public Sub Openfiles(FileToOpen) 
         MsgBox FileToOpen 
         Workbooks.Open "C:\Documents and Settings\avaysse\Mes documents\" & FileToOpen, , True 
         DoEvents 
    End Sub
    De toutes façon, attends-tu quelque chose dans le click du bouton au retour de ta fonction ?

    A+

    Edit
    Extrait de l'aide pour onaction
    Renvoie ou définit le nom d'une macro exécutée quand l'objet spécifié est sélectionné. Type de données String en lecture-écriture.

  19. #19
    Membre habitué
    Inscrit en
    Mai 2005
    Messages
    335
    Détails du profil
    Informations forums :
    Inscription : Mai 2005
    Messages : 335
    Points : 196
    Points
    196
    Par défaut
    je vien de faire un truc magnifique... mais qui marche....
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    butTop = Range("g" & lastline + 7).Top
                butLeft = Range("g" & lastline + 7).Left
                butHeight = Range("g" & lastline + 7).Height
                butWidth = Range("g" & lastline + 7).Width
     
                Set Bouton = ActiveSheet.Buttons.Add(Left:=butLeft, Top:=butTop, Width:=butWidth, Height _
                :=butHeight * 2)
                With Bouton
                    .OnAction = "Openfiles"
                    .Name = XlsFiles(i)
                    .Caption = "consulter"
                End With
    avec en fonction
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    Public Function Openfiles()
    Dim FileToOpen
    FileToOpen = Application.Caller
    MsgBox FileToOpen
    Workbooks.Open "C:\Documents and Settings\avaysse\Mes documents\" & FileToOpen, , True
      Exit Function
    End Function
    donc voila se jolie code "marche " et non en meme temp.. enfait il fonctionne pour tout mes .xls sauf le dernier...

    j'ai une idée de pourquoi sa marche pas.. je vous tien au courant..
    c'est des choses qui arrivent, c'est la vie...(>_<)!

  20. #20
    Inactif  
    Avatar de ouskel'n'or
    Profil pro
    Inscrit en
    Février 2005
    Messages
    12 464
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 12 464
    Points : 15 543
    Points
    15 543
    Par défaut
    Hello Ogenki,
    Tu pourrais essayer mon code, il est plus simple... s'il fonctionne...
    Et en plus, j'aurais ma réponse : Ça marche / Ça marche pas...

    A+

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 2 12 DernièreDernière

Discussions similaires

  1. Erreur sur ''End Function''
    Par Prog-Flo93 dans le forum VB.NET
    Réponses: 2
    Dernier message: 03/04/2011, 11h29
  2. [VBA-E] Pb sur la key d'une collection
    Par niro75 dans le forum Macros et VBA Excel
    Réponses: 5
    Dernier message: 24/10/2005, 20h06
  3. [VBA-E] Question sur la méthode "SaveAs"
    Par Flateric dans le forum Macros et VBA Excel
    Réponses: 7
    Dernier message: 25/04/2005, 14h18
  4. [ServerSocket] Problème de bloquage sur readLine()
    Par thomaswilliamson dans le forum Entrée/Sortie
    Réponses: 10
    Dernier message: 15/03/2005, 11h15
  5. [VBA-E] Pb sur gestion des erreurs
    Par micoscas dans le forum Macros et VBA Excel
    Réponses: 19
    Dernier message: 08/03/2005, 17h08

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