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ème simple - appel d'une fonction


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre habitué
    Inscrit en
    Août 2008
    Messages
    13
    Détails du profil
    Informations forums :
    Inscription : Août 2008
    Messages : 13
    Par défaut Problème simple - appel d'une fonction
    Bonjour,
    J'ai un petit problème avec VBA que je trouive très bête mais j'arrive pas à savoir d'où ça vient. Voilà, en fait j'ai une fonction Fichier_excel et il ne veut tout simplement pas y aller .
    Voici mon code :
    (désolé je n'ai pas truové la balise code, mais c'est quand même pas indigeste si?)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    fichier = "E:\Mantis\_excel.xls"
      Workbooks.Open Filename:=fichier
     
      Fichier_excel
     
      ActiveWindow.Close SaveChanges:=True
    (une fontion)
    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
    Function Fichier_excel()  (<- y va pas
     
       Range("E1").Select
        
        For i = 3 To k
        Date = Range("E" & CStr(i)).Value
            If Mid(Date, 7, 8) <= AnFin And Mid(Date, 7, 8) >= AnDeb Then
              If Mid(Date, 4, 5) <= MoisFin And Mid(Date, 4, 5) >= MoisDeb Then
                 If Right(Date, 2) <= JourFin And Right(Date, 2) >= JourDeb Then
                            Range("A" & CStr(i)).Select = Id(i)
                   Else: Range("E" & CStr(i)).EntireRow.Delete
                   End If
               Else: Range("E" & CStr(i)).EntireRow.Delete
               End If
            Else: Range("E" & CStr(i)).EntireRow.Delete
            End If
         Next i

    Merci de m'aider.

  2. #2
    Inactif  

    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    4 555
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 4 555
    Par défaut
    Bonjour,

    1)Présente s'il te plait ton code :
    - avec les balises code
    - avec ses procédures complètes (depuis le début jusqu'à ... end sun ou end function)

    2) et dis nous où tu as écrit chaque procédure ou fonction
    3) une "fonction" qui ne prend pas de paramètre(s) et ne retourne pas une valeur n'est pas une fonction ! (fais-en une simple routine)

  3. #3
    Membre habitué
    Inscrit en
    Août 2008
    Messages
    13
    Détails du profil
    Informations forums :
    Inscription : Août 2008
    Messages : 13
    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
    Private Sub CommandButton1_Click()
     'récupération des paramètres entrés par l'utilisateur
        JourDeb = ComboBox2.Value
        JourFin = ComboBox4.Value
        MoisDeb = ComboBox1.Value
        MoisFin = ComboBox5.Value
        AnDeb = ComboBox3.Value
        AnFin = ComboBox6.Value
        'Fermeture du formulaire
        Unload UserForm1
        
        'ouverture du fichier excel
        fichier = "E:\Mantis\_excel.xls"
        Workbooks.Open Filename:=fichier
        Fichier_excel aie
    
            
        ActiveWindow.Close SaveChanges:=True
        
    End Sub
    (une fonction)

    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
    Function Fichier_excel()
     
        Range("E1").Select
     
            For i = 3 To k ' k est le numero de la dernière ligne
            Date = Range("E" & CStr(i)).Value
                If Mid(Date, 7, 8) <= AnFin And Mid(Date, 7, 8) >= AnDeb Then
                    If Mid(Date, 4, 5) <= MoisFin And Mid(Date, 4, 5) >= MoisDeb Then
                        If Right(Date, 2) <= JourFin And Right(Date, 2) >= JourDeb Then
                            Range("A" & CStr(i)).Select = Id(i)
                        Else: Range("E" & CStr(i)).EntireRow.Delete
                        End If
                    Else: Range("E" & CStr(i)).EntireRow.Delete
                    End If
                Else: Range("E" & CStr(i)).EntireRow.Delete
                End If
            Next i
    End Function
    Où j'ai écrit ces procédures? comment ça? Elles sont dans un classeur excel.
    Et j'ai essayé avec un Sub si le mot "routine" y fait référence et ça ne marche pas.

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

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

    Informations forums :
    Inscription : Août 2007
    Messages : 2 403
    Par défaut
    Où j'ai écrit ces procédures? comment ça? Elles sont dans un classeur excel.
    Et j'ai essayé avec un Sub si le mot "routine" y fait référence et ça ne marche pas.
    Bien sûr dans un classeur excel, quoi d'autre !!.

    Mais la question est :
    * Ta fonction (qui ne devrait pas en entre une car elle n'a pas de parm et ne retourne rien et devrait donc etre un SUB, eh oui) est-elle dans un module our dans une feuille (sheet). ?

  5. #5
    Membre habitué
    Inscrit en
    Août 2008
    Messages
    13
    Détails du profil
    Informations forums :
    Inscription : Août 2008
    Messages : 13
    Par défaut
    Hey je viens de débarquer en VBA alors un peu de patience et beaucoup d'explications s'il vuos plaît
    Il semblerait que ce soit une feuille. J'ai changé ma fonction en Sub.

  6. #6
    Membre Expert Avatar de wilfried_42
    Homme Profil pro
    Auto-entrepreneur
    Inscrit en
    Novembre 2006
    Messages
    1 427
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : France, Vendée (Pays de la Loire)

    Informations professionnelles :
    Activité : Auto-entrepreneur
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2006
    Messages : 1 427
    Par défaut
    Bonjour à tous

    personnellement, dans ThisWorkBook ou dans les feuilles, je n'utilise que les procedures evennementielles
    les autres procedures, je les gere dans des modules standard

    Il semblerait (j'en suis sur), que tu utilises une UserForm, pour saisir tes bornes par contre :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
        JourDeb = ComboBox2.Value
        JourFin = ComboBox4.Value
        MoisDeb = ComboBox1.Value
        MoisFin = ComboBox5.Value
        AnDeb = ComboBox3.Value
        AnFin = ComboBox6.Value
    en rouge à quoi correspondent ces variables, elles sont utilisée dans la 2eme procedure, mais je ne trouve aucun lien
    si tu traites des dates, recompose les et gere que 2 variables Date_deb et Date_fin
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    date_deb = datevalue(ComboBox2.Value & "/" & combobox1.value & "/" & combobox3.value)
    date_fin = datevalue(ComboBox4.Value & "/" & combobox5.value & "/" & combobox6.value)
    dans un module, la premiere ligne
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    public date_deb as date, date_fin as date
    à ce moment, tes 2 variable date, sont utilisables dans tout ton projet, quelque soit l'endroit ou tu te trouves

    Pourquoi un sub plutot qu'une fonction
    non seulement une fonction renvoie une valeur, mais aussi elle ne peut en aucun cas travailler sur des mises à jour d'objet
    les Select interdits
    les entirerow.delete interdits
    les range("C1") = "Ok" : interdit
    les Range("C1").interior.colorindex = 3 : interdits
    et bien d'autres mise à jour

Discussions similaires

  1. Réponses: 16
    Dernier message: 30/01/2008, 15h27
  2. [POO] problème d'appel d'une fonction php
    Par merlubreizh dans le forum Langage
    Réponses: 4
    Dernier message: 26/03/2007, 17h28
  3. problème d'appel d'une fonction d'une autre classe
    Par kifouillou dans le forum Langage
    Réponses: 5
    Dernier message: 08/02/2007, 17h42
  4. [Système] Problème d'appel d'une fonction
    Par Ministar dans le forum Langage
    Réponses: 8
    Dernier message: 19/09/2006, 22h23
  5. Réponses: 7
    Dernier message: 12/03/2006, 21h18

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