Copier des cellules dans une autre feuille sous condition
Bonjour,
Tout d'abord merci aux passionnés qui prennent le temps d'aider les gens comme moi.
J'ai un fichier excel avec plusieurs onglets. Le premier "récapitulatif" me permet de mettre des renseignement dans les colonnes A à G. Je souhaiterai répartir dans chaque onglets suivant (amis, famille, travail) en fonction des critères de la colonne E. Je souhaite, par exemple, que si la cellule E8 = "amis" dans la feuille "récapitulatif" alors les cellules A8 à G8 se copient dans la feuille intitulé "amis" et à partir de la cellule A6. Il faut également qu'il n'y ai pas d'espace entre les lignes des feuilles (amis,famille, travail).
J'espère avoir été explicite. Je sais ou placé les macros, mais je ne connait pas grand chose d'autre en VBA.
je joint le fichier.
Merci encore pour votre aide précieuse.
Cordialement
Salut et bienvenue sur le Forum,
Je trouve qu’il y a un ou deux points obscurs dans ta demande. Pourquoi précises-tu qu’il ne faut pas d’espace entre les lignes (mais probablement que tu veux dire qu’il ne faut pas de lignes vides) alors que toi-même tu laisses la ligne 7 vide sur la feuille
« récapitulatif » et les lignes 6 vides sur les autres feuilles ??
Ensuite, pourquoi ne reporter que les données des colonnes A à G alors qu’il y a des titres de colonnes dans les feuilles réceptrices pour les colonnes A à K ?
Enfin, je te propose quand même une solution et on corrigera ce qui est nécessaire. Dans le fichier ci-joint, à chaque fois que tu sélectionnes une feuille autre que la feuille « récapitulatif », une macro efface toutes les données déjà en place dès la ligne 7, passe en revue chaque ligne de la feuille « récapitulatif » dès la ligne 8 et reporte dans chaque feuille les données qui la concernent. De cette manière, tes feuilles réceptrices sont toujours actualisées en fonction de la feuille « récapitulatif ». J'ai plus la liberté de reporter les données des colonnes A à K.
Attention, si des données devaient être conservées dans les feuilles réceptrices, il faudra modifier le code (mais alors il faudra des informations plus précises de ta part).
Et « re-attention » : la casse doit être exacte. Le « Nom 7 » n’est pas reporté car il est écrit « Amis » (avec une majuscule) dans la colonne E alors que le nom de la feuille « amis » est écrit avec une minuscule. Si ceci ne convient pas, il faudra également modifier le code.
Le code ci-dessous est placé dans "ThisWorkbook" :
Option Explicit
Private Sub Workbook_SheetActivate(ByVal Sh As Object)
Dim DerLig As Integer, i As Integer, DerLig_Bis As Integer
Application.ScreenUpdating = False
If ActiveSheet.Name <> "récapitulatif" Then
Rows("7:" & Rows.Count).Delete
DerLig = Sheets("récapitulatif").Range("E" & Rows.Count).End(xlUp).Row
For i = 8 To DerLig
If Sheets("récapitulatif").Range("E" & i) = ActiveSheet.Name Then
DerLig_Bis = Application.WorksheetFunction.Max(7, Range("E" & Rows.Count).End(xlUp).Row + 1)
Sheets("récapitulatif").Range("A" & i & ":K" & i).Copy Destination:=Range("A" & DerLig_Bis)
End If
Next i
End If
End SubA te relire.
Bonjour Yvouille.
Effectivement je ne veux pas d'espace. Je me réserve une ligne vide (espace) pour des raisons esthétique, mais il est vrai que je pourrais les supprimer.
Je veux reporter uniquement les données des colonnes A à G car chaque feuilles va avoir des titres et commentaires différents dans les colonne H à ....x.
Sinon ton code fonctionne a merveille, merci.
Je vais éclaircir un peu ma requête et je te reviens.
a bientôt
bonjour: bonjour Yvouille (du leman)
un essai pour les privés de VBA
cordialement
WAOO!
Et tout ça sans VBA!
Ok, c'est exactement ce que je cherche. Je vais décortiquer la formule pour la reproduire dans mon fichier originel.
Merci beaucoup à toute la communauté et peut être à bientôt.
Et surtout quel rapidité et efficacité, j'suis bluffé !!
Bonjour à vous deux,
Si je rajoute plusieurs lignes sur la feuille ‘récapitulatif’ – disons une cinquantaine – dont la colonne ‘classement’ est ‘travail’, je n'ai pas tous les résultats sur la feuille 'travail'. Avec ma solution oui.
Si je rajoute – à condition d’y penser, car si dans deux ans tu ajoutes une cinquante et unième données pour la feuille 'travail' et qu'il n'y a que 50 formules en place, vas-tu le remarquer – par incrémentation de plusieurs colonnes des formules sur la feuille ‘travail’ afin d’avoir tous les résultats voulus, le programme bloque chez moi (J’ai alors l’indication ‘Ne répond pas’ et je dois fermer Excel). Est-ce que ceci se passe aussi chez vous ?
Les données reportées sur les feuilles réceptrices le sont dans l’ordre inverse de la feuille ‘récapitulatif’ ; avec ma solution, dans le même ordre.
François : les lignes vides sont du poison pour Excel. Pour l’esthétisme, agrandi la première ligne après les titres ; c’est encore plus joli et ça ne créera jamais des problèmes par la suite (par exemple lorsque tu auras mordu aux macros et que tu ne pourras plus t’en passer
Tulipe, quand est-ce que tu t'y mets, aux macros ? Tu m'avais promis, non ?
Amicalement.
re
merci mais......
n'oublie pas que la solution "formule" est toujours plus lourde et moins rapide que du vba et,,,,,, que si un malotru vient à saisir à la place de la formule cette cel est morte (ou alors il faut proteger la feuille )
songe a la proposition de yvouille qui; (avec quelques amenagements) sera toujours plus performante ; il te les proposera ;je le sais
cordialement
J'aimerai tellement me mettre au macro, mais j'ai pas vraiment le temps, peut être un jour.
Tulipe : pourrais tu me donner le descriptif en texte clair de ta formule, je maitrise un peu les formules mais je ne comprends pas tout les termes.
Merci a tous les deux
salut yvouille
j'avais taté mais ; je n'ai pas l'aide ;(pas installée , pourquoi ???) et meme , c'est de l'hebreu reservé aux initiés ,tartinée de grands mots abstraits , sans exemple concrets
exemple : essaie d'oublier une virgule ; je te met au defit d'Y trouver le remede ...... alors les erreurs de syntaxe , de compilation ; 1004 ; l'objet....... , range ne fait ...... . si tu savais le nb dheures que j'ai passé ,ne serait - ce que pour une simple addition (meme en s'inspirant de l'enregistreur) ;tu en serais ebaubis
d'ailleurs si il existe un club exel dans la SOMME (80) ,je reste ouvert
sinon si j'etais toujours resident de la haute (74) thonon ,j'aurais volontier pris la navette a Evian, pour que nous nous rencontrions et; là ;on aurait "cassé la barraque"
et pourtant je cherche mais c'est comme le solfege ; je conçois mais n'arrive pas a appliquer (je suis guitariste de jazz, entre autre) , je dois certainement manquer de rigueur........
un jour probablement (question de declic) ; en attendant je vise toujours les codes proposés ,en m'y voyant ......
cordialement
pour françois
voici qques explications (comme tu ne les auras jamais dans quelque aide que ce soit)
principe de base
on part a la chasse d'un gibier qui correpond à un critère et, pour ce faire il faut lui mettre un dossard numeroté
1) comment mettre un n°
grace a SOMMEPROD :qui chope ce qui correspond au critere ( plage = critere) ;cette fonction renvoie cela sous forme de vrai ou faux donc si on le multiplie par le n° de la ligne correspondant : que l'on obtient grace a LIGNE (sans le S); on se retrouve avec une "echelle" de valeurs croissantes intercalée de 0 pour les valeurs qui ne collent pas
2) les dossarts sont desormais numerotés ; il faut maintenant les separer des 0
donc (pour le plus simple) c'est d'employer GRANDE.VALEUR qui comme son nom l'indique trie par ordre decroissant ; cela evite d'avoir a echapper la tartine des 0 et permet directement d'aller au but ; c a d ,cibler les val autres que 0 ( bien sur le resultat est inverse de ce qui est saisi dans la base ,mais est-ce catastrophique ?) . pour renseigner le rang de la grande valeur on utilise simplement LIGNE(A1) sans mettre de $ pour pouvoir profiter de la croissance de ce coef de rang lors de l'incrementation de la formule
3) les n° sont triés ;il ne reste plus qu'a les attribuer avec INDEX >>>n° de ligne
4)il n'y a que quelques dossards pour la meute , mais la meute court toujours ; et ça fait brouillon quand il n'y a plus rien a tirer
donc ,il faut prendre le probleme a la racine ; c'est pourcela que l'on commence par une condition (SI
si le n° de la premiere ligne (quiest un nombre 1) devient superieur à la quantité du critere consideré (NB.SI) alors stop, sinon on continue à attribuer par n° (issus de SOMEPROD, je le rapelle )
pour faciliter l'ecriture des plages ;je les ai nommées ;pour voir comment ,tu fais Ctrl et F3 en meme temps
tu sais tout maintenant ; mais il y a aussi d'autres façon de proceder .........
cordialement
bonjour ;
la formule ne fonctionne pas avec mon tableau !
besoin d'aide; merci