macro complexe

D

Dace

Guest
Hello tout le monde,

j'ai une demande particulière et je vais essayer de m'exprimer le + clairement possible. Je suis en train de créer une feuille Excel 'évoluée' (pour mon niveau lol) et je suis en train d'apprendre le VBA (vous avez des livres à me conseiller ?)

But de la feuille : Feuille gérant des courses de personnes

Une macro départ qui lance le chrono
Une macro Temps que l'on exécute à chaque passage devant la ligne d'arrivée...

Dc à la fin de chaque course on a 40 coureurs ou 60 coureurs.. ça dépend de chaque course...

je voudrais rajouter 1 macro qui aurait 2 fonctions dt 1 caché pour l'utilisateur, invisible... (au pire je ferai 2 macros mais bon...)

But de la macro :

1) Ouvrir la boîte de dialogue 'Enregistrer sous'

2) De manière cachée, sélectionnez les cellules remplies par le chrono uniquement (la feuille est prévue pour 500 coureurs et il ne peut y avoir que 100 coureurs sur une course) et copier le contenu des plages de cellule sur un autre onglet..

Voil@ si vous avez besoin de + d'explication n'hésitez pas et merci d'ance !
 

ZZR09

XLDnaute Occasionnel
Bonjour Dace, le forum

Je passe en coup de vent.
voici ci-joint une partie d'un fichier (mes débuts avec Excel).
il ne répond pas bien à la deuxième partie de ta question, c'est juste un chronomètre. Si tu indiques la distance dans la liste déroulante, la vitesse moyenne est calculée.

Le document initial peut gérer 8 chronomètres indépendants, faire des classements par cétégorie ... mais 50ko sont insuffisants!

Il reste encore beaucoups d'adaptations pour ton projet, bon courage

A+
;) [file name=1chrono.zip size=36592]http://www.excel-downloads.com/components/com_simpleboard/uploaded/files/1chrono.zip[/file]
 

Pièces jointes

  • 1chrono.zip
    35.7 KB · Affichages: 72
D

Dace

Guest
Merci bcp à toi pour ta réponse !

Cependant j'ai déjà commencé et bien avancé un fichier où j'ai déjà tout ce que ton fichier propose. Pour finaliser mon projet, il me manque le savoir à propos de la macro décrite sur le premier post.

Encore merci !
 

ZZR09

XLDnaute Occasionnel
Bonjour Dace, le forum

Apartir du post de démonstration d'Abel, je t'ai fait une macro qui devrait te permettre d'ouvrir un fichier et d'enregistrer dedans une série de données (temps).

le code :
Code:
range('C2:C' & Range('C65536').end(xlup).row).select
permet de sélectionner toutes les cellules de C2 jusqu'à la première cellule non vide en partant de C65536 (la fin de la colonne), en remontant. :)

Comme je ne sais pas comment est ton fichier, je suis parti sur les mêmes bases que celui que je t'ai déjà envoyé.
Tu pourras adapter le code. :p

A+
;) [file name=testEnrgSous.zip size=39851]http://www.excel-downloads.com/components/com_simpleboard/uploaded/files/testEnrgSous.zip[/file]
 

Pièces jointes

  • testEnrgSous.zip
    38.9 KB · Affichages: 45

Dace

XLDnaute Nouveau
le code :
Code:
range('C2:C' & Range('C65536').end(xlup).row).select
permet de sélectionner toutes les cellules de C2 jusqu'à la première cellule non vide en partant de C65536 (la fin de la colonne), en remontant. :)

Bonjour,


je reviens à ton exemple..

La plage de données que je dois copier s'étends horizontalement de la cellule E4 à L4 puis verticalement en fonction du nombre de données (nombre de participants)

Dc je voudrais faire le même principe, partir de la case 500 (pas besoin de plus) et remonter jusqu'à rencontrer le première valeur inscrite. Puis copier par exemple E4:L120.. Cependnat j'arrive pas trop à comprendre ta formule pour modifier selon mes souhaits...

Merci
 

Dace

XLDnaute Nouveau
j'ai tenté de faire ça

Code:
'Récupération des données dans la plage E4 ... jusqu'à la fin
Range('E4:L4' & Range('E500:L500').End(xlUp).Row).Select
Selection.Copy

Ca marche que moyennement lol il me prends les cellules remplies plus d'autres qui sont vides... :angry:
 

ZZR09

XLDnaute Occasionnel
Bonsoir Dace,

si tu connais les colonnes et qu'elles ne varieront pas, cela va être plus simple:

Code:
Range('E4:L' & Range('L500').End(xlup).Row).select

Il faut cependant que la colonne L comporte le maximum de lignes de la base de données. si il n'y pas de cellules vides, c'est sans problème.

En fait la plage ce cellules est composée de deux bornes : E4 et la dernière cellule de la colonne L. C'est la ligne de cette dernière cellule que nous ne connaissons pas ... et que nous demandons à Excel de trouver : Si par Exemple la base de données va jusqu'à la ligne 384, la sélection est
Range('E4:L384')

Mais, nous ne connaisson pas cette valeur 384 ...

Nous lui indiquons ce que nous savons :
Range('E4:L'

et nous concaténons : & la ligne de la dernière cellule de la base de données - renvoyée par Excel comme suit :

Range('L500') - il se place sur cette référence
End(xlup) -il remonte jusqu'à trouver une cellule non vide
Row - il indique la ligne de cette cellule

En espérant que c'est ce que tu voulais

A+
;)

j'en ai trouvé un par hasard (faute de frappe :s )

Message édité par: zzr09, à: 08/12/2005 00:50
 

Dace

XLDnaute Nouveau
super merci pour ta réponse,

j'ai mis ta formule et pls remarques :

- Avec l500 comme range ça me fait n'importe quoi

- j'ai alors essayé avec L65536 et là ça me sélectionne comme ile le faut sauf que ça me prend les cellules vides mais là où il y a une formule (j'ai prévu pour 500 coureurs) et il me prends de E4 à L500.
Une cellule vide mais avec une formule est elle considérée comme non vide ? si c le cas existe-t-il un moyen que cette macro ne sélectionne que les cases effetivement remplies contenant des données ?

Merci encore à toi

Edit : La fonction enregistrer sous ne marche pas en fait mais je pense que c moi qui ait fait l'erreur en copiant collant le VBA.. la fenêtre s'ouvre bien, je met mon nom de fichier, hop il me met qu'il enregistre bien mais le fichier est introuvable...

Message édité par: Dace, à: 08/12/2005 10:44
 

ZZR09

XLDnaute Occasionnel
Bonjour Dace,

J'ai effectivement le même souci chez moi : Les cellules avec une formule sont considérées comme non vides. Je ne connais pas d'inscruction permettant de répondre directment à ce ptoblème mais voici une autre idée :
En prenant une colonne contenant l'identifiant (ou toute autre valeur), on peut retrouver le numéro de la ligne.
Autrement dit : je considère que l'identifiant doit être saisi dans une base de données; il n'y aura donc pas de données sans cette valeur. je peux donc compter le nombre de ligne dans ma base de données en me basant sur cette colonne.

Si par exemple l'identifiant est dans la colonne B, mon code devient :

Code:
Range('E4:L' & Range('B65536').End(xlup).Row).select

Sinon, pour la deuxième question il faudrait controler l'endroit où doit être enregistré le fichier. si ce n'est pas ça, je ne vois pas trop (peut-être une ligne de commande manquante).
Il faudrait que tu me joignes une copie zippé de ton fichier (avec des données bidons) pour que je ouisse regarder le code. De plus, on continuerai sur la même base.

A+
;)
 

Dace

XLDnaute Nouveau
je n'ai qu'une chose à dire BRAVO !!! je susi juste déçu de ne pas y avoir pensé avant :)

en me servant d'une colonne n'ayant pas de formule, ça fonctionne nickel... !! Whow !! c cool :) encore une fois merci à toi :)

Une première étape est franchie.. pour l'enregistrer sous je sais pas trop encore...

maintenant je vias copier la sélection sur une nouvelle feuille à partir de la cellule A2 par exemple.. c pas un soucis ça... mais attention à la suite... à chaque course il y aurait une sélection à coller et je voudrais que ce soit à la suite.. dc à partir de A20 si y'a eu x coureurs pendant la course précédente.. je suppose que l'on peut se servir de la formule précédente pour détecter quelles cellules sont remplies...


pour le fichier je te prépare ça ;)
 

ZZR09

XLDnaute Occasionnel
Re,

Effectivement, en utilisant cette méthode, on faire en sorte que Vb se place automatiquement à la fin des données avant d'en ajouter de nouvelles.
Il ne faut pas oublier de rajouter 1 : dernière ligne + 1 ! sinon on perd la dernière ligne.

A+
:)
 

Discussions similaires

Statistiques des forums

Discussions
312 361
Messages
2 087 625
Membres
103 608
dernier inscrit
rawane