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 :

Comment dire? macro trop longue et


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre habitué
    Homme Profil pro
    Assistant aux utilisateurs
    Inscrit en
    Avril 2015
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Assistant aux utilisateurs
    Secteur : Santé

    Informations forums :
    Inscription : Avril 2015
    Messages : 10
    Par défaut Comment dire? macro trop longue et
    Bonjour, mon problème, lorsque je lance la macro pour mettre à jour les données elle scanne à chaque fois toute la feuille et ça prends beaucoup de temps.
    D'autre part j'ai du créer 4 boutons car la formule est trop longue :
    il y a environ 200 noms a trouver dans la feuille et recopier certaines ligne sur une autre feuille attribuée pour chaque personne...
    -Comment simplifier ma formule pour n'avoir plus qu'un seul bouton
    -Comment éviter que la macro scanne depuis le début alors que 2 semaines avant la date de dernière modification suffirait

    En pièce jointe on voit la feuille avec toutes les interventions et les contrôles (RECOP / RECOP / BOUTON...) ou je clic pour scanner cette feuille et extraire pour chaque chirurgien les données qui m'intéressent.

    Je ne sais pas si je suis clair, mes connaissances en VBA étant très limitées.
    Merci
    Laurent
    Images attachées Images attachées  

  2. #2
    Membre confirmé
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2015
    Messages
    26
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2015
    Messages : 26
    Par défaut
    Bonjour,

    Je vais essayer de répondre au mieux avec ce que j'ai pu comprendre .

    Pour ta première question, tu peux appeler une Sub() avec le bouton que tu souhaites et ensuite à la fin de cette dernière appeler la 2ème,3ème,4ème... pour n'avoir qu'un déclencheur (ton bouton) mais 4 Sub pour séparer ton code trop long sinon.
    Pour appeler une méthode depuis une autre tu utilises la fonction Call. Je t'ai mis un petit exemple ci-dessous:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    Sub number1()
    Call number2
    End Sub
    
    Sub number2()
    
    End Sub
    Pour ta 2ème question: Si tu connais la date de chaque élément, tu peux faire un test en la comparant avec la date du jour. Si la différence est de moins de 2 semaine, tu scan sinon tu passes au suivant.

    J'espère avoir pu répondre à ta question

  3. #3
    Expert confirmé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2013
    Messages
    3 609
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Alimentation

    Informations forums :
    Inscription : Mai 2013
    Messages : 3 609
    Par défaut
    Bonjour,

    À voir le bout de ton code, tu sembles faire une boucle pour chaque médecin.
    S'il y en a 200, ça fait 200 boucles...

    Tu pourrais créer une feuille avec tous les noms de médecins en colonne A et le nom de leur feuille en colonne B.

    Dans une seule boucle sur ta colonne de noms, tu recherches le nom de la feuille du médecin inscrit sur cette ligne et tu copies les données avec une 2e boucle plutôt que de mettre x lignes de codes qui sont à peu près identiques.

    Pour les dates, tu pourrais faire un filtre avec une plage de dates et ne lire que les lignes visibles (SpecialCells(xlCellTypeVisible))

    Tu écris
    D'autre part j'ai du créer 4 boutons car la formule est trop longue :
    il y a environ 200 noms a trouver dans la feuille et recopier certaines ligne sur une autre feuille attribuée pour chaque personne...
    Je ne saisis pas ce que tu entends par Formule...
    Et on ne sait pas quelle est la condition pour copier ou non une ligne de données...

    Peut-être que j'ai mal compris la problématique, par contre... (?)

  4. #4
    Membre habitué
    Homme Profil pro
    Assistant aux utilisateurs
    Inscrit en
    Avril 2015
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Assistant aux utilisateurs
    Secteur : Santé

    Informations forums :
    Inscription : Avril 2015
    Messages : 10
    Par défaut
    Merci pour les réponses.
    Parmi, oui je fais autant de boucle que de médecin, j'ai une feuille avec le programme de tous les jours et ensuite chaque médecin a une feuille.
    la macro cherche le noms des médecins sur la feuille de programme et copie ces lignes sur la feuille de chaque médecin.(le noms de l'intervention, sexe du patient, année, date opération...)
    Je comprends ta solution mais pourrais-tu me faire un exemple car cela est hors de mes compétences.
    Ce que j'entends par formule c'est en fait le code de ma macro qui justement est une boucle reproduite x fois.
    Laurent

  5. #5
    Expert confirmé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2013
    Messages
    3 609
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Alimentation

    Informations forums :
    Inscription : Mai 2013
    Messages : 3 609
    Par défaut
    Les feuilles de tes médecins sont des modèles où tu remplis des champs fixes ou plutôt un genre d'historique où tu copies des données à la fin ?

    Dans une feuille que tu nommes Liste, tu inscris tous les noms de médecins (tels qu'ils sont écrits dans la feuille BASE) en colonne A.
    En colonne B, tu inscris le nom de la feuille qui le représente.

    Ça pourrait ressembler à ceci. J'ai assumé que tu copiais les données à la suite d'autres.
    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
    Sub RECOPIE()
        Dim I As Long, J As Long
        Dim nbLignes As Long    'nombre de lignes de la feuille de données
        Dim Ligne As Long       'première ligne vide de l'onglet des médecins
        Dim Feuille As String   'Nom de la feuille du médecin en cours
     
        With Sheets("BASE")
            nbLignes = .Cells(.Rows.Count, "A").End(xlUp).Row
        End With
     
        For I = 2 To nbLignes
            Feuille = GetNomFeuille(Range("A" & I)) 'en assumant que le nom du médecin est en colonne A
            Ligne = Sheets(Feuille).Cells(Rows.Count, "A").End(xlUp).Row + 1 'première ligne vide
            For J = 1 To 13
                Sheets(Feuille).Cells(Ligne, J) = Sheets("BASE").Cells(I, J)
            Next
        Next
    End Sub
     
    Function GetNomFeuille(Nom As String) As String
        Dim I As Long, nbLignes As Long
     
        nbLignes = Sheets("Liste").Cells(Rows.Count, "A").End(xlUp).Row
        For I = 1 To nbLignes
            If Sheets("Liste").Range("A" & I) = Nom Then
                GetNomFeuille = Sheets("Liste").Range("B" & I)
                Exit Function
            End If
        Next
    End Function

  6. #6
    Expert confirmé

    Homme Profil pro
    Curieux
    Inscrit en
    Juillet 2012
    Messages
    5 169
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Curieux
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Juillet 2012
    Messages : 5 169
    Billets dans le blog
    5
    Par défaut
    Bonjour,

    n'ayant pas vu ton fichier, je propose cette solution si tu penses qu'elle sera compatible avec tes données et ton usage :

    - une feuille qui sera une base de données
    - une feuille "modèle" dans laquelle on peut interroger 1 médecin, et ça rempli le modèle

    ça t'évite les 200 feuilles, et tu facilement upgrader ton fichier pour saisir des nouvelles données (médecins, soins etc...) ou faire des requêtes dans ta base

    je veux bien y jeter un oeil à ton fichier, mais va falloir le rendre "non secret médical" compatible (même si personnellement j'y suis assujeti à ce secret médical)

Discussions similaires

  1. [IDE] E2222 : Expansion de macro trop longue
    Par Didier44 dans le forum C++Builder
    Réponses: 2
    Dernier message: 27/01/2012, 09h05
  2. [XL-2007] Macro trop longue, simplification
    Par laduche31 dans le forum Macros et VBA Excel
    Réponses: 13
    Dernier message: 12/12/2011, 14h40
  3. [AC-2003] Tuer une macro trop longue à s'exécuter
    Par reeenooo dans le forum VBA Access
    Réponses: 5
    Dernier message: 30/10/2009, 18h43
  4. Réponses: 3
    Dernier message: 01/06/2007, 16h13
  5. Requette Trop longue. Comment optimiser ?[Traitement]
    Par Tankian dans le forum Requêtes
    Réponses: 1
    Dernier message: 22/06/2006, 20h37

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