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]Problème de longueur de macro sous VBA [E]


Sujet :

Macros et VBA Excel

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    4
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 4
    Par défaut [VBA-E]Problème de longueur de macro sous VBA [E]
    Bonjour à tous,

    Je suis tout novice en programmation et j'ai un problème de longueur de macro sous VBA excel.
    L'objectif de cette maco est de créer à partir d'un ensemble de feuille excel une base de donnée qui recueille l'ensemble des données médicales issues de ces feuilles. L'ensemble de ces feuilles est toujours construit de la même manière. J'ai donc créé ma macro qui fonctionne sur deux feuilles mais dès que je passe sur la troisième feuille : une erreur de longueur de procédure vient bloquer la macro.

    Je vous joins le fichier pour votre éventuelle aide ainsi que ma macro.
    Je vous rappelle que je suis novice voir inexpérimenté en programmation.

    Merci par avance pour votre aide.
    Fichiers attachés Fichiers attachés

  2. #2
    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
    Par défaut
    Si tu nous disais simplement quel est le message d'erreur et le code la ligne surlignée

  3. #3
    Membre à l'essai
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    4
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 4
    Par défaut
    Voila le message d'erreur qui s'affiche erreur de compilation procédure trop grande.

    Je n'ai pas d'erreur dans mes commandes. C'est juste que je ne sais pas simplifier ma procédure qui est très redondante.

    Merci

  4. #4
    Expert éminent


    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
    Par défaut
    Citation Envoyé par titou8383
    Voila le message d'erreur qui s'affiche erreur de compilation procédure trop grande.

    Je n'ai pas d'erreur dans mes commandes. C'est juste que je ne sais pas simplifier ma procédure qui est très redondante.

    Merci
    j'ai pas regardé ton code ..mais tu dois pouvoir le découper en plusieurs procédures .... non ..? surtout si ta procédure est "très redondante"

  5. #5
    Membre chevronné
    Profil pro
    Inscrit en
    Février 2007
    Messages
    491
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 491
    Par défaut
    bonjour,
    ton code etant une repetition d instruction sur des cellules essaye d utiliser
    une boucle
    for j = 1 to 100
    cells(j,6) =
    next j

    dans l aide les boucles sont expliquées

  6. #6
    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
    Par défaut
    Tellement long ton code que le forum ne l'accepte pas même une fois modifié
    La je n'ai plus le temps, je suis invité
    Demain sera un jour nouveau.

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

    En regardant votre code on comprend pourquoi vous avez autant de lignes : il n'y a aucune constante définissant la progression dans les N° de ligne sur la feuille contenant les données.

    On le voit déjà simplement avec les 3 premières lignes :

    = j + 1
    Sheets("ATB2006").Cells(j, 6) = Sheets("Médecine (total)").Cells(31, 6)
    Sheets("ATB2006").Cells(j, 7) = Sheets("Médecine (total)").Cells(31, 8)
    j = j + 1
    Sheets("ATB2006").Cells(j, 6) = Sheets("Médecine (total)").Cells(40, 6)
    Sheets("ATB2006").Cells(j, 7) = Sheets("Médecine (total)").Cells(40, 8)
    j = j + 1
    Sheets("ATB2006").Cells(j, 6) = Sheets("Médecine (total)").Cells(51, 6)
    Sheets("ATB2006").Cells(j, 7) = Sheets("Médecine (total)").Cells(51,8)
    Si vous n'avez pas reçu d'autres réponses d'ici là je vous proposerai une solution en milieu d'après-midi.

    Amicalement

  8. #8
    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
    Par défaut
    Je t'ai fait ça en remplaçant chaque séquence de ton code en fonction.
    Comme j'ignore le reste de ton code, tu devras adapter.
    Pour tester, supprime la feuille "ATB2006"
    Par exemple, je n'active pas ton fichier en début de procédure principale puisque celle-ci se trouve dans le classeur actif. Ce qui n'est pas forcément le cas pour toi. Le fichier : Pièce jointe 12427
    J'ai changé le nom.
    Ce n'est pas très élaboré mais ça te donne une idée de l'utilisation des fonctions et de l'instanciation des feuilles de calculs qui permettent l'un et l'autre de structurer une appli et de simplifier le code
    A+

  9. #9
    Invité
    Invité(e)
    Par défaut
    Re titou8383,

    Comme l'a fait ouskel'n'or je vous adresse le fichier avec le code modifié et avec un autre nom.

    Vous pourrez tester et vous faire une idée de ce qui vous convient.

    Il reste bien sûr à compléter les 3 feuilles qui servent pour le nouvelle feuille.

    Actuellement la 3ème n'est pas traitée puisqu'elle ne comporte pas les éléments qui servent lors de la comparaison.

    A chaque lancement la feuille ATB2006 est supprimée automatiquement et de recréée.Pièce jointe 12434
    Dernière modification par Invité ; 05/10/2007 à 12h06.

  10. #10
    Membre Expert
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    1 567
    Détails du profil
    Informations personnelles :
    Âge : 62
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 1 567
    Par défaut
    hello
    ça m'a éclaté le sujet
    essaye ça c'est magique
    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
    34
    35
    36
    37
    38
    39
    40
    Dim montabval()
    Sub compilatb2006()
    ThisWorkbook.Sheets.Add Before:=Worksheets(1) 'choisi la position de ta feuille
    ActiveSheet.Name = "ATB2006"
    Range("a1:j1") = Array("code", "sect_act", "Nb_hosp", "Nb_AD", "Nblits", "mol_G", "mol_DDD", "DCI", "ATC", "DDD")
    ' j'ai donc x données composée de 10 colonnes a récuperer sur chaque feuille
    For X = 3 To Sheets.Count
    ' en premier tester la cellule ("11,3")
    If IsNumeric(Sheets(X).Cells(11, 3)) And Sheets(X).Cells(11, 3) <> "" Then
    'd'abord les données constantes
        code = Sheets(X).Cells(7, 2)
        sect_act = Sheets(X).Name
        Nb_hosp = Sheets(X).Cells(11, 3)
        Nb_AD = Sheets(X).Cells(12, 3)
        Nblits = Sheets(X).Cells(13, 3)
        DCI = "DCI"
        ATC = "ATC"
        DDD = "DDD"
    ' ensuite les données dynamiques
      C = Array("", 6, 8)
      L = Array("", 31, 40, 51, 57, 59, 70, 79, 83, 87, 89, 92, 97, 102, 107, 112, 123, 127, 132, 140, _
    146, 148, 151, 158, 164, 171, 175, 178, 186, 192, 200, 205, 208, 216, 219, 224, 227, 236, 238, 240, 244, _
    250, 254, 257, 260, 264, 266, 276, 278, 281, 298, 305, 309, 311, 316, 324, 330, 332, 339, 343, 345, _
    352, 355, 360, 365, 367, 376, 382, 387, 389, 396, 398, 401, 409, 411, 415, 417, 419, 423, 427, 433, _
    436, 442, 444, 446, 454, 463, 468, 475, 480, 485, 487, 490, 499, 503, 505, 511, 515, 518, 520, 523, 529)
        ReDim Preserve montabval(nbligne + UBound(L))
    For y = LBound(L) + 1 To UBound(L)
        mol_G = Sheets(X).Cells(L(y), C(1))
        mol_DDD = Sheets(X).Cells(L(y), C(2))
        montabval(nbligne + y) = Array(code, sect_act, Nb_hosp, Nb_AD, Nblits, mol_G, mol_DDD, DCI, ATC, DDD)
    Next y
    nbligne = nbligne + UBound(L)
    End If
    Next X ''''
    ' ensuite on écris le tout
    For z = LBound(montabval) + 1 To UBound(montabval)
    Zonedecriture = "a" & z + 1 & ":j" & z + 1 'determine la taille des lignes ou ecrire le nouveau tableau
    Range(Zonedecriture) = montabval(z) 'écriture
    Next z
    End Sub
    tu ne traite pas les données "DCI", "ATC", "DDD", donc, je ne sais pas ou les mettre ni ou les prendre , je les ai mis en constants par défaut, mais si elle sont en dynamique, il suffit de demander. d'autre part, je ne sais pas si tu traites la derniere feuille, vu qu'elle est elle meme une feuille récapitulative, et je suppose que ces trois fameuse variables viennent de cette feuille, dans ce cas, il y aura quelques petites modif a apporter, mais bon, ça n'ira pas très loin
    voila, voila

  11. #11
    Membre à l'essai
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    4
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 4
    Par défaut
    Merci à vous tous pour votre aide précieuse et votre rapidité. La macro foctionne : c'est magique.

    A bientot

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

Discussions similaires

  1. problème d'exécution de requête sous VBA?
    Par jessy212 dans le forum Requêtes et SQL.
    Réponses: 6
    Dernier message: 26/08/2006, 18h48
  2. [VBA-E] Problème de tableau dans macro VBA
    Par Chouls dans le forum Macros et VBA Excel
    Réponses: 9
    Dernier message: 12/06/2006, 15h20
  3. problème de création de requète sous VBA
    Par Golork dans le forum Access
    Réponses: 4
    Dernier message: 02/06/2006, 14h35
  4. [VBA-E] Problème de dépassement de capacité sous Excel
    Par Nicolas67 dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 30/05/2006, 10h36
  5. [VBA-E]Problème d'éxécution de macros à l'ouverture d'éxcel
    Par mulot03 dans le forum Macros et VBA Excel
    Réponses: 12
    Dernier message: 26/04/2006, 18h02

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