Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1431 connectés 

  FORUM HardWare.fr
  Programmation
  VB/VBA/VBS

  [résolu]copie d'une feuille sur une autre

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

[résolu]copie d'une feuille sur une autre

n°1180506
rubycube
Posté le 21-08-2005 à 10:51:51  profilanswer
 

Bonjour à tous,
 
Débutant dans la programmation j'ai besoin de conseils.
J'ai créé un tableau excel:
Colonne A des noms de joueurs Basket
Colonne B Nombre de shoots  
colonne C tirs réussis
etc....
 
Je voudrais après un filtre copier la colonne A dans une autre feuille (sur le même classeur).
 
J'ai commencé à faire une macro, mais lorsque je l'exécute la recopie se fait avec les colonnes B,C etc..
Pourriez vous me dire comment faire pour supprimer les colonnes superflues.
 
Sub CopieZoneCourante()
 Application.ScreenUpdating = False
 Selection.AutoFilter Field:=2, Criteria1:="Tirs"
    Range("A3" ).CurrentRegion.Copy Sheets("feuil2" ).Range("B3" )
    Application.CutCopyMode = False
 Selection.AutoFilter Field:=3, Criteria1:="tirs réussis"
    Range("A3" ).CurrentRegion.Copy Sheets("feuil3" ).Range("B3" )
    Application.CutCopyMode = False
 Selection.AutoFilter Field:=4, Criteria1:="fautes"
    Range("A3" ).CurrentRegion.Copy Sheets("feuil4" ).Range("B3" )
    Application.CutCopyMode = False
    Selection.AutoFilter Field:=2
  Application.ScreenUpdating = True
End Sub
 
 
Merci par avance


Message édité par rubycube le 25-08-2005 à 17:12:20
mood
Publicité
Posté le 21-08-2005 à 10:51:51  profilanswer
 

n°1180565
jpcheck
Pioupiou
Posté le 21-08-2005 à 12:49:55  profilanswer
 

bjr, je n'utilise pas les fonction copy et paste d'excel, mais peux-tu me dire à quoi correspondent les "Currentregion", je pense que c'est assimilé par excel comme tes 4 ou 5 colonnes...
en bidouillant, tu peux faire une copie si d'une page à l'autre
...

n°1180633
rubycube
Posté le 21-08-2005 à 14:46:06  profilanswer
 

Le CurrentRegion correspond à une zone variable, chaque fois que je filtre la colonne A, la liste est plus ou moins longue, cela détermine la fin de la liste en partant de la cellule (A3). Je pense que tu as raison lorsque tu dis que cela englobe toutes les colonnes sur X lignes.  
Aurais tu une autre solution à me proposer?

n°1180646
galopin01
Posté le 21-08-2005 à 15:10:16  profilanswer
 

bonjour,
Pour copier une colonne jusqu'à la fin on utilise généralement
Range("A3:A" & Cells(65535, 1).End(xlUp).Row).Copy Sheets("feuil2" ).Range("B3" )  
 
Appliqué à la deuxième colonne ça donne :
Range("B3:B" & Cells(65535, 2).End(xlUp).Row).Copy ...
 
A+


---------------
roger
n°1180781
rubycube
Posté le 21-08-2005 à 18:37:18  profilanswer
 

Merci Galopin j'ai cherché compliqué alors que!!!!!!!!!

n°1181051
guendalf
Posté le 22-08-2005 à 10:34:24  profilanswer
 

Pour recuperer le nombre de lignes utilise dans une feuille Excel, il y a plus joli que Cells(65535, 1).End(xlUp).Row :

Code :
  1. UsedRange.Rows.Count


---------------
Guendalf
n°1181073
galopin01
Posté le 22-08-2005 à 11:11:26  profilanswer
 

Bonjour,
(65535, 1).End(xlUp).Row renvoie la dernière ligne d'une colonne
ce qui n'a souvent rien à voir avec
UsedRange.Rows.Count (nombre de lignes utilisées dans une feuille)
ça n'a rien à voir avec l'élégance : c'est parfois toute la différence entre une macro qui va jusqu'au bout et une macro qui plante !
A+


Message édité par galopin01 le 22-08-2005 à 11:13:23

---------------
roger
n°1181123
guendalf
Posté le 22-08-2005 à 12:01:59  profilanswer
 

Oui mais UsedRange etait un exemple.. si c'est la premiere colonne, rien ne t'empeche d'utiliser la methode Columns:

Code :
  1. ' renvoie la derniere ligne utilisee de la colonne 1 (A)
  2. ActiveWorkbook.Worksheets(1).UsedRange.Columns(1).Rows.Count


 
Bien entendu (65535, 1).End(xlUp).Row marche aussi, mais je trouve etrange d'aller tout a la fin pour remonter ensuite avec .End(xlUp). Et tu seras surement d'accord avec moi que pour quelqu'un qui ne connait pas cette astuce, c'est un peu complique de comprendre que ca renvoit la derniere ligne de la colonne 1.
Mais c'est vrai que lorsqu'on cherche sur le net, tout le monde utilise cette astuce..  :??:  
 
A+


Message édité par guendalf le 22-08-2005 à 12:07:42

---------------
Guendalf
n°1181142
knakes
Posté le 22-08-2005 à 12:20:50  profilanswer
 

End(xlDown).Row c'est pas mal aussi. Bref. et avec le filtre ca fonctionne normalement ?


---------------
now : do nothing
n°1181397
rubycube
Posté le 22-08-2005 à 17:02:39  profilanswer
 

J'ai fait les 2 méthodes, cela marche avec les filtres.
Encore merci à tous

mood
Publicité
Posté le 22-08-2005 à 17:02:39  profilanswer
 

n°1181664
galopin01
Posté le 22-08-2005 à 22:24:12  profilanswer
 

Bonsoir,
Si tout le monde uitilise cette formule c'est qu'elle évite bien des surprises...
Si on peut à la rigueur exploiter End(xlDown) avec prudence, UsedRange ne me parait vraiment pas recommandable dans ce genre d'exercice.
En fait j'ai rarement vu UsedRange utilisé à bon escient autrement que dans un algorithme destiné à purger les cellules inutiles.
A l'intention de guendalf j'ai concocté ici un petit comparatif sur les mérites comparés des 3 formules...
Y a pas de truc !
 
A+

n°1182079
guendalf
Posté le 23-08-2005 à 11:01:04  profilanswer
 

galopin01 a écrit :

Bonsoir,
Si tout le monde uitilise cette formule c'est qu'elle évite bien des surprises...
Si on peut à la rigueur exploiter End(xlDown) avec prudence, UsedRange ne me parait vraiment pas recommandable dans ce genre d'exercice.
En fait j'ai rarement vu UsedRange utilisé à bon escient autrement que dans un algorithme destiné à purger les cellules inutiles.
A l'intention de guendalf j'ai concocté ici un petit comparatif sur les mérites comparés des 3 formules...
Y a pas de truc !
 
A+


 
Whaou! Effectivement je suis étonné sur le comportement de UsedRange... pourquoi renvoie-il $A$3:$A$31 comme plage au lieu de $A$3:$A$29  :??:


---------------
Guendalf
n°1182334
galopin01
Posté le 23-08-2005 à 14:42:21  profilanswer
 

Ponjour,
Parce que UsedRange garde la trace de certaines opérations qui ont été effectuées sur des cellules, même si celà a été effacé. Oui Mais... il n'est pas simple de déterminer quand il garde la trace... ou pas.
C'est la raison pour laquelle on l'utilise parfois pour alléger des classeurs un peu trop volumineux.
Si tu formates toute une colonne en gras UsedRange ne le vois pas tant que tu n'as pas écris dans une cellule. Si tu écris dans une ce ces cellules UsedRange s'en souviendra même si tu remets en maigre ou que tu SUPPR.
La seule façon qui me vienne à l'esprit de modifier UsedRange est de supprimer des Lignes Entières.
Toutefois il faut en user avec modération car UsedRange ne détecte pas les zones nommées par exemple...
Si tu affectes le nom "ref" à une plage de cellule "A1:A55" par exemple UsedRange ne détectera pas que cette plage est "sensible" tant qu'elle n'aura pas été écrite et/ou formatée.
A l'inverse Usedrange ne se souvient pas forcément qu'une plage à été écrite (mais non formatée)... Bon. Je te laisse faire quelques expérience sur ce thème !
A+
 

n°1183066
guendalf
Posté le 24-08-2005 à 10:28:20  profilanswer
 

galopin01 > Merci pour ces informations, je pense que ce sera utile a bcq de monde. Car la comparaison entre ces differentes methodes est plutot mal documente (pour ne pas dire inexistante).
Enfin je trouve tout de meme assez anormale que UsedRange garde la trace de cellules qui ont contenu quelques chose et qui sont vides maintenant. Enfin en tout cas, j'ai un peu de mal a trouver une utilite a ceci. Mais merci pour tout, je vais l'utiliser avec plus de precautions desormais ;)


---------------
Guendalf
n°1183705
AlainTech
Pas trouvé? Cherche encore!
Posté le 24-08-2005 à 20:44:42  profilanswer
 

Salut à tous,
 
Petite explication complémentaire concernant les cellules "utilisées".
 
Comme l'a bien dit galopin01, tout changement dans les cellules est mémorisé et donc ces cellules sont marquées comme utilisées.
 
La seule façon de supprimer ces références fantômes est de supprimer (attention, Supprimer dans le menu Edition, pas la touche Delete) les lignes et/ou colonnes concernées.
Mais ça ne suffit pas encore.
Il faut encore sauver le document.
 
Pour visualiser le phénomène, sauvez un document qui ne contient qu'une feuille vierge.
Tapez qqch dans la cellule A110, validez cette valeur, puis supprimez-la (touche Delete).
Vous voyez que le curseur de l'ascenseur vertical fait +/- 1/3 de la hauteur (sur un écran configuré en 1024).
 
Placez le curseur de l'ascenseur en haut (il fait toujours +/- 1/3 de la hauteur).
Sélectionnez toute la feuille (case à l'intersection des lettres et des chiffres) et supprimez par le menu Edition.
Le curseur de l'ascenseur à toujours la même taille.
Sauvez le document en observant l'ascenseur...
 
L'exemple que j'ai donné est uniquement didactique car supprimer la valeur en A110 et sauver le document aurait suffit, ce qui n'est pas le cas des mises en formes et autres attributs qui peuvent traîner dans des cellules.
 
J'espère que cet éclaircissement vous sera utile.


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  VB/VBA/VBS

  [résolu]copie d'une feuille sur une autre

 

Sujets relatifs
[PHP-XML-Flash] listage repertoire [resolu]Cycle de copie et synchronisation base de donnée.
[ VB.NET ] [ Résolu ] Treeview qui plante ...Erreur bizarre - Besoin d'explication avec formulaire [Résolu]
[php] Trier par ordre alphabétique [RESOLU][Resolu]inclure du c dans du c++
[php] script trop long : pb d'execution ! [RESOLU][ resolu ] ContextMenu sur listbox
[RESOLU] probleme compil opengl / glut sous linux[Resolu] Echappement des caracteres speciaux
Plus de sujets relatifs à : [résolu]copie d'une feuille sur une autre


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR