Copier/Coller d'une plage vers un autre onglet en macro

Bonjour le Forum,

J'utilise le tableau ci joint "BASE GESTION ATELIER VITALITE" depuis des années pour gérer les stagiaires et les sessions de formation qu’on organise pour la CCMSA. Vous comprendrez en parcourant les onglets ce que j'en fais (génération de session de formation, site, formatrice, enregistrement des stagiaires, pointage absent présent, saisie des questionnaires avant après et comparaison par " bloc de domaine de compétence", feuille d'émargement, et via publipostage word, fabrication des certificats de participation signés....)

J'ai tout fait tout seul, ça m'est sorti par le c*** et en tâtonnant j'ai réussi a faire trois macros satisfaisantes. (makesession, makesite, sortlistag) mais la quatrième macro, je n'y parviens pas :

Elle devrait s'appeler SENDTOLISTAG et devrait expédier le contenu courant du tableau nommé "TTTSTAG" (figurant dans l'onglet "TTTSTAG") de la coordonnée A2 à la coordonnée M15, vers LISTAG (qui est un onglet et un tableau nommé) juste en dessous du dernier enregistrement déjà présent.

Dans LISTAG, les colonnes DEFGH permettent de renseigner de quelle session il s'agit en allant piocher dans TABLEAU DE BORD/BOARD sur la foi du N° ID SESSION (colonne A). ATTENTION, le "copier coller" depuis TTTSTAG que je te demande de réaliser a la même morphologie que les colonnes de LISTAG SAUF CES 5 COLONNES DEFGH qu'il ne faudra pas écraser lors de la copie.

Voilà,

Il y a 3 types de formation générant 3 feuilles d'émargement différentes (Atelier vitalité, nutri activ, et cap bien être) ce sont toutes des formations de formateurs intervenant en milieu rural/agricole auprès de personnes âgées présentant des problèmes psychologiques, ou nutritionnels, ou des addictions, des chutes, idées suicidaires, isolement, stress, etc...

En l'état j'ai 3 fichiers distincts et indépendants strictement identiques, exception faite du nom de la formation, de ce qui apparait sur la feuille d'émargement, l'idéal serait un seul fichier avec 3 onglets LISTAG et dans ce contexte, le contenu courant de TTTSTAG serait expédié tantôt dans le LISTAG d'un type de formation, tantôt dans l'un des deux autres, il ne resterait qu'à modifier le contenu du cartouche de la feuille d'émargement en fonction du type de formation.

Dans l’état actuel, je fais ce transfert TTTSTAG vers LISTAG a la main et c'est pas satisfaisant. Dans TTTSTAG, le bouton "valider la liste & sauvegarder" est destiné à accueillir cette nouvelle MACRO

Voilà, d'avance merci

J'attends de vos nouvelles

bonjour,

Cette macro fait ce que tu demandes :

Sub Galopin()
Dim iR%, Arr, iD%
iR = [TTTSTAG].Rows.Count + 1
iD = [LISTAG].Rows.Count + 1 'ou +2 pour préserver la ligne rouge !
Arr = Feuil8.Range("A2:C" & iR).Value
Feuil1.Cells(iD, 1).Resize(UBound(Arr), UBound(Arr, 2)) = Arr
Arr = Feuil8.Range("D2:M" & iR).Value
Feuil1.Cells(iD, 9).Resize(UBound(Arr), UBound(Arr, 2)) = Arr
End Sub

Nota : Tu utilises des tableaux structurés. Ces tableaux ne devraient pas comporter de lignes vides. Aussi ne sachant pas trop quoi en faire j'ai fait mon collage à cet endroit. Si tu tiens vraiment à préserver cette ligne rouge vide remplacer +1 par +2

A+

Bonjour Galopin,

J'ai réceptionné ta macro et je l'ai collée dans mon dispositif BASE GESTION ATELIER VITALITÉ et.....ça marche

Dans mon tableau/onglet "TTTSAG, de même que dans la feuille d'émargement, il y a 14 ligne de stagiaires maximum. En l'état, ta macro embraque les 14 lignes même si la plupart sont vides. Pour que ce soit carrément le paradis.xlsm L'idéal serait de ne copier que les seules lignes non vides de TTTSAG vers LISTAG, juste en dessous de la dernière ligne de la session précédente.

A fins d’illustration, ci dessous mon tableau LISTAG, garni de 3 sessions pipeau créées avec ta macro ( à compter de la ligne 25). Tu le vois bien, il y a des trous. Les colonnes ABC déterminent de par leur contenu ce qui s'affiche de D à G ainsi que le formateur en colonne T : la recopie vers le bas est manuelle, et il n'y a pas d'intérêt à ce que les colonnes ABC soient "préremplies" au delà de la dernière ligne de stagiaire valable, ce qui devrait être un avantage pour déterminer l'emplacement de la première ligne vide avec "row count", et si la recopie de la formule de D à G + T était automatique, ce serait le top (en allant la piquer dans la ligne juste au dessus je pense).

image

J'ai sincèrement essayé de comprendre ta macro, j'ai compris le concept de dim, qui déclare des variables, qu'on retrouve plus bas dans le code VBA, j'ai vu sur un tuto que row count servait à chercher les lignes vides, pour le reste, je crois que c'est à ce genre de prouesse en excel qu'on distingue un mec comme moi d'un mec comme toi , chapeau bas pour ton boulot VBA, moi je m'y suis cassé les dents.

J'ai fait ce tableau tout seul et il sert quotidiennement, je me démerde à peu près en excel mais mes collègues pas du tout! je voudrais leur faire un dispositif stable et robuste, afin d'éviter les "copier coller" à la main hasardeux, emportant sans distinction formules et données et foutre la pagaille dans la base de gestion. ça me permettra de me consacrer à d'autres trucs et de confier la saisie basique à une collègue (qui ne comprend rien à excel, mais qui sait se servir d'une souris et fait preuve de bon sens).

Je savais pas ce qu'était un "tableau structuré", je suis allé voir sur internet et , oui, j'utilise ces tableaux structurés, dont la syntaxe des formules est encore plus imbitable que celles usuellement utilisées dans les veuilles excel conventionnell, la ligne rouge n'a aucune importance, d'autant plus que j'ai découvert grâce à toi que le tableau se redimensionnait tout seul vers le bas quand les enregistrements dépassaient sa dimension.

Je joins également mon tableau excel, enrichi de ta macro, nommée SENDTOLISTAG et linkée au bouton "valider et sauvegarder" présent dans TTTSTAG

Je te remercie encore pour ton boulot, a peu près complètement conforme à ma demande, merci de t'être occupé de moi

J'attends de tes nouvelles quand t'auras le temps

Très Cordialement,

Le fichier avec la macro corrigée pour ne copier que les lignes utiles :

EDIT : Fichier supprimé (contenu confidentiel)

Nota : Les formules ont été replacée par des formules nommées (plus pratiques) dans le Gestionnaire de Nom

RechVil, RechDatIn, RechdatOut, Konka

Sub SENDTOLISTAG()
Dim iR%, Arr, iD%
iR = [D1].End(4).Row
iD = [LISTAG].Rows.Count + 1
Arr = Feuil8.Range("A2:C" & iR).Value
Feuil1.Cells(iD, 1).Resize(UBound(Arr), UBound(Arr, 2)) = Arr
Arr = Feuil8.Range("D2:M" & iR).Value
With Feuil1
   .Cells(iD, 9).Resize(UBound(Arr), UBound(Arr, 2)) = Arr
   .Range(.Cells(iD, 5), .Cells(iD, 4)).Resize(UBound(Arr), 1).Formula = "=RechVil"
   .Range(.Cells(iD, 6), .Cells(iD, 5)).Resize(UBound(Arr), 1).Formula = "=RechDatIn"
   .Range(.Cells(iD, 7), .Cells(iD, 6)).Resize(UBound(Arr), 1).Formula = "=RechDatOut"
   .Range(.Cells(iD, 8), .Cells(iD, 7)).Resize(UBound(Arr), 1).Formula = "=Konka"
End With
End Sub

A+

Salut Galopin,

C'est tout simplement magique

Bonjour Galopin,

L'autre jour, j'ai fait un test de ta macro et j'ai peut-être pas été assez méticuleux dans mon inspection : je t'explique!

En l'état, dans LISTAG, les enregistrements présents en base sont VALABLES jusqu'à la ligne 25 incluse : Mme PADOVAN

En expédiant, via la macro, le contenu de TTTSTAG vers l'onglet LISTAG il se passe deux choses PAS BONNES.

1° La premier NOUVELLE LIGNE écrase la DERNIÈRE PRECEDENTE

2° DANS LISTAG, Les données présentes dans les colonnes de CN à DB (ce sont des formules de moyennes) ne sont recopiées que pour certaines colonnes,
Dans la base ci-jointe, j'ai viré les enregistrements test au delà de la ligne 25, si tu fais un essai avec des stagiaires PIPO dans TTTSTAG, tu devrais avoir les mêmes symptômes que moi

Je sais pas si c'est la macro ou les "champs nommés", je suis allé voir, j'ai rien modifié, et j'ai rien trouvé à ma portée

Voilà, pour le reste tout marche au poil je crois

D'avance merci

Bonjour,

Pour le transfert modifier cette ligne :

iD = [LISTAG].Rows.Count + 2

Pour la propagation des formules je ne sais pas trop... Mais je pense que les libellés de vos entêtes de colonnes en sont la cause. Trop longs, présence de caractères douteux " , . : " J'ai tenté une stratégie de contournement mais ça m'oblige à renommer une cinquantaine de colonnes, créer une table de paramètres... Pfff !

Pour la gestion de cette base de données des entêtes du type PRETEST1, PRETEST2, POSTEST1, POSTEST2... devraient suffire quitte à utiliser une liste de description dans une feuille de paramètres pour expliciter tous ces en-têtes... Gardez à l'esprit que ces tableaux sont des moyens de stockage complexes pas des présentation PP.

Sur un plan analytique la conception de cette feuille (LISTAG) serait probablement rejetés par un professionnel : Tous ces ITEMS sont des items "métiers" qui n'ont pas vocation à figurer en colonnes. mais pour faire un tableau fonctionnel on choisirait une structure du type LISTAG avec les colonnes A à T mais pour les résultats individuels une autre BD avec dans la colonne A les items (codés ou pas) et dans la ligne 1 les noms de tous les participants. Ainsi toutes les notes des participants seraient lisible colonne 2 pour le premier participant, colonne 3 pour le 2ème... Et les moyennes par groupe analytique àl a fin en bas ou dans un tableau à part...

Bon ça vous arrange de le présenter comme ça, libre à vous, mais vous ne respectez pas vraiment le concept base de données. Donc ne vous étonnez pas que Excel couine un peu...

Je ne vois pas d'autre explication. Peut-être qu'un autre participant aura un autre avis mais en attendant j'en resterai là...

A+

Bonjour,

Je crois que je comprends votre réponse, je fais le même reproche à mes collègues, qui focalisent leur attention sur l'aspect visuel et pas du tout sur le stockage de données qui peuvent être rappelées dans un document/feuille de présentation tiers, il ne sert à rien d'énoncer des choses dans un tableau qui n'a pas d'autre vocation qu'à contenir des données et qui ne sera jamais visualisé, je me bats contre les fusions de cellules et les retours à la ligne qui me rendent hystériques, les espaces et les points dans les numéros de téléphone....

Je n'ai aucune préférence, ça ne "m'arrange pas de présenter ça comme ça", je tâtonne, je bricole

J'ai aussi compris votre idée d'une feuille de scoring distincte et ce serait très bien, mais je ne vois pas comment penser les formules qui y feraient référence, d'autant plus que la taille du tableau, le nombre de stagiaires, n'est pas connu.

En tous cas merci de votre investissement, je vais de ce pas modifier la macro et simplifier l'énoncé des questions/en-têtes de colonne.

Je ne sais pas où l'on trouve une formation à excel et si vous avez une idée, je suis preneur et, du fond du cœur, merci encore

A+ aussi

Sur la formulation... Ce n'était pas une critique ni une accusation juste un constat... La plupart des gens font comme ça car ils utilisent Excel par défaut. N'ayant aucune idée sur la gestion de BD. Ça leur permet quand même la plupart du temps de gérer leurs petites affaires "à minima" (de complications...)

J'ai supprimé mon fichier joint : Veuillez éditer et supprimer vos fichiers joints : Ils contiennent des informations à caractère confidentiel.

J'ai effectué la modif que je préconisai dans les en-têtes et effectivement la propagation des formules se passe bien.

Je vous passe le fichier en MP (Message Privé) à cause des infos personnelles qui subsistent.

Remarquez la concordance des nouveaux en-têtes avec les listes de la feuille Param, mais pour le confort on pourrait aussi insérer dans ces en-tête un commentaire (pop up) qui préciserai un peu le sujet...

Il convient également de revoir les formules de moyenne...

Pour les considérations sur la conception des Tableaux voir ici : Le point 9 développé plus bas dans le lien illustre bien la remarque que j'ai faite.

Ceci dit je convient volontiers qu'il était très tentant de faire comme vous avez fait !

Pour la question sur les formations peut-être que d'autres intervenants peuvent donner leur avis...

A+

Rechercher des sujets similaires à "copier coller plage onglet macro"