|
|
|
|
natange, le dimanche 23 septembre 2007 à 11:28:48Configuration: Windows XP Internet Explorer 6.0
|
Salut ,
Si tu as un tableau déjà rempli (feuille 1 ) , tu le sélectionnes et tu fait copier , ensuite tu va sur feuille 2 puis tu fait édition > copiage spécial et tu sélectionnes l'option lier , et si tout va bien les changements que tu feras dans le tableau 1 s'appliqueront au tableau 2 ;)
|
|
1. Sélectionnez le signet de la feuille 1
2. Appuyez sur la touche majuscule enfoncée 3. Cliquez sur le signet de la feuille 2 Une barre de couleur relie les deux feuilles 4. Sélectionnez la feuille 1 5. Entrer vos données Contrôlez la feuille 2. Miracle, les données entrées sur la feuille 1 figurent également sur la feuille 2. Etais-ce ce que vous vouliez?
|
|
Bonjour:
si ce que vous voulez faire correspond bien à transférer une ligne complète d'une page vers une autre, ça devrait être assez simple, sauf qu'il sera plus difficile de rajouter les lignes en bas du tableau N°2.(pour cela, quelqu'un d'autre de plus doué que moi vous donnra peut être la solution, car il faudrait alors trouver le n° de ligne vide en bas du tableau2 et c'est plus difficile.. En fait la solution la plus simple consiste à copier la ligne et l'insérer au dessus de la 1° ligne de la feuille 2: La macro est donc dans ce genre, si vous remplissez votre tableau sur la feuille 1 Sub Macro5() ' <gras>' Macro5 Macro ' Macro enregistrée le 23/09/2007 ' ' Rows("1:1").Select Selection.Copy Sheets("Feuil2").Select Rows("4:4").Select Range("G4").Activate Selection.Insert Shift:=xlDown Sheets("Feuil1").Select End Sub Nota: 1°: la première ligne de la macro définit la ligne à copier. Si vous voulez la choisir en sélectionnant vous même sur la feuille 1, suppimez cette ligne 2°) la ligne Rows("4:4")définit la position de la ligne à insérer sur la feuille 2, placez y celle que vous souhaitez, mais ce sera toujous là, et le tableau s'allongera vers le bas en se remplissant par le haut (là, c'est le hic de cette option) 3°):la derniére ligne de la macro vous fait retourner au tableau 1, si vous la supprimez, vour restez au tableau 2 4°) si vous avez pris l'option de supprimer la ligne 1dans la macro, vous pouvez sélectionner plusieurs lignes contigües à la fois pour les transférer 5°)vous pouvez aussi insérer dans le même style une rangée de cellule seulement, si vous ne pouvez pas prendre la ligne compléte, la macro est à peine plus compliquée (il faut lui dire dans quel sens vous décalez les cellules)et dans ce tous les cas, le plus simple pour vous serait de passer par l'enregistreur de macro: au cas ou vous ne connaissiez pas:(on ne sait jamais) Barre des Taches / Outil/ Macro/ Nouvelle Macro / Enregistrer/ Faite les opérations que vous avez à faire et surtout n'oubliez pas de fermer l'enregistrement en fin d'opération Enfin, pour engager la commande de la macro, je vous conseille de passer par le clavier. Pour cela: Barre des taches / Outil / Macro / Sélectionnez votre macro dans la boite / Sélectionnez option/ choisissez la lettre qui vous convient à associer à controle et fermer la boite par OK Il suffira de taper ctrl+lettre pour que la macro s'exècute. Attention, important: ces macro annulent la possibilité de correction et ne vous permet pas de revenir en arrière en cas de fausse manoeuvre. Bien cordialement Science sans conscience n'est que ruine de l'Ame
|
|
Bonjour,
il faudrait être un peu plus précise pour expliquer ton besoin. Bien sûr que ramener des données d'une feuille sur une autre est possible, et pas toujours obligatoirement par macro. Decris ta feuille source et ta feuille destination, à quelle condition(s) tu recopies, d'où à où, etc En plus tu peux déposer ton fichier sur www.cijoint.fr et colle le lien ici eric |
|
j'au une feuill1 pour la gestion des RDV avec nom-adress-cp-ville-date-devis-produit...... (il peut y avoir plusieurs lignes par personne)
j'ai une feuill2 pour la prospection qui reprend nom-adress-cp-ville de la feuill1 et auxquels j'ajoute des info (il ne peut y avoir qu'une ligne par personne) je souhaite que les lignes que j'ajoute dans feuill1 viennets'ajouter en bas du tableau de la feuill2 voici la macro que j'ai fait ActiveWindow.SmallSroll Down:=-3 Range("A2:D10").select Selection.Copy Sheets("feuill2).select tiveWindow.SmallSroll Down:=-3 Range("a2").select ActiveSheet.paste sheets("feuill1).select Application.CutCopyMode = false mais je n'arrive pas à faire exécuter pour que les lignes de feuille1 se recopie sur feuill2 mais en bas du tableau à la suite des autres lignes. (si en plus elles pouvaient se trier par ordre alphabétique ce serait super) |
|
Bonjour,
[A1].End(xlDown).Select te déplace sur la dernière cellule occupée vers le bas si A1 était occupée. et là tu n'as plus qu'à te déplacer d'une ligne eric |
|
Je ne pense pas que dans votre macro les Smallsroll soit utile(ce ne sont que des déplacements de l'affichage)
De plus, si c'est pour ensuite faire un tri par ordre alaphabétique, il n'y a aucun interet à l'inserer en haut ou en bas du tableau. Il suffit de reprendre la macro qui insére en haut du tableau et de la continuer sur la feuille d'insertion en réalisant le tri. pour cela, englober une large liste plus grande que votre champ et trier , c'est plus facile Soit, si je reprends l'exemple que j'ai donné plus haut adapté à vos A2 :D10 (soit 9 lignes à la fois?) Sub Macro9() ' ' Macro9 Macro ' Macro enregistrée le 25/09/2007 ' ' Sheets("Feuil1").Select Range("A2:D10").Select Selection.Copy Sheets("Feuil2").Select Range("A2").Select Selection.Insert Shift:=xlDown Range("A1:D100").Select Application.CutCopyMode = False Selection.UnMerge Selection.Sort Key1:=Range("A2"), Order1:=xlAscending, Header:=xlYes, _ OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom, _ DataOption1:=xlSortNormal End sub Cette macro va insérer vos lignes en haut du tableau, à partir de la ligne A2 si vous avez mis des titres en A1, fera descendre les autres,et fera le classement de votre tableau selon les référence de la 1° colonne du tableau. La macro limite le champ de tri a D100, mais vous pouvez aller jusqu'où vous le souhaitez, il suffit de modifeir D100 dans la sélection Espérant vous aider avec cela. Peti tuyau: si vous voulez que le tableau final représente l'intial, vous pouvez soit numéroté les lignes sur la colonne du premier tableau correspondante au référence de tri du second, ou insere date et heure de cration de la ligne Dans la même cellule, faite ctrl; pour la date et ctrl+; suivi de / pour date et heure_ sans espace entre les deux. Ainsi vos lignes seront reclassées dans le sens de la création pour incrémenter automatiquement une numération dans la colonne A par exemple, taper dans cellule A2 le chiffre 1 et ensuite "tirer" à partir de A3 la formule suivante sur la hauteur voulue: =SI(ESTVIDE(B3;0;MAX($A$2:A2)+1)) Vos lignes seront numérotés succesivement même si vous en sautez une et votre tableau se remettra en ordre sur la feuille 2 ------- Science sans conscience n'est que ruine de l'Ame |
|
Bonjour,
D'accord avec les remarques et l'idée de base de vaucluse (insérer où c'est plus pratique puisqu'il y a tri ensuite) mais 2 éléments ont été négligés : "feuill2 ...et auxquels j'ajoute des info (il ne peut y avoir qu'une ligne par personne)" Je pense qu'il va falloir passer par "Données / Filtrer / Filtre élaboré..." avec "copier vers un autre emplacement" et "Extraction sans doublons" ou autre solution pour eliminer les doublons Et d'autre part pour les insertions et tris prévoir plus de 4 colonnes, que les infos ajoutées sur feuil2 suivent. cdt eric |
|
Bonjour Eriiic, bonjour Natange
Alors il est possible à mon avis simplement de passer par une recherche. Soit en fait exécuter la macro en sélectionnant la ligne sur la feuille 2 Cette ligne de référence sera remplie avec une formule conditionnelle associée à une cellule comportant la valeur à éviter, et liée à la feuille 1 Si je reprend pour être clair, par exemple pour 3 cellules en ligne A1, A2,A3 feuille 1(il peut y en avor autant que vous voulez, maxi 254!!) Sur feuille 2, la macro va insérer les cellules correspondantes dans un tableau situé sur la même feuille, copier colller Valeur seulement, quelque soit le remplissage de la ligne du tableau 1 La cellule X4 (par exemple) Feuil2 comporte la formule =Feuil1!A1 La cellule Y4 (par exemple)comporte la formule RECHERCHEV, valeur de X4 dans le tableau feuil 2, colonne correspondante Les cellules A1,A2 et A3 comportent respectivement les formules =si($X$4=$Y$4; 0;Feuil1! A1 ou A2 ou A3 Etc... dans tous les cas, la ligne est insérée en utilisant bien sur l'insertion valeur seulement Si X4=Y4, c'est à dire si le nom existe, la ligne sera égale à 0 et la macro en la classant va l'éjecter du tableau . Evidemment, il ne peut y voir dans ce cas qu'une seule ligne traitée à la fois. Nota: bien évidemment, les référence clé de sélection, choisies ici en A4 et B4 feuille2, peuvent être placée n'importe ou Feuil1 , 2, 3 ou ailleurs hors champ Nota: Malheureusement,cette solution ne traite que les nouvelles insertoin, mais pas un tableau existant, sauf à réintégrer en ligne 1 les valeurs du tableau feui1 et lancer la macro à chaque fois, pour le mettre à jour Mais pour tout ce brouillard,excusez moi: D'une part,c'est simple à faire, mais pas facile à expliquer! (J'ai un dossier de coordonnées de personnes qui fonctionne très bien comme cela) D'autre part c'est "ma" solution qui utilise des moyens classiques et la logique (petite macro et formules liées à mes connaissances limitées), mais je ne doute pas qu'une meilleure option soit possible? ........La nuit porte conseil (merci Raymond?). Bien cordialement PS1: Eriiic, je n'ai pas compris votre souci avec les colonnes supplémentaires? PS2:j'ai aussi une combine du même style pour remplacer dans le taleau 2 les données correspondantes à la ligne d'une personne déja enregistrée, mais là, ça devient inexpliquable dans le texte, et il faut déja savoir si ce premier pas convient en partie à défaut de trouver mieux? Science sans conscience n'est que ruine de l'Ame |
|
Re Vaucluse,
Je voulais juste dire que la feuille2 est apparement amenée à être complétée ("...et auxquels j'ajoute des info...") donc sûrement en colonne E, F,... et le Selection.Insert Shift:=xlDown décalera vers le bas sur les colonnes A:D uniquement (largeur de la selection copiée) si je ne m'abuse, les commentaires en E2 par exemple ne seront plus en lien avec la bonne ligne (située x lignes plus bas suite au 'insérer-coller'). Ta méthode doit fonctionner, c'était juste une anticipation sur la question suivante ;-) eric
|
|
On est d'accord Eriiiic!A la limite, la méthode marche sur toute la ligne! Sauf que je pense qu'il y a des solutions plus élégantes et que j'attends avec envie celui qui va nous la proposer.
Bien cordialement Science sans conscience n'est que ruine de l'Ame |
|
Bonjour natange,
2) 'Sheets("feuil1").Select 'Range("A2:D10").Select supprime ces 2 lignes et fais ta selection (4colonnes ou sinon étend ta sélection dans la macro) directement sur la feuille car excel ne peut deviner si tu as ajouté 5 ou 20 lignes, et démarres ton sub directement par 'Selection.Copy '. Si vraiment c'est systématiquement 20 lignes à partir de la dernière c'est faisable Ou autre façon quand tu voudras fignoler : ajouter une colonne (qui peut etre masquée) que ta macro marquera une fois copiée et ta macro ne copiera que celles non encore marquées 1) Je n'ai pas testé mais je pense que ton tri est correct C'est au moment de Range("A2").Select Selection.Insert Shift:=xlDown que ton décalage se produit. Puisque tu finis par un tri colle tes données en bas Pour atteindre la 1ère ligne libre (a condition que TOUTES les cellules colonne A aient une valeur): [A1].End(xlDown).Offset(1, 0).Select tu colles: ActiveSheet.Paste et tu tries.... qcq sites où tu peux trouver de bonnes astuces utiles sur excel : tout d'abord http://www.cathyastuce.com/ http://ericrenaud.fr/ http://www.excelabo.net/ bon courage eric
|
|
Bonsoir Eric
Je pense pouvoir confirmer sans trop de risques, c'est bien à l'insertion que ce produit le décalage. En fait la macro copie, insére et décale jusqu'à la colonne 10, et ne va pas plus loin que ce qu'elle à copié. En fait il faudrait pour résoudre le probléme, sélectionner les lignes entière dans la phase copie,ou au moins une largeur identique au tableau de réception, ainsi tout le tableau serait décalé. Il fallait savoir que le champ de réception était plus large que la zone copiée! CRDLMT Science sans conscience n'est que ruine de l'Ame
|
|
Et bien bravo natange, content que tu aies pris le virus ;-)
2-3 petits trucs pour t'aider à voir comment fonctionne ta macro et rechercher les erreurs: - tu peux poser un point d'arret en cliquant à gauche de ta ligne de code (dans les gris). Un point marron le visualise. Quand tu lances ta macro elle s'arretera ici et ensute tu pourras - faire un pas à pas avec F8. Les lignes sont exécutées une à une et tu peux voir sur ta feuille si c'est réellement ce que tu as prévu (est-ce la bonne sélection, est-ce la bonne valeur dans la bonne cellule, etc) - relancer ta macro jusqu'au prochain point d'arret par F5 (dans une boucle par exemple ou aller à la prochaine section que tu veux tester) -utiliser les espions. menu "affichage / fenetre espions" tu selectionnes dans ton code une variable ou une expression et tu fais un cliqué-glissé dans cette fenetre, tu vois sa valeur en permanence Quand tu auras trouvé comment selectionner tes lignes automatiquement n'oublie pas que tu as les doublons à traiter ;-) Le mieux pour ça est d'utiliser une clé unique que tu te fabriques (par exemple 3 1eres lettres du nom + 2 chiffres...) Bon courage et reviens nous faire part de tes progrès eric |
bonjour à tous
j'ai crée un userform et je souhaiterais insérer les données de mon userform dans la ligne qui suit une ligne déjà remplie lorsque que je click sur mon bouton OK. quelqu'un aurait-il une macro à me proposer.??! merci |
Bonjour à tous!
Je débute dans les macros J'ai réussi à en créer une qui colle une ligne d'une page sur une autre page d'un autre classeur, et ce pour différente ligne. Le problème qui se pose c'est que j'aimerais utiliser cette macro pour plusieurs tableaux. Je m'explique: J'ai un modele de tableau de base que je remplis pour chacun de mes sujets. Je souhaite ensuite rassembler leur moyenne pour les moyenner justement vers un tableau final. J'arrive à récupérer les données de mon premier sujet et à lancer la macro pour qu'elle les colles automatiquement dans le tableau final. Maintenant je souhaiterais que pour le prochain sujet, les mêmes opérations soient effectuées mais en décalant d'une ligne vers le bas et ce à chaque fois que je change de sujet... Est ce que ca vous parait clair? Merci par avance de votre aide, je compte vraiment sur vous! |