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 :

Procédure trop grande et With [XL-2010]


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2017
    Messages
    36
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 29
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2017
    Messages : 36
    Par défaut Procédure trop grande et With
    Bonjour,

    Je suis victime de "Procédure trop grande" :
    Et, il se trouve que la quasi totalité de mon code se trouve dans un :
    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
    With Workbooks.Add
     
                        .Worksheets(m + 1).Cells(b, 3).Value = ""
                        .Worksheets(m + 1).Cells(b, 4).Value = ""
                        .Worksheets(m + 1).Cells(b, 5).Value = ""
                        .Worksheets(m + 1).Cells(b, 6).Value = ""
                        .Worksheets(m + 1).Cells(b, 7).Value = ""
                        .Worksheets(m + 1).Cells(b, 8).Value = ""
                        .Worksheets(m + 1).Cells(b, 9).Value = ""
                        .Worksheets(m + 1).Cells(b, 10).Value = ""
                        .Worksheets(m + 1).Cells(b, 11).Value = ""
                        .Worksheets(m + 1).Cells(b, 12).Value = ""
                        .Worksheets(m + 1).Cells(b, 13).Value = ""
     
    End With
    Du coup en le passant sous une Function et en déclarant mes variables m et b en global, j'ai un problème avec la façon dont j'exprime mon Workbook.
    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
     
    Sub MonPrgm() 
    With Workbooks.Add
     
                        Call coucou
    End With
    End Sub
     
    Function coucou()
                        .Worksheets(m + 1).Cells(b, 3).Value = ""
                        .Worksheets(m + 1).Cells(b, 4).Value = ""
                        .Worksheets(m + 1).Cells(b, 5).Value = ""
                        .Worksheets(m + 1).Cells(b, 6).Value = ""
                        .Worksheets(m + 1).Cells(b, 7).Value = ""
                        .Worksheets(m + 1).Cells(b, 8).Value = ""
                        .Worksheets(m + 1).Cells(b, 9).Value = ""
                        .Worksheets(m + 1).Cells(b, 10).Value = ""
                        .Worksheets(m + 1).Cells(b, 11).Value = ""
                        .Worksheets(m + 1).Cells(b, 12).Value = ""
                        .Worksheets(m + 1).Cells(b, 13).Value = ""
    End Function
    Il m'affiche le message d'erreur suivant :
    Erreur de Compilation
    Référence incorrecte ou non qualifiée

    En regardant l'aide je vois bien que c'est à cause du . qui est devant que l'on ne peut utiliser que dans un bloc with.
    Du coup je ne sais pas comment faire parce que je souhaiterais continuer à réaliser des opérations sur ce document que j'ai add plus haut.

    Et vous vous doutez bien que si ma procédure est trop grande, c'est que je recherche un moyen sans changer toute la structure de mon code.

    En vous remerciant,

    EDIT : Sinon est-ce que la capacité d'une fonction est elle plus "grande" que celle d'un Sub ?
    Parce que j'peux tout mettre dans la Fonction coucou au pire..

  2. #2
    Invité
    Invité(e)
    Par défaut
    Bonjour,

    le . sous entant un With or dans Coucou je n'en vois pas!

    Workbooks.Add ajoute une page vierge! doc quel intérêt de .Worksheets(m + 1).Cells(b, 3).Value = "" pour un feuille M + 1 qui n'existe peut être pas ?

  3. #3
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2017
    Messages
    36
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 29
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2017
    Messages : 36
    Par défaut
    Merci de ta réponse rapide !

    Si tu veux ma procédure marche à merveille, donc ne te fais pas de soucis sur les indices ! On m'a demandé de rajouter quelques lignes pour faire des tests supplémentaires.

    Donc selon toi, il faudrait que dans ma Function coucou(), j'arrive à récupérer mon Workbook.Add

    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
     
    Sub MonPrgm() 
    With Workbooks.Add
                .SaveAs ("monchemin\Fichiers par service\" & listeservice(i) & ".xls")
     
                'un tas d'action sur mon Workbooks.Add
     
                Call coucou
     
    End Sub
     
    Function coucou()
              With Workbook("monchemin\Fichiers par service\" & listeservice(i) & ".xls")
     
     
     
              End With
    End Function
    En essayant ce genre de chose (j'ai bien sûr déclaré ma listeservice et mon i en global), je n'arrive pas à récupérer la feuille...

  4. #4
    Membre Expert
    Profil pro
    Inscrit en
    Février 2007
    Messages
    2 266
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 2 266
    Par défaut
    Bonjour,

    au-delà des remarques justifiées de dysorthographie (comment pourrait-on deviner la valeur de m et le nombre de feuilles de tes classeurs créés ?) de toute façon une fonction retourne une valeur et ne peut en aucune façon aller modifier une autre cellule.
    Il faut le faire dans un sub.
    Un classeur neuf étant par définition vide quel est l'intérêt d'aller en vider des cellules ???
    En supposant que ce soit utile pourquoi les vider une par une plutôt que toute la plage en une fois ?
    eric

  5. #5
    Inactif  

    Homme Profil pro
    cuisiniste
    Inscrit en
    Avril 2009
    Messages
    15 374
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : cuisiniste
    Secteur : Bâtiment

    Informations forums :
    Inscription : Avril 2009
    Messages : 15 374
    Billets dans le blog
    8
    Par défaut re
    Bonjour je rejoins erric sur ce coup la

    d'autant plus que l'argument ne devrait pas etre le WB mais le WB.sheets("xxxxx") pour un ".range)
    mes fichiers dans les contributions:
    mail avec CDO en vba et mail avec CDO en vbs dans un HTA
    survol des bouton dans userform
    prendre un cliché d'un range

    si ton problème est résolu n'oublie pas de pointer : : ça peut servir aux autres
    et n'oublie pas de voter

  6. #6
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2017
    Messages
    36
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 29
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2017
    Messages : 36
    Par défaut
    Bonjour,

    Ma procédure étant trop longue, j'ai mis un peu n'importe quoi dans mon With !
    Bien sûr que ça n'a pas beaucoup d'intérêt de supprimer des cases d'une page qui est déjà vide.

    La question était surtout portée sur l'utilisation d'une fonction à l'intérieur d'un With !

    En ravanche
    ne peut en aucune façon aller modifier une autre cellule.
    Pourtant c'est bien ce que je fais faire à mon programme, et ça marche à merveille..
    Comment cela se fait-il ?

    En vous remerciant,

    Merci

  7. #7
    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
    Sub MonPrgm()
    Dim wb As Workbook
    Set wb = Workbooks.Add
    With wb
                .SaveAs ("monchemin\Fichiers par service\" & listeservice(i) & ".xls")
     
                'un tas d'action sur mon Workbooks.Add
     
                Call coucou(wb)
     
    End Sub
     
    Function coucou(ByRef wb As Workbook)
              With wb
     
     
     
              End With
    End Function

  8. #8
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2017
    Messages
    36
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 29
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2017
    Messages : 36
    Par défaut
    Merci beaucoup : dysorthographie

    Résolu

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

Discussions similaires

  1. [XL-2003] Procédure trop grande
    Par direct83 dans le forum Macros et VBA Excel
    Réponses: 6
    Dernier message: 11/06/2012, 10h56
  2. procédure trop grande?
    Par cchampion2fr dans le forum Macros et VBA Excel
    Réponses: 7
    Dernier message: 07/10/2008, 17h19
  3. procédure trop grande
    Par Selune6666 dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 06/02/2008, 18h21
  4. Diviser une procédure trop grande
    Par tenaka69 dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 31/08/2007, 09h45
  5. Procédure trop grande
    Par bobie dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 13/08/2007, 14h30

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