Partie 2 de la macro- recopier des lignes à la fin d'un tab
Bonsoir,
Donc, je vais exposer les choses en essayant d'être le plus clair possible.
Donc, bigdaddy154 m'a fait une macro qui marche super bien.
Cette macro consiste à recopier une ligne de formule sur une feuille Final, autant de fois que la valeur d'une cellule se trouvant sur la feuille Calcul.
En gros, si la cellule a pour valeur 100, alors la macro recopie 100 fois à la suite cette ligne de formule.
Pour finaliser ma recherche, la macro secondaire (qui sera executé par un bouton classique) devra
Recopier ces lignes de ma page qui s'appelle final, dans une autre page qui s'appelle mouvement et à à la fin d'un tableau.
Les lignes doivent aller à la suite du tableau déjà présent dans la feuille mouvement, qui est la source des données, avec des formules.
Déjà, il faut que la macro comprenne qu'elle copie les lignes à la suite du tableau qui s'appelle Tab_Fichemouvement.
peut-être il faut prévoir une cellule qui détermine le nombre de lignes du tableau ? ou de la feuille qui sont occupées ?
Si il y a 400 lignes occupées, alors il copie à partir de la 401 par exemple.
Le petit truc délicat, c'est qu'il faut copier ces lignes à deux reprises en ce qui me concerne.
Pour être plus clair,
Au départ, la macro a copier des lignes sur la feuille Final, allant de B6 à R6, puis B7 à R7, B8 à R8,... selon la valeur d'une cellule se trouvant sur une autre feuille nommée Calcul en BF1
Donc, nous avons un nombre de lignes déterminer sur la feuille Final, selon la valeur d'une cellule qui se trouve sur la feuille calculBF1.
Ce qui veut dire, que si cette cellule, vaut 20, alors la macro à copier 20 lignes, et devra ensuite recopier ces 20 lignes dans une autre feuille (mouvement, à la fin de la dernière ligne d'un tableau.
Et voici comment cela se passe lorsque je le fait manuellement ou avec une macro enregistré.
donc je copie les lignes B6 à G25 de ma feuille Final (puisque la macro avait au départ copier 20 lignes en partant de B6.
Puis je vais copier ces lignes B6 à G25 sur ma feuille mouvement, à la fin du tableau dont je ne connais pas forcément la dernière ligne
Je fais un copier valeur, à partir d'un B464 par exemple (copier valeur)
Puis, je vais sur ma feuille final prendre l'autre partie des lignes K6 à M25, pour les recopier (copie valeur) sur ma feuille mouvement, à partir de K464 par exemple, comme la première partie.
Voici la macro enregistrée, mais il faut qu'il copie les éléments vraiement à la fin du tableau pour que cela soit pris en compte (copier valeur, comme la macro que j'ai enregistré)
Sub Macro3()
'
' Macro3 Macro
'
'
Range("B6:G25").Select
Selection.Copy
Sheets("Mouvement").Select
Range("B464").Select
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
Sheets("Final").Select
Range("K6:M25").Select
Application.CutCopyMode = False
Selection.Copy
Sheets("Mouvement").Select
Range("K464").Select
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
End SubJe ne pense pas que j'ai été très clair, mais si besoin, je peux mettre le fichier
Merci beaucoup de votre aide, car je n'y connait vraiment pas grand chose en vba, voir quasiment rien
L
Je viens de créer une cellule sur ma feuille calcul, qui donne les nombre de lignes déjà rempli sur la feuille mouvement en prenant en compte la tableau
C'est la cellule de la feuille calcul!BH1
Donc, pour mon exemple, elle donnera la valeur 464, ce qui signifie que les lignes de ma feuilles Final, devront être copié à partir de la lignes 464 de la feuille mouvement
Je ne sais pas si cela peut aider
Salut,
Beaucoup d'explications peu claires, pas de fichier modèle
Une vraie bouteille d'encre de chine
Cordialement.
Yvouille a écrit :Salut,
Beaucoup d'explications peu claires, pas de fichier modèle
Une vraie bouteille d'encre de chine
Cordialement.
Salut Yvouille,
C'est vrai que tu as raison, ce n'est pas vraiment clair mes explications.
Voici, donc ce que je recherche, exposé clairement cette fois ci, avec le fichier pour effectuer la macro.
Donc, j'ai sur une feuille qui s'appelle Finalt un certain nombre de lignes qui peut être variable.
Je dois recopier ces lignes dans une autre feuille qui s'appelle Mouvement de façon un peu particulière (je veux dire un copier coller par valeur et pas un simple copier coller).
Avant tout, pour savoir déjà le nombre de lignes qui devront être copier, j'ai créer un cellule sur une feuille Calcul!BI1 (bi1) qui compte le nombre de lignes à prendre en considération sur la feuille final, à partir de la ligne 6. Ce sera la variable1
Donc, pour résumé ce point, imaginons que la cellule de ma feuille Calcul!BI1 indique 50, alors la macro doit prendre en considération 50 lignes de ma feuille Final, à partir de la ligne 6.
Pour être plus précis, dans ces lignes, les colonnes à prendre en considération seront de la colonne B6 à G(variable1) et de K6 à M(variable1).
En sachant que ma variable1 est égal à ma cellule sur la feuille Calcul!BI1 (bi1)
Dons si ma variable1 indique 50, alors la macro doit sélectionner B6 à G56 et K6 à M56.
Ensuite, la macro doit recopier ces fragments de lignes dans ma feuille Mouvement, ou se trouve un tableau. Il faudra que ces lignes soient recopier à la fin du tableau.
Donc, j'ai créer une autre variable2 qui indique à partir de quelle ligne, la copie doit commencer. Cette variable2 est sur ma feuille de Calcul dans la cellule BH64
Donc si ma variable2 indique 464, alors la recopie de mes lignes de ma feuille final, s'effectueront à partir de la ligne 464.
Ainsi, comme expliqué, la macro sélectionne un certain nombre de lignes de ma feuille Final à partir de la ligne 6 en fonction de ma variable1 se trouvant sur la feuille de Calcul!BI1 (bi1)
Elle sélectionne de B6 à G(variable1) et de K6 à M(variable1).
Elle recopie (en copier/valeur) ces données, sur ma feuille Mouvement, à partir de la ligne correspondant à la variable2
Cette recopie s'effectue ainsi :
Recopie B6 à G(variable1) et de K6 à M(variable1) de ma feuille Final
sur ma feuille mouvement (en copier / valeur)
De B(variable2) à G(variable2 + sans soute variable1) et K(variable2) à M(variable2 + sans soute variable1) .
Je ne pense pas que cela soit trop compliqué,
Voici ce que cela donne, en ayant fait l'opération avec l'enregistreur de macro (avec variable1 = 20 et variable2 = 464)
Sub Macro3()
'
' Macro3 Macro
'
'
Range("B6:G25").Select
Selection.Copy
Sheets("Mouvement").Select
Range("B464").Select
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
Sheets("Final").Select
Range("K6:M25").Select
Application.CutCopyMode = False
Selection.Copy
Sheets("Mouvement").Select
Range("K464").Select
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
End SubDonc, dans le code, sans doute un truc du genre en ce qui concerne les variables à travers le code ci-dessus :
Sélection de B6 à G6+variable1 de ma feuille Final
range select ma feuille mouvement Bvariable2
Sélection de K6 à M6+variable1
range select ma feuille mouvement Kvariable2
et ensuite il efface lignes qu'il a recopier de ma feuille final qui ne servent plus à rien, soit les lignes :
Là, il faut pas s'embêter
efface les lignes B6 à R1000
Voilà,
Je mets le code de bigdaddy154 qui concerne la macro initial qui sera affecté à un bouton 1, et qui est dans le même style un peu
Sub copier()
nb = 5 + sheets("Calcul").Range("bf1")
Range("b6:b" & nb).Select
Range("b5:r5").Copy Destination:=Selection
End Sub
En fait, cette macro, me copie ma ligne B5 à R5 de ma feuille Final à partir de la ligne et de la cellule B6 de ma feuille final.
Et elle recopie ces lignes à la suite, selon une variable situé sur la feuille calcul en BF1
Donc, si j'ai une variable de 10,
Elle recopie B5 à R5 sur B6 à R6, B5 à R5 sur B7 à R7, et cela 10 fois.
Donc, voici le fichier joint
http://www.cjoint.com/c/ELufdqsFItA
Merci pour votre aide, encore un foisRe,
Ton fichier n'a pas passé.
Essaie de le passer avec les moyens du Forum (''Ajouter des fichiers joints'' en-dessous du message que tu écris). Attention, tu peux recevoir un message – à peine visible – qui t’indique que le fichier dépasse les 300 Ko (ou une unité semblable). Tu dois alors essayer de compresser ton fichier (dans ton arborescence, clic-droit sur le nom du fichier puis choisir l’option ‘’Envoyer vers / Dossier compressé’’). Si ce n’est toujours pas suffisant, essaie d’alléger ton fichier-modèle (si tu as 10000 lignes mais que 10 lignes représentatives suffisent à démontrer ton problème, efface-en 9990, supprime les feuilles qui ne servent pas à ta démonstration, etc.). En dernier recours, passe par des sites annexes tel que C-Joint http://www.cjoint.com/
Dans tous les cas, tu peux contrôler si ton fichier a bien été joint à ton message avant de poster par l’option ‘’Aperçu’’.
Amicalement.
Ok,
Je vais essayer de le mettre en fichier-joint.
Puis de nouveau sur le site cjoint.com :
https://www.cjoint.com/c/ELuity7PuCA
Le fichier fait 250 KO, je crois.
merci
Re,
Je trouve que tu donnes des explications assez emberlificotées, répétant plusieurs fois la même chose. De plus, tu donnes des informations à propos de ta manière d’imaginer la solution qui ne peuvent que prêter à confusion.
Voici comment moi j’aurais présenté le problème, ce qui te permettra de voir si je t’ai bien compris : Je souhaite copier les données de la feuille ‘’Final’’ vers la feuille ‘’Mouvement’’. Il ne faut prendre que les données des colonnes B à G de la feuille source et les coller dans les colonnes B à G de la feuille cible – à la suite des données en place sur cette feuille - de même que pour les données des colonnes K à M à destination des colonnes K à M. Le nombre de lignes sur la feuille ‘’Final’’ est variable. Les données en place sur la feuille ''Final'' doivent encore être supprimées en dernier.
Sur la base de ce que j’ai compris ci-dessus, j’ai écrit une macro qui réalise ceci : elle copie toutes les données des lignes en place sur la feuille ‘’Final’’, de la colonne B à la colonne M et les colle sur la feuille ‘’Mouvement’’, à la suite des données en place.
Par la suite, les données des lignes exportées sur la feuille ‘’Mouvement’’ des colonnes H à J sont effacées, puisque non-désirées, de même que les données de la feuille ''Final''.
Ma macro n’utilise pas tes données de la feuille ‘’Calcul’’ en BI1 et en BH1 ; ces variables sont recherchées directement dans le code.
Ca correspond à ton attente ?
Merci Yvouille,
La macro semble donner le résultat que j'attends, merci beaucoup.
Je ne sais pas comment tu as fait pour te fais des variables que j'avais mis en place. Je pensais que cela aurait été utile pour la macro et qu'elles étaient indispensables.
Je ne peux pas rester longtemps, je regarderais plus en détail ce soir la macro avec des tests
J'ai un ami qui est chez moi, je dois lui installer des truc sur son ordinateur portable tout neuf, et il y connait rien.
Ccleaner, avast, anti malware, acrobat reader,...
Merci encore, je te tiens au courant
Bonne journée et bonne fêtes au cas ou ..
Re,
La manière la plus simple pour rechercher la dernière ligne d’un tableau et l’instruction
Variable_X = Range("AAA" & Rows.Count).End(xlUp).RowSi on considère que Rows.Count tient compte du nombre de lignes de la version Excel sur laquelle on travaille (par exemple avec les versions actuelles d’Excel = 1'048'576 lignes), l’instruction End va rechercher la dernière ligne (Row) renseignée de la colonne AAA en partant de la cellule AAA1048576 et en cherchant vers le haut (XlUp).
Il est bien entendu que si dans ce tableau, la colonne AAA n’est pas systématiquement renseignée, il faut trouver une autre solution afin de trouver la dernière ligne de ce tableau.
amorapa a écrit :J'ai un ami qui est chez moi, je dois lui installer des truc sur son ordinateur portable tout neuf,
Fais gaffe de ne pas lui bousiller son ordi
Chaleureusement.
Bonjour tout le monde,
un petit essai de ma part également.
Cordialement.
Merci a tous les deux,
Je vais regarder cela tranquillement ce soir, car je suis avec un ami pour lui installer des logiciels de base sur on ordinateur winrar, acrobat reader, ccleaner, anti malware, ...Ah oui Avast aussi
Je vous remercie beaucoup, vraiment, et je vous tiens au courant dés que j'aurai regarder
En attendant, je vous souhaite une bon dimanche
Salut BigDaddy,
Considérant que la grosse difficulté de ce fil était de comprendre les explications d’Amorapa et vu la ressemblance de nos solutions, je pense quand même que l’on peut dire que je mérite 51 % des remerciements
Amicalement.
Hello Yvouille,
oui il est vrai que le décryptage était la partie la plus difficile j'avoue
Pas de soucis je te laisse les 51% de remerciements sans aucun problème.
Bonsoir Yvouille et bigdaddy154,
Je viens de tester vos macros, et elle marchent super bien. Super content et je vous remercie à tous les deux.
Il y a juste un tout petit petit hic, c'est lorsque je clique sur le bouton, et qu'il n'y a pas de données, je parle de lignes à transférer.
Dans ce cas, cela me transfère la ligne avec les entêtes et parfois la ligne cachée (ligne 5 de ma feuille Final).
Je pense que dans ce cas, il faudrait juste pouvoir rajouter dans la macro une condition.
Si la ligne 6 de la feuille Final est vide (na pas de donnée), voir tout simplement la cellule B6 de la feuille final, alors la macro ne fait rien, sinon elle s’exécute.
Voilà, c'est pour vous dire que c'est le seul petit truc qui faut gérer, et cela est parfait.
En tout cas, vraiment un grand merci, et lorsque vous aurez un moment, si vous pouvez arranger ce petit souci.
bigdaddy154, tu m'as bien fait reire lorsque tu disais que le plus dure a été de comprendre ce que je voulais. Yvouille ne comprenait pas, et même moi, lorsque je me relisais, j'avais du mal à comprendre mes explications. LOL,
En tout cas, vraiment un grand MERCI à tous les deux.
Re,
avec la modification si y a plus de données dans la feuille Final.
Cordialement.
Bonsoir,
Merci pour la rectification, vraiment merci à toi et à Yvouille.
Je vais regarder le code pour essayer de comprendre.
Bonne fêtes et à bientôt sur le forum.
encore un GRAND MERCI A TOUS LES DEUX
Salut Amorapa,
Voici ma version avec la correction demandée.
Tu sembles content de mon travail alors je voudrais juste te rappeler que tu m’avais quand même traité de ‘’machin’’ sur un autre fil et que tu n’as pas daigné t’en excuser lorsque je t’ai fait la remarque, ce que je trouve dommage
J’espère pouvoir t’aider encore bien des fois à l’avenir.
Amicalement.
Salut Yvouille,
Merci pour le correctif de la macro, et un GRAND merci pour la maco dans son ensemble.
Désolé pour l'autre fois.
Sans vouloir rentrer dans les détails, je vie une période très difficile sur le plan personnel.
la macro marche très bien et cela me donne du courage au delà de ce que tu peux sans doute imaginer.
Mille merci et désolé pour l'autre fois.
Bonnes fêtes à toi