Partage
  • Partager sur Facebook
  • Partager sur Twitter

VBA excel : problème copier coller

Sujet résolu
    1 juin 2021 à 10:02:15

    Bonjour à tous,

    J'ai un gros fichier contenant pas mal de tableaux, graphiques [ect.] qui se met à jour selon l'extraction excel d'une base de données. Il y a donc pas mal de code et récemment, alors que mon programme marchait parfaitement depuis un moment, il commence à y avoir des incohérences de traitement.

    On s'intéresse ici à 2 tableaux identiques, chacun dans une feuille différente mais dans le même classeur.

    En cherchant la cause j'ai trouvé que cela apparaît lorsque je bascule une ligne du premier tableau dans le second. Pour cela mon code s'y prend en 3 temps : copie de la ligne en question, collage dans le second tableau, suppression de la ligne du premier tableau.

    Cependant au moment de coller la ligne j'ai remarqué 2 problèmes (qui apparaissent que je fasse la manipulation manuellement ou par mon programme). Lorsque je copie une ligne, elle prend bien les contours indiquant l'activation de copie sur la sélection, cependant :

    - Lorsque je colle les données sur le tableau 2, les données insérées ne sont pas celles copiées mais celle du tableau 1 à la ligne + 1 de la destination du tableau 2. En français, si je copie la ligne 54 du le tableau 1 vers la ligne 6 du tableau 2, les données collées sont celles de la ligne 7 du tableau 1 (alors qu'après la copie, le contour de sélection de copie est toujours sur la ligne 54...)

    - Certaines données comprennent des liens hypertexte comprenant une partie fixe et une partie variable : "www.lienhypertexte.fr/parametre=1523". Le lien n'est pas définie par une formule, c'est une donnée fixe pour les cellules concernées. Pourtant le lien fixe reste le même mais après le collage, le paramètre prend une valeur aléatoire. Par exemple "www.lienhypertexte.fr/parametre=1523" devient "www.lienhypertexte.fr/parametre=9378", ce qui n'a rien a voir avec aucune des données des tableaux

    - J'ai également remarqué d'autres incohérences comme par exemple, le coller normal qui ne copie pas la mise en forme alors que le copier valeurs seulement applique la mise en forme des données copiées...

    C'est difficile d'être clair, je ne peux pas partager mon fichier car c'est pour le travail. Donc voici un petit montage pour illustrer la problématique :

    Est ce que quelqu'un a déjà eu des soucis de ce genre? Est ce que le VBA peut affecter certains paramètres excel ? (en sachant que le problème n'apparaît que sur mon fichier)

    Merci d'avance ! :)

    • Partager sur Facebook
    • Partager sur Twitter
      1 juin 2021 à 12:19:49

      le VBA peut modifier le comportement (ça peut être en partie son rôle selon code et son emplacement)

      Supposition: est-ce que la ligne collée ne correspond pas à la ligne de la feuille de destination se trouvant à la même position que dans l'onglet dont on est censé avoir copier les données ? (pour le redire d'une autre façon, si tu veux copier la ligne 12 de l'onglet source, est-ce que le résultat du collage correspond à la ligne 12 de l'onglet de destination ?)

      • Partager sur Facebook
      • Partager sur Twitter
        1 juin 2021 à 13:56:04

        Merci pour ta réponse @umfred.

        Mon code ne modifie pas le comportement d'excel, à moins que je n'ai fait une fausse commande. Ce qui m'étonnerait car les seules variables excel que je touche sont "Application.ScreenUpdating" et "Application.EnableEvents" en début et fin de programme.

        Ta supposition est presque exacte. Comme expliqué et illustré dans le premier message, la ligne collée correspond à la ligne dans la feuille des données copiées et dont le numéro est celui de la destination plus 1. Par exemple en copiant la ligne 15 d'une feuille vers la ligne 30 de la seconde feuille, les valeurs collées sont celles de la ligne 31 de la première feuille.

        (En sachant que le décalage de 1 est sûrement dû au fait que le tableau de la première feuille commence à la ligne 4 alors que celui de la seconde à la ligne 3)

        • Partager sur Facebook
        • Partager sur Twitter
          1 juin 2021 à 14:20:12

          ça dépend aussi d'où sont appelés tes macros (si ce sont lors des événements des feuilles ou du classeur).

          On est d'accord que ça ne le fait que lors de l'utilisation de la macro ? (pas à la main/souris via les menu copier/coller?)

          Tu pourrais nous donner les 3-4 lignes de code qui font le copier-coller ? 

          • Partager sur Facebook
          • Partager sur Twitter
            1 juin 2021 à 14:36:55

            La macro est appelée par un bouton dans une autre feuille. Et justement, non le problème apparaît même quand je fait la manipulation manuellement.

            Voici le code à l'origine :

            Liste.Range("A" & ligneListe & ":R" & ligneListe).Copy
            ListeD.Paste Destination:=ListeD.Range("A" & ligneListeD & ":R" & ligneListeD)
            Liste.Rows(ligneListe & ":" & ligneListe).Delete Shift:=xlUp

            Après que le problème est apparu j'ai également essayé de le faire en une ligne :

            Liste.Range("A" & ligneListe & ":R" & ligneListe).Copy ListeD.Range("A" & ligneListeD & ":R" & ligneListeD)
            Liste.Rows(ligneListe & ":" & ligneListe).Delete Shift:=xlUp

            J'ai été obligé de me passé de la fonction copy pour dépanner mais cela me cause des potentielles pertes de données (notamment des liens). Donc j'aimerai bien pouvoir me servir de la fonction comme avant... Voici le code que j'ai modifié:

            For i = 1 To 18
                copy = Liste.Cells(ligneListe, i)
                ListeD.Cells(ligneListeD, i) = copy
            Next



            -
            Edité par GeorgeBricare 1 juin 2021 à 14:38:26

            • Partager sur Facebook
            • Partager sur Twitter
              1 juin 2021 à 16:21:50

              Est-ce que les 2 onglets ne sont pas sélectionnés en même temps?
              • Partager sur Facebook
              • Partager sur Twitter
                1 juin 2021 à 16:31:43

                Non je n'ai qu'une feuille sélectionnée à la fois.
                • Partager sur Facebook
                • Partager sur Twitter
                  1 juin 2021 à 16:54:14

                  Je suppose que tu as déjà vérifié les valeurs de ligneListe et ligneListeD au moment de la copie. mais ça n'expliquerait pas pourquoi ça se produit avec un copier-coller manuel :(

                  une histoire de tableau croisé dynamique peut-être

                  • Partager sur Facebook
                  • Partager sur Twitter
                    2 juin 2021 à 9:15:00

                    sauf erreur de ma part la seule façon de vérifier les valeurs de ces lignes est de les traiter 1 par 1. Dans ce cas oui j'ai vérifié aucun écart constaté.

                    Je n'utilise pas de tableau croisé dynamiques se sont des tableaux standards donc je ne pense pas que ça vienne de là non plus ^^'

                    J'ai essayé de copier le tableau de destination dans une deuxième feuille et cela ne me créer pas autant de problème :)

                    Est-ce possible que ce soit un bug sur ma feuille ou le fichier qui est endommagé ?

                    • Partager sur Facebook
                    • Partager sur Twitter
                      2 juin 2021 à 9:51:12

                      pour vérifier les valeurs d'une variable, tu peux mettre un point d'arrêt dans la macro au niveau que tu veux étudier; après en passant la souris au dessus de la variable, tu dois pouvoir voir sa valeur (ou rajouter la variable aux variables espions par un clic droit > ajouter aux espions sur la variable)

                      Si ça fonctionne bien sur une autre feuille de destination, alors oui il y a sans doute un problème au niveau de la feuille :'( 

                      • Partager sur Facebook
                      • Partager sur Twitter
                        2 juin 2021 à 11:15:07

                        Ok c'est bien ce test que j'ai fait et je lis bien les bonnes valeurs.

                        Je pense que je vais rester sur la conclusion du bug sur la feuille et espérer que le problème ne revienne pas.

                        Merci beaucoup pour le temps que tu m'as accordé @umfred ! :)

                        • Partager sur Facebook
                        • Partager sur Twitter

                        VBA excel : problème copier coller

                        × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
                        × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
                        • Editeur
                        • Markdown