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

copie d'une feuille sur une autre [résolu] - VB/VBA/VBS - Programmation

Marsh Posté le 21-08-2005 à 10:51:51    

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
Reply

Marsh Posté le 21-08-2005 à 10:51:51   

Reply

Marsh Posté le 21-08-2005 à 12:49:55    

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
...

Reply

Marsh Posté le 21-08-2005 à 14:46:06    

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?

Reply

Marsh Posté le 21-08-2005 à 15:10:16    

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
Reply

Marsh Posté le 21-08-2005 à 18:37:18    

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

Reply

Marsh Posté le 22-08-2005 à 10:34:24    

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
Reply

Marsh Posté le 22-08-2005 à 11:11:26    

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
Reply

Marsh Posté le 22-08-2005 à 12:01:59    

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
Reply

Marsh Posté le 22-08-2005 à 12:20:50    

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


---------------
now : do nothing
Reply

Marsh Posté le 22-08-2005 à 17:02:39    

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

Reply

Marsh Posté le 22-08-2005 à 17:02:39   

Reply

Marsh Posté le 22-08-2005 à 22:24:12    

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+

Reply

Marsh Posté le 23-08-2005 à 11:01:04    

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
Reply

Marsh Posté le 23-08-2005 à 14:42:21    

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+
 

Reply

Marsh Posté le 24-08-2005 à 10:28:20    

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
Reply

Marsh Posté le 24-08-2005 à 20:44:42    

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.

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed