Requête macros

Bonjour,

je vous joins un fichier afin de mieux vous faire comprendre mes besoins,
dans un fichiers je vais avoir entre 20 000 à 30 000 lignes qui seront sur une feuille, ou il y a une colonne département et d'autre colonnes, il faudrait que la requête soit la suivante à chaque fois que l'on trouve un nouveau département il faut ouvrir une feuille avec le nom du département et copier la ligne entière, évidemment si le département existe déjà, il faut copier la nouvelle ligne de " global" à la suite des autres sur les autres sur la feuille du même nom
Cordialement merci

http://www.cjoint.com/confirm.php?cjoint=EEvugtzJNrF

23 réponses

Résumé de la discussion

La discussion porte sur une macro Excel qui, à partir d'un fichier de 20 000 à 30 000 lignes avec une colonne département, crée une feuille par département et y copie chaque ligne. Si le département existe déjà, la macro doit ajouter la nouvelle ligne à la suite sur la feuille correspondante et conserver l'ordre d'arrivée des lignes. Plusieurs répondants évoquent des solutions via des tests d'existence de feuille, des modifications dans l'ouverture du fichier et l'utilisation de CurrentRegion pour copier le contenu. En dernier lieu, les propositions divergent sur le mécanisme idéal: exécuter la macro à l'ouverture, purger les feuilles ou traiter les mises à jour nocturnes sans perte de données.

Bobot (l’IA à votre service)
  1. Salut je te propose cette solution tu pourras ajouter autant de lignes que tu le souhaite et tu peux également faire des recherches partiel.

    http://www.cjoint.com/confirm.php?cjoint=EEwiFaS5XNI
    Dis moi si cela te convient c'est sur une nouvelle feuille
    A+
    0
    1. j'ai pas mis le bon excel xD je m'en excuse
      http://www.cjoint.com/confirm.php?cjoint=EEwiIoeYS5T
      Voilà
      0
    2. @Ayuritenshibonjour,
      j'avais répondu mais je ne vois pas ma réponse, alors je refais.
      Est ce que tu peux m'expliquer comment cela fonctionne, je ne vois pas de boutons
      donc comment faire pour dupliquer les feuilles (avec le nom du "département" et copier les lignes entières
      La recherche j'ai compris mais je ne sais pas ou je vois pas comment generer le nouveau fichier
      Merci de me répondre
      Cordialement
      Babeth
      0
    3. oui bien sure alors tu va sur la feuille 2 car je l'ai mis sur une nouvelle feuille et tu marque simplement ta recherche exemple si tu veux histoire des arts tu ecrit histoire des arts ou simplement * art et tu aura tous les résultats comprenant le mot art dedans avec toutes la ligne
      0
  2. bonjour,

    je suis navré, je pensais qu'avec le bout de fichier je pourrais me débrouiller, mais en fait c'est bien plus complexe que ce que je pensais, l'on m'envois le vrai fichier (une partie, et ce qui est a faire est pas différent mais plus complexe, alors je joins un fichier avec explications, si par un effet de bonté tu pouvais regarder je te serais reconnaissant
    Par avance merci

    http://www.cjoint.com/confirm.php?cjoint=EEwotDMlRls
    0
    1. Re bonjour je viens de regarder et j'en suis désolé mais ca sort de mes compétences :/
      bon courage pour résoudre votre problème ...
      0
    2. @Ayuritenshimerci de cette franchise et si une personne peut me dépanner j'en serais ravi

      mille merci a toi et à vous tous

      et bravo pour votre devouement
      0
  3. Bonjour à tous les deux

    Un essai à tester
    La macro est à lancer par Ctrl+k (pour le moment)
    https://www.cjoint.com/?3EwrGZ9CpWf

    Question. Les données de la feuille Feuil1 vont elles toujours en augmentant, c'est ce que j'ai supposé, sinon il faut prévoir le nettoyage des feuilles de département

    Cdlmnt
    0
    1. RQ. Remplacer la ligne
      '.Cells.Copy Sheets(nf).Cells(1, 1)
      par celle ci
      .Cells(1, 1).CurrentRegion.Copy Sheets(nf).Cells(1, 1)
      ça devrait aller plus vite
      0
  4. BONSOIR

    merci pour tout ce que tu fais pour moi, il y a un petit problème, primo je ne sais pas changer les lignes, deuxio est ce qu'il y a une possibilités que la colonne semaine de la feuille 1 ne soit pas recopié
    par avance merci
    0
    1. 1. primo je ne sais pas changer les lignes
      Alt-F11, tu vas dans le Module 1
      tu met un apostrophe ' devant la ligne à supprimer
      tu insères une ligne après elle
      tu colles la ligne remplaçante
      2. deuxio est ce qu'il y a une possibilités que la colonne semaine de la feuille 1 ne soit pas recopié
      cette colonne semaine tu veux la conserver vide ou bien carrément la supprimer
      0
      1. encore merci pour ta réponse rapide, tu tires plus vite que ton ombre
        Bravo et merci mille fois
        Bien compris pour le primo, vais le faire de suite .
        pour la colonne, elle est renseigné à l'origine, mais comme c'est l'inspection académique, je suis obligé de la recevoir mais je n'en ai pas besoin sur les feuilles donc il faut la supprimé lors des copies sur les feuilles
        Mille merci à toi
        0
        1. OK, je vais te faire bosser un peu

          tu ajoutes les lignes soulignées
          1. ici au début du code
          Const lideb = 2
          Const coSem = 5

          2. et ici vers la fin de la procedure
          .Rows(lideb - 1).AutoFilter Field:=coDpt, Criteria1:=nf
          .Cells(1, 1).CurrentRegion.Copy Sheets(nf).Cells(1, 1)
          Sheets(nf).Columns(coSem).Delete

          Tu n'as pas répondu à cette question
          Question. Les données de la feuille Feuil1 vont elles toujours en augmentant, c'est ce que j'ai supposé, sinon il faut prévoir le nettoyage des feuilles de département

          Bonne fin de journée
          0
          1. Quelques précisions
            1. Testes bien la macro avant de l'appliquer au vrai fichier
            2. Dans le vrai fichier : Alt-F11 pour accéder à l'éditeur vba, puis Insertion/Module et tu copies tout le code. Tu modifies éventuellement la valeur de la constante FS avec le nom de la feuille où s'empilent les données

            Option Explicit

            Const FS = "Feuil1"
            Const coDpt = 9

            3. Il faudra me dire comment tu comptes lancer la macro (raccourci clavier comme j'ai fait, un bouton, un clic-clic dans une cellule, ...)
            4. Si tout va bien, peux tu m'indiquer le temps mis par la macro pour s'exécuter dans le vrai fichier (donnes moi aussi son nombre de lignes)

            Cdlmnt
            0
          2. @ccm81bonjour,

            vais te répondre :
            ce fichier fluctue, c'est un fichier qui signales les erreurs de saisie des opératrices, lorsqu'il y en as évidemment, donc il peut faire 20 000 lignes comme il peut faire 0 lignes si les opératrices n'ont pas fais d'erreurs, d'où la nécessité de purger les feuilles "départment" lorsqu'elle n'existe plus dans la "feuille 1".
            Tu comprendras qu'une feuille peut disparaître un jour et revenir le lendemain si l'opératrice à fait des erreurs de saisie, mais disons que nous naviguons toujours avec environ 5000 lignes, nous avons eu des pointes plus hautes, mais rarement en dessous de 1000.
            Pour résumer il faut savoir que ce fichier est donc mis à jour par un serveur qui tourne la nuit, et que l'idéal serait: comme je vais le mettre dans les taches planifiés pour ouverture vers 6 heures du matin, donc l'idéal comme je te disais c'est que la macro se lance à l'ouverture du fichier pour mise à jour à l'ouverture sans clic et donc qu'il balaie toute la "feuille 1 de la 1ère à la dernière ligne en se recréant à chaque ouverture (peut-être une utopie ce que je te dis ?)
            Hier en prenant 12000 lignes (environ) nous avons mis un peu moins de 10 secondes, c'est très bien
            Voila je ne sais comment te dire merci .
            PS j'ai fais les changements en suivant tes directives et j'y suis arrivée.
            mille merci
            0
        2. Ah, tu ne m'avais pas tout dit !

          1. ce fichier fluctue, c'est un fichier qui signales les erreurs de saisie des opératrices, lorsqu'il y en as évidemment, donc il peut faire 20 000 lignes comme il peut faire 0 lignes si les opératrices n'ont pas fais d'erreurs, d'où la nécessité de purger les feuilles "département" lorsqu'elle n'existe plus dans la "feuille 1".
          Est ce que ça veut dire que
          1.1. que chaque matin, un nouveau fichier arrive (qui n'a rien à voir avec celui du jour précédent) : c'est à dire qu'il n'est pas censé compléter le fichier précédent
          1.2. Ce fichier ne contient que la feuille "Feuil1" avec la liste des données et surtout aucune feuille département
          1.3. A partir de ce fichier tout neuf à une seule feuille, tu veux ventiler les données dans les feuilles département : il n'y aura de créé que les feuilles dont le département figure dans la colonne département de la Feuil1 : donc pas besoin de purger les feuilles département non concernées ce jour là puisqu'elles ne seront pas dans ce fichier
          2. Pour résumer il faut savoir que ce fichier est donc mis à jour par un serveur qui tourne la nuit
          "mis à jour" n'est alors, au sens du 1.1, pas le bon terme, ce ficher est recréé chaque nuit
          3. l'idéal comme je te disais c'est que la macro se lance à l'ouverture du fichier pour mise à jour à l'ouverture sans clic
          Tu vas bosser un peu
          Dans l'éditeur vba (Alt-F11) puis dans la fenêtre de gauche (liste des modules)
          3.1. tu clic-clic sur le module ThisWorkbook
          3.1. dans la fenêtre horizontale du milieu (en haut), il y a marqué Général. Tu déroules et sélectionnes Workbook
          Si tu ne vois pas Workbook, pas de panique tu recommences depuis 3.1.
          L'éditeur te propose alors d'écrire la procédure Workbook_Open
          tu la complètes par un appel à la procédure OK, comme ça
          Private Sub Workbook_Open()
          Call OK
          End Sub
          3.4. Lorsque tu ouvres un fichier contenant des macros, par défaut, Excel te met en niveau de sécurité Moyen, ce qui fait apparaitre une fenêtre te demandant l'autorisation d'exécuter les macros. Si tu veux la court-circuiter. Outils/Macros/Securité et tu choisis l'option Faible
          4. Hier en prenant 12000 lignes (environ) nous avons mis un peu moins de 10 secondes, c'est très bien
          As tu bien fait les modifications du message 10 ?
          RQ. Remplacer la ligne
          '.Cells.Copy Sheets(nf).Cells(1, 1)
          par celle ci
          .Cells(1, 1).CurrentRegion.Copy Sheets(nf).Cells(1, 1)

          Comme tu vois j'ai un (au moins) doute, si je suis à côté de la plaque (points 1 et 2), tu dis et re-expliques

          Cdlmnt
          0
          1. 1.1 OUI ca veux dire qu'un module toutes les nuits prends les saisies et les vérifies et crée une nouvelle feuille qui n'a rien à voir avec celle de la veille
            1.2 et oui en effet il n'y a qu'une feuille "Feuille 1" en effet mis à jour n'est pas le bon terme, il faut dire qu'il y a une création d'un état des erreurs constaté par le module d'où le fait de créer à l'ouverture un nouveau fichier avec les feuilles "departments"
            Pour le reste ok je vais bosser pour essayer de faire ce que tu me dis
            et je te tiens compte de ce que je peux faire...merci à toi cela me permet de comprendre un peu mieux .
            @ bientôt de te lire
            0
            1. Ouf, j'ai eu peur ;-)
              Si tu veux un code commenté pour voir comment ça marche tu dis

              Bon week end
              0
              1. je veux bien voir un code commenté

                merci à toi

                bon week end et merci pour tout
                0
                1. regarde mon changement en message 10 dis moi si ca vas
                  .Rows(lideb - 1).AutoFilter Field:=coDpt, Criteria1:=nf
                  .Cells(1, 1).CurrentRegion.Cpy Sheets(nf).Cells(1.1)
                  Next nudpt

                  par contre dans le Workbook j'ai mis cela:dans la feuille général
                  Option Explicit
                  Private Sub Wordbook_Open()Call OK
                  End Sub
                  et ca marche pas
                  erreur de compilation attendu fin d instruction

                  tu ne m'as pas dit si on peut faire la mise a jour sans clic ou sans faire ctrl+k

                  merci
                  0
                  1. Bon

                    On va faire simple
                    https://www.cjoint.com/?3ExrdCikkiQ

                    Ce fichier ne contient que la feuille 1
                    Alt-F11 pour passer dans l'éditeur vba
                    dans le module Workbook,
                    procedure Workbook_Open() il y a un apostrophe devant Call OK
                    tu l'enlèves (l'apostrophe) pour activer la ligne
                    tu enregistre le fichier et tu le ferme
                    tu le rouvre
                    ça devrait fonctionner

                    RQ1. la procédure procedure Workbook_Open() comme son nom l'indique, s'exécute automatiquement à l'ouverture du fichier
                    ....
                    MAIS, car je sens qu'il va y avoir un mais ...
                    0
                    1. il n'y a pas de mais, mais il y a un mais je dois enlever les (parenthèses) et OK pour que ca marche, sinon j'ai un message d'erreur, d'autre part
                      l'application ne se lance pas à l'ouverture; je dois cliquer sur ctrl+k
                      d'autre part si par exemple j'enlève les ligne d' un department' que je sauvegarde, que je ferme et que je relance la feuille du "department" reste crée avec les lignes que j'ai eraser et alors qu'il n'y a plus de ligne, d'où l'intérêt de faire un "rase" à la fermeture du fichier, et de relancer l'application à l'ouverture du fichier et comme je te demandais en automatique si possible

                      euhhhh est ce possible

                      merci
                      0
                      1. Je ne comprends pas bien ce que tu as fait
                        1. Qu'est ce que donne celui là à l'ouverture ?
                        https://www.cjoint.com/?3ExrHhPMscL
                        2. Tu ne m'avais pas dit que le fichier pouvait être ré-ouvert dans la journée. Dans ce cas que faut il faire ?
                        0
                        1. je sais pas, je crois que je m'exprime mal
                          le fichier que tu m'envoi il est ok, super, à l'ouverture sans "clic" il met le temps de réaction (0.00632) et j'ai les feuilles de départment avec les lignes;
                          Mais mardi quand je serais en réelle, j'aurais une tout autre "Feuille1" car toutes ces lignes vont être rectifié dans la journée et ainsi de suite chaque matin, et il y auras de nouvelles lignes de fausses avec de nouveaux "departments", alors la je pose la question est ce que les feuilles des "départments" existant disparaitrons pour laisser la place aux nouvelles feuilles et aux nouvelles lignes, c'est la mon soucis
                          Car non le fichier est ouvert une fois le matin et il n'est pas ré-ouvert jusqu'au lendemain matin.

                          Si tu penses que ca marcheras dans le sens ou je te le dis
                          il ne faut rien toucher et il me reste à te remercier grandement de tout le temps que je t'ai fais perdre et de tous les soucis que je t'ai donné

                          Grand Merci
                          0
                          1. A chaque ouverture, celui-là supprime toutes les feuilles du classeur sauf Feuil1
                            J'ai supprimé la feuille Explications
                            https://www.cjoint.com/?3ExsC0SgoFq
                            Tu testes : soit
                            1. tu ouvres
                            2. tu supprimes un departement dans Feuil1
                            3. tu enregistres et tu fermes
                            4. tu re-ouvres
                            Est ce que ça correspond à ce que tu veux

                            MAIS, il y en aura encore un
                            Ce fichier lorsqu'il est "mis à jour" la nuit par l'académie (vive l'EN en passant)
                            Option1. Est ce qu'il est supprimé et recréé, si oui, les macros vont disparaitre, pas terrible
                            Option 2. Est ce qu'il est simplement modifié, si oui, l'exécution des macros à l'ouverture (de nuit) vont peut être pose problème. Il y a des solutions
                            0
                            1. Maitre , car je peux t'appeler maitre, tu as saisi mes mauvaises explications, mais c'est super comme boulot
                              Alors la mise à jour du fichier la "Feuille1" c'est une liaison ODBC avec serveur (SQL server 2008
                              Sur le poste de travail je garde le fichier que tu viens de me faire , je pends le fichier du serveur il y a un pont entre les deux, ce qui fait que je garde la structure du fichier que tu m' as fait, seul change les données de la feuille .
                              Du fait que j'ai mis une ouverture programmée, qui ne touche que les données de la feuille 1, donc en clair, ma "feuille 1" conserve toutes les structures (colonnes et macros que tu viens de faire) seul changement les données a partir de la ligne 2 de la "feuille1"

                              je peux te dire " merci l'artiste" un grand merci

                              (oui parlons en de l'EN....vivement la retraite....hihihihi)
                              0
                              1. J'ai encore comme un léger doute mais bon, si mardi ça coince tu dis

                                L'idée serait d'ouvrir le fichier de données (sans macro celui là) via un bouton par exemple, depuis un autre ficher maitre (lui)

                                RQ1. Maitre c'est (un peu) exagéré
                                RQ2. Au fait, dans ton rectorat, on ne peut pas te fournir la bête qui fait tout ça :-) ?

                                Donc on ferme jusqu'à (peut être) mardi

                                Cdlmnt
                                0
                                1. Je ne sais pas si tu vas me croire, j'ai fait les applications à l'époque pour pouvoir faire les pré-inscriptions sur les minitels, j'ai tout mis en place, le rectorat et l'académie touchaient les dividendes (des P et T) moi nada, j'ai quand même un grade d'ingénieur informaticienne mais en programmation sur "ACCESS".
                                  De nos jours c'est fini l'E.N. signe des contrats avec des marchands de logiciels et nous perdons tous nos acquis, et personne n'est capable de résoudre les problèmes tel que celui la, et quand tu t'adresse à CELCAT il te bousille des colonnes mais sont bons pour rien d'autre...voila en quelques mots ce que représente le service informatique d'une université d'une des plus grandes ville de France...il est heureux qu'il reste encore des gens comme vous qui dominez l'outil informatique " EXCEL"
                                  Cordialement
                                  Bon W.E et merci
                                  0
                                  • 1
                                  • 2