Programmation excel

Bonjour,

je cherche à faire une rotation des lignes d'un tableau excel ( ligne 1 devien 2, 2 devien 3 etc ) et ce chaque X temps ( 1minute par exemple)
si quelqu'un peut m'aider ou m'envoyer un lien
ryma

25 réponses

Résumé de la discussion

La discussion porte sur l'automatisation d'une rotation des lignes d'un tableau Excel à intervalles réguliers et sur l'importation automatique de fichiers Excel téléchargés dans un tableau récapitulatif. Plusieurs réponses évoquent des approches techniques comme la gestion des cellules vides et le déplacement des données, et l'utilisation de macros OnTime pour lancer des actions répétées chaque minute. La solution proposée détaille comment placer deux codes dans ThisWorkbook, puis des procédures dans la feuille et un module, afin d'activer ou désactiver automatiquement le déclenchement et d'organiser le déplacement des données. D'autres intervenants partagent des liens et discutent de limites potentielles, certains estimant que tout ne peut pas être réalisé uniquement avec Excel et suggèrent des alternatives ou complémentarités.

Bobot (l’IA à votre service)
  1. Bonsoir le fil,

    Oui ce doit être l'appel à la fonction Beep qui permet de moduler le Beep

    à essayer simplement comme cela

    Sub LancementAutomatique()
    Go = TimeSerial(Hour(Time), Minute(Time), Second(Time) + "3")
    Application.OnTime Go, "LancementAutomatique"
    Beep
    Range(Range("A65536").End(xlUp), Range("A2").Offset(0, 48)).Cut
    Range("A3").Select
    ActiveSheet.Paste
    Range(Range("A65536").End(xlUp), Range("A65536").End(xlUp).Offset(0, 48)).Cut
    Range("A2").Select
    ActiveSheet.Paste
    End Sub
    0
    1. Contributeur
      Ca doit être ton appel à la fonction API Beep.
      Enlève cette partie (déclaration) et utilise la fonction Beep native d'excel ((sans paramètre) .

      eric
      0
      1. ya pas moyen , il est installé dans mon entreprise et je dois faire avec .....A+
        0
        1. svp pour ce programme la :

          Declare Function Beep Lib "kernel32" (ByVal Frequence As Long, ByVal Duree As Long) As Long

          Sub LancementAutomatique()
          Go = TimeSerial(Hour(Time), Minute(Time), Second(Time) + "3")
          Application.OnTime Go, "LancementAutomatique"
          Call Beep(500, 100)
          Range(Range("A65536").End(xlUp), Range("A2").Offset(0, 48)).Cut
          Range("A3").Select
          ActiveSheet.Paste
          Range(Range("A65536").End(xlUp), Range("A65536").End(xlUp).Offset(0, 48)).Cut
          Range("A2").Select
          ActiveSheet.Paste
          End Sub

          j'essay de l'executer sur office2010, il me fait "erreur de compilation, le code contenu dans ce projet doit etre mis a jour pour pouvoir etre utilisé sur les systeme 64bits verifier et mettez a jour les instructions declaré, puis marquez les avec l'attribut Ptrsafe".

          je doit modifier quoi sur ce programme svp,??
          0
          1. Contributeur
            Bonjour,

            As-tu installé la version 64 bits d'excel ?
            Si oui désinstalle-la et installe la 32 bits.
            Elle présente des incompatibilités et n'a aucun intérêt (sauf si tu dois gérer des tableaux énormes et que tu as beaucoup de mémoire sur ton système, et là ce sont des cas particuliers chez les pros)

            eric
            0
        2. Re,

          je ne comprends pas très bien ton problème, tu veux copier ces données sur excel,

          tu mets en surbrillance la partie à copier et clic droits sur la première cellule d'excel/collage spécial/coche texte
          0
          1. d'acord je comprends
            c'est pas vraiment ce qui m'est demandé,
            merci en tout cas pour toute ton aide
            cordialement
            0
        3. http://dl.free.fr/getfile.pl?file=/Yjtu3X1k voici le lien d'un fichier text parmis d'autres, un fichier text represente les données d'une journée, un dossier d'un mois contient 30 fichier par exemple et à la fin on aura un gros dossier d'une année contenant 12 dossier que chaqu'un contient 30 fichiers txt qui doivent etre copier automatiquement sur Excel.
          0
          1. Re,

            je n'ai pas winrar sur mon système et pas envi de le télécharger.
            Il y a des fournisseurs d'accès qui permettent l'envoi de gros fichier comme free que tu peux tester en espèrant que depuis ton lieu géographique cela marche.
            dans la barre URL saisir

            https://portail.free.fr/

            clic sur envoi de gros fichier/Parcourir pour sélectionner ton fichier/clic sur Envoyer
            free va généré un lien qu'il restera à coller dans un post. L'opération prend quelques minutes en fonction de l'enconbrement du réseau, la taille du fichier
            0
            1. Re,

              Si les données ne sont pas confidentielles ou ntu les maquilles, peux tu mettre ton fichier à notre disposition avec ce lien

              https://www.cjoint.com/
              0
              1. la taille du fichier est trop importante pour la télécharger dans ce lien
                n'y aurait -il pas un autre lien pour les hebergé?
                sinon je suis entrain de les modifier
                0
              2. https://www.cjoint.com/?3Kixhde8URS

                les dossiers étaient trop pleins jusqu'à 14 mega minimum chacun
                ce dossier contient les donnés de chaque mois pour une année
                0
            2. mais c'est des fichiers téléchargés au fur et à mesure
              il s'agit de fichiers excel contenant des mesures données par des capteurs externes ,chaque periode définie il en sort un nouveau tableau de mesures , ce tableau est placé dans un dossier,comment l'additionner aux tableaux précédents ?
              0
              1. Mettre le contenu d'un fichier dans un tableau
                0
              2. je pense que ce que je veux faire n'est pas possible rien qu'a laide d'excel.il faut utiliser autre chose
                je ne sais quoi
                0
            3. Re,

              Je ne comprends pas très bien ton problème, mais si tu veux regrouper dans ton nouveau fichier tes les données venant d'autres fichiers, il n'y a pas de problème si la configuration des fichiers est la même (même colonnes, pas de cellules fusionnées etc ...)

              on peut écrire un code complexe mais le plus simple et sage est de le faire manuellement tu sélectionnes tes données et clic droit Copier/clic droit sur la première cellule vide du nouveau classeur et Collage spécial/coche valeur et OK cela ne copiera que tes valeurs sans des formules éventuelles ou des formats
              0
              1. re
                je tiens tout d'abord à te remercier pour tes précieuses explications
                maintenant je peux programmer seule des codes pour jouer n'importe comment sur les lignes d'un tableau
                maintenant j'ai une autre question : est-ce que c'est possible de copier automatiquement des fichiers excel (qui sont téléchargés dans un dossier ) dans un tableau somme de tous les tableaux qui existaient déja dans ce fichier (qui ont été copié avant ) ?
                si c'est possible j'aimerais etre dirigé vers la fonction qui pourrait faire ça ( je ne crois pas que les tableaux croisés dinamiques puissent copier de tableaux d'un dossier )

                j'espere avoir été assez explicite

                merci d'avance
                0
                1. Re,

                  offset(1,0) sélectionne la ligne au dessous de la cellule active exemple si tu utilise cette syntaxe
                  Range("A1000").End(xlUp) tu fais une recherche colonne A de cellule non vide en partant de la cellule A1000. La cellule contenant une valeur est A50 par exemple, la cellule active s'arrête sur A50
                  si tu ajoutes .offset(1,0) ta cellule active descend d'une ligne pour sélectionner la cellule A51 pour sélectionner la cellule au dessus la syntaxe est .offset(-1,0)

                  pour décaler de 3 colonnes par exemple c'est offset(1,3)
                  0
                  1. Re,

                    Pour sélectionner la première cellule vide d'une colonne en remontant à partir d'une cellule basse exemple de A1000

                    Range("A1000").End(xlUp).select

                    Pour sélectionner la première cellule vide d'une colonne en descendant à partir de cellule A1

                    Range("A1").End(xlDown).Select

                    et si tu veux sélectionner une cellule dans une autre colonne tu démarres le balayage dans la colonne concerné exemple pour chercher en colonne F
                    Range("A1").End(xlDown).Select

                    pour sélectionner la première cellule vide d'une ligne vers la gauche de la cellule active à partir de X10 par exemple

                    range("X10").End(xlToLeft).Select

                    pour sélectionner la première cellule vide d'une ligne vers la droite de la cellule active à partir de A10 par exemple
                    range("X10").End(xlToLeft).Select

                    Range("A10").End(xlToRight).Select

                    Pour sélectionner la première cellule vide d'une colonne en descendant à partir de cellule A1

                    Range("A1").End(xlDown).Select

                    .offset(0,3) sert à décaler la sélection à partir de la cellule active, ici, 0 reste sur la ligne trouvée et 3 se décale de 3 cellules à droite ou -3 se décale de 3 cellules à gauche

                    A+
                    Mike-31

                    Une période d'échec est un moment rêvé pour semer les graines du savoir.
                    0
                    1. donc ça doit etre offset(1,0) qui selectionne l'avant derniere ligne
                      merciii
                      0
                  2. quel est le code qui selectionne l'avant derniere ligne non vide?
                    (Range("A65536").End(xlDown), Range("F1")) -1 ?
                    0
                    1. Re,

                      Si non n'hésite pas à revenir dans cette discussion, cela permet à l'intervenant qui le souhaite de suivre l'évolution d'un code et y apporter plus facilement une modification ou le compléter
                      0
                      1. Re,

                        Il suffit demande ce qui pose problème

                        A65536" et (xIUP) et offset (0,6)

                        Range("A65536").End(xlUp) en fait on lance une recherche de cellule contenant une valeur et pour cela on commence à partir de la cellule A65536 et avec End(xlUp) on remonte

                        et en ajoutant Offset(0, 6) on décale la cellule active de 6 cellule vers la droite

                        ci-dessous on commence une recherche depuis la cellule A65536 en remontant et lorsqu'une cellule non vide est rencontrée la recherche ou la sélection se décale de 6 colonne vers la droite
                        Range("A65536").End(xlUp).Offset(0, 6)

                        et pour compléter cette ligne de code qui pourrait s'écrire plus technique, on lance deux recherches, une pour sélectionner la première cellule non vide et la seconde recherche la première cellule non vide et se décale de 6 cellule à droite ce qui donne une sélection de la colonne A à la colonne H exemple A10 à H10

                        Range(Range("A65536").End(xlUp), Range("A65536").End(xlUp).Offset(0, 6)).
                        0
                        1. d'acord merci beaucoup c'est trés bien expliqué
                          je vais réessayer seule
                          0
                      2. Re,

                        Alors sur chaque fichier, il faut coller ces deux codes dans la Thiswokbook du Visual basic clic droit sur l'onglet de feuille/Visualiser le code, ou touches Alt et F11

                        'le premier lance le code dès l'ouverture du fichier
                        Private Sub Workbook_Open()
                        [I1] = 5
                        Call LancementAutomatique
                        End Sub

                        'celui ci arrête la macro à la fermeture du fichier
                        Private Sub Workbook_BeforeClose(Cancel As Boolean)
                        [I1] = 0
                        End Sub

                        ces deux codes sont à coller dans les propriétés de ta feuille clic droit sur l'onglet de feuille/Visualiser le code, ou touches Alt et F11

                        'ce code lance la procédure lorsqu'on revient sur la feuille concernée
                        Private Sub Worksheet_Activate()
                        [I1] = 5
                        Call LancementAutomatique
                        End Sub

                        'ce code lance la procédure lorsqu'on quitte sur la feuille concernée ce qui permet de travailler facilement sur une autre feuille
                        Private Sub Worksheet_Deactivate()
                        [I1] = 0
                        End Sub

                        Et pour terminer lorsque tu es dans le Visual Basic clic droit sur l'onglet de feuille/Visualiser le code, ou touches Alt et F11
                        il faut ouvrir un Module, clic sur Insertion et Module et coller ce code qui gére le clignottement

                        Declare Function Beep Lib "kernel32" (ByVal Frequence As Long, ByVal Duree As Long) As Long

                        Sub LancementAutomatique()
                        Go = TimeSerial(Hour(Time), Minute(Time), Second(Time) + Range("I1"))
                        Application.OnTime Go, "LancementAutomatique"
                        Call Beep(500, 100)
                        Range(Range("A65536").End(xlUp), Range("F1")).Cut
                        Range("A2").Select
                        ActiveSheet.Paste
                        Range(Range("A65536").End(xlUp), Range("A65536").End(xlUp).Offset(0, 6)).Cut
                        Range("A1").Select
                        ActiveSheet.Paste
                        End Sub

                        A+
                        Mike-31

                        Une période d'échec est un moment rêvé pour semer les graines du savoir.
                        0
                        1. pardon mais c'est le meme code qu'avant
                          et si je veux que la rotation des lignes de plusieurs fichiers independants soient faite de la meme maniere?
                          ou inserer le lien de ce fichier ?
                          ce que je ne comprend pas ce sont les valeurs "A65536" et (xIUP) et offset (0,6)
                          mais sinon je vois la logique que suit ce programme
                          merci
                          0
                      3. Re,

                        En VBA il faut être très précis, tu dis d'adapter à plusieurs fichiers et d'une chaine de tableau

                        que veux tu dire exactement plusieurs fichiers indépendant

                        ou plusieurs tableaux dans le même fichier, sur plusieurs onglets par exemple ou sur la même feuille
                        0
                        1. c'est sur plusieurs fichiers indépendants
                          0
                      4. Re,

                        Copie tes données sur mon fichier tu seras sur que cela marche.
                        Tu saisis 0 en I1

                        il faudra peut être adapter le code qui prend en compte les colonnes de A à F

                        on verra cela demain, pour ce soir je décroche
                        0
                        1. bien reçu à demain :)
                          0
                        2. bonsoir
                          le dernier programme marche à merveil pour un seul tableau
                          maintenant j'ai un autre petit souci de programmation pour mon projet
                          j'aimerais pouvoir réaliser ce meme processus sur plusieurs fichiers excels,c'est a dire creer ce programme pour une chaine de tableaux
                          j'ai essayé avec un tableau croisé mais c'est pas du tout évident pour une débutante comme moi
                          j'apprécierais encore une autre aide
                          merci
                          0
                      • 1
                      • 2