|
Publicité ' | ||||||||||||||||||||||||
|
|
#1 |
|
Invité régulier
![]() Inscription : mars 2011 Messages : 49 ![]() |
bonjour
j'ai besoin de votre aide je suis en train de développer une application , je suis débutant en vba j'ai pas réussi a crée un macro pour l'affichage dynamique de l'heure , minute et seconde lors de l'ouverture de chaque feuille de mon classeur j'ai aussi un autre problème j'ai un tableau de 8 ligne je veux masquer les lignes selon le temps exemple: pour la première ligne il doit être masqué si le temps actuel dépasse 7.20 et un de ces cellules est encore vide le 2 ligne doit être masqué sil le temps actuel dépasse 08.20 et l'un de ces cellules est encore vide . . . la dernière ligne doit être masque si le temps actuel dépasse 14.20 et l'un de ces cellules est encore vide merci d'avance pour votre aide |
|
|
01
|
|
|
#2 | ||||||
|
Membre éclairé
![]() Inscription : juillet 2011 Messages : 141 ![]() |
Bonjour,
Citation:
Dans la fenêtre d'Exécution immédiate (Ctrl+G) du VBE d'Excel, copier-coller et valider par ENTER : 10:19:33 L'heure s'est affichée dynamiquement dans la fenêtre d'Exécution immédiate. En quoi l'heure qui s'affiche sur la barre des tâches de Windows n'est pas suffisante ? Comme il s'agit d'une heure dynamique, indiquez la fréquence de rafraichissement de l'affichage telle que toutes les secondes. Pourquoi déclencher l'affichage de l'heure dynamique sur ouverture d'une feuille ? Indiquez comment vous voulez détecter l'ouverture de chaque feuille. Avec Workbook_SheetActivate ? Code :
Citation:
Donnez la déclaration des constantes sur la définition de la première ligne à traiter et commenter chaque déclaration selon le modèle ci-joint. Exemple : Code :
Indiquez les constantes d'heure : 7.20, 8.20, etc. en précisant les unités 7 h 20 ou 00:07:00 s ? Ou indiquez la constante de la 1ere heure puis la constante de délai et éventuellement la constante de la dernière heure. Donnez comment vous avez personnalisé le code de l'enregistreur de macro pour masquer une ligne. ___________ En bas de ce message s'il vous a apporté des éléments de réponse pertinents, pensez également à voter en cliquant sur le bouton vert ci-dessous.
|
||||||
|
|
10
|
|
|
#3 |
|
Invité régulier
![]() Inscription : mars 2011 Messages : 49 ![]() |
bonjour merci pour votre réponse
je veux ajouter le temps dans une cellule de chaque feuille de classeur par exemple dans la cellule D8 sous la format 6h.20 ou 6 :20.12 pour masquer les lignes je dois faire pour chaque ligne une comparaison entre le temps actuel contenue de la cellule D8 et le temps cible le temps cibles pour chaque ligne est ligne 1 : 07.20 ligne 2 : 08.20 ligne 1 : 09.20 ligne 1 : 10.20 ligne 1 : 11 .20 ligne 1 : 12.20 ligne 1 : 13.20 ligne 1 : 14.20 la condition pour masquer une ligne est la suivante si l'un de cellules de cette ligne est vide et le temps actuel > temps cible de ce ligne alors ce ligne doit être masqué je suis débutant en vba j'ai pas compris votre code "?time " ou je dois mettre ce code ??? dans un module?? MERCI |
|
|
01
|
|
|
#4 | ||||
|
Membre éclairé
![]() Inscription : juillet 2011 Messages : 141 ![]() |
1. La fenêtre d'Exécution immédiate du VBE
Citation:
2. Pour ouvrir la fenêtre d'Exécution immédiate du VBE, tapez le raccoursi clavier Ctrl+G ou cliquez sur le VBE menu "Affichage" > "Fenêtre d'Exécution" Copier-coller et valider par ENTER : 10:19:33 L'heure actuelle s'affiche dans votre fuseau horaire. On met en bleu foncé le résultat affiché dans la fenêtre d'Exécution. Le "?" est l'abréviation de Debug.Print : 07:20:00 C'est la constante de début de masquage de la 1ere ligne de votre tableau. Debug.Print ou "?" est un moyen pratique de tester des fonctions VBA. 2. Datation de l'ouverture de la feuille en D8 Le problème s'est considérablement simplifié depuis que vous avez parlé de temps actuel par rapport à un temps d'ouverture de la feuille en D8. On n'a pas besoin de maintenir une vraie horloge dynamique en D8 mais uniquement de sauver l'heure d'ouverture. Je reformule l'énoncé. Modifier si nécessaire. A 7 h 20 du matin, la ligne 1 de la feuille ouverte (ou de toutes les feuilles ? Si c'est le cas, le préciser) doit être masquée si une de ses cellules est vide. Cela signifie qu'il faut déclarer les constantes de n° de la colonne de début et la colonne de fin pour la ligne à masquer parce qu'on ne va pas parcourir potentiellement toutes les colonnes que Excel peut fournir. Citation:
Car vous parlez de temps actuel. Hors le temps actuel ne s'arrête jamais. Parler plutôt d'heure d'ouverture en D8 qui est une heure fixe. Donnez un exemple de chronologie concrète. Ouverture de la feuille disons à 7 h 00. Au bout de 20 minutes, la ligne 1 est masquée si condition remplie. Une heure plus tard, la seconde ligne est masquée si le classeur est toujours ouvert. Etc. Dans votre scénario, indiquez le cas où on ferme le classeur avant 14 h 20. On le réouvre avant 14 h 20 et on le ferme à 15 h. Le but de cette chronologie est de savoir quand le traitement pour masquage doit être lancé. Est ce un traitement périodique lancé automatiquement à partir de l'ouverture du classeur ou est-ce un traitement à la demande de l'utilisateur qui souhaite masquer les lignes par rapport à l'heure d'ouverture ? 3. Démarrez le module ModClock Cliquez sur l'Excel menu "Outils" > "Options" > onglet "General" option [x] R1C1 reference style Cela facilitera les conversions de n° de colonne sinon vous devriez calculer la position des n° de colonne dans l'alphabet. Vous pouvez commencer le projet maintenant en déclarant les constantes. Cliquez sur le VBE menu "Insérer" > "Module" Dans les propriétés de Module 1, renommer le en ModClock. Vous avez parlé de la cellule d'heure d'ouverture. Décrivez là par la constante de sa rangée 8 et le nom de sa colonne D en coordonnées R1C1. Dans le module ModClock, copier-coller et compléter le code suivant : Code :
Dans la fenêtre d'Exécution immédiate (Ctrl+G) du VBE d'Excel, copier-coller et valider par ENTER : 08:20:00 C'est la seconde heure pour le masquage de rowMaskFirst + 1. Il faut parler en utilisant les constantes que vous définissez parce que ce sera ce que fera votre macro. Après avoir défini la constante de délai entre deux masquages, remplacez le premier paramètre de TimeSerial(), à savoir la constante numérique 1 par le nom de votre constante de délai que vous venez de définir. Le résultat dans la fenêtre d'Exécution immédiate sera bien sûr identique à savoir : 08:20:00 Poster la nouvelle version de ModClock en ajoutant les constantes utiles au projet et la procédure -- au moins son nom si elle est vide -- qui fera la comparaison pour masquage des lignes. Le but est que vous définissez et commentez vos constantes, votre nom significatif de macro. |
||||
|
|
10
|
|
|
#5 |
|
Invité régulier
![]() Inscription : mars 2011 Messages : 49 ![]() |
j'ai pas réussi à ouvrir la fenêtre d'excution
j'ai indiqué par le temps actuel notre temps donc la ligne 1 doit être masqué si le temps actuel dépasse 07.20 et l'un des cellules est vide . la compraison est alors entre le temps actuel et 07.20. j'ai pas compris votre code assez bien merci |
|
|
01
|
|
|
#6 | ||
|
Membre éclairé
![]() Inscription : juillet 2011 Messages : 141 ![]() |
Il faut m'indiquer où quelque chose ne marche pas.
Dans quelle langue est votre Excel ? Quelle est sa version ? Citation:
Citation:
La fenêtre d'Exécution immédiate (Ctrl+G) s'ouvre généralement sous la fenêtre d'Edition. |
||
|
|
10
|
|
|
#7 |
|
Invité régulier
![]() Inscription : mars 2011 Messages : 49 ![]() |
j'ai excel 2003 en anglais oui vbe s'est ouvert en avant plan
j'ai trouvé l'onglet de la fenetre d'exuction dans le menu affichge mais en clikantsur cette onglet rien ne se passe la comparaison du temps doit être faite entre le tems actuel et le teps cible de chaque ligne on doit pas utilisé le temps d'ouverture de classeur car l'utilisateur peut ouvrir le classeur une seule fois pour remplir tous les lignes come il peut ouvrir le classeur 3 fois 5 fois .... donc la comparaison doit être fait indépendamment du temps d'ouverture de classeur merci |
|
|
01
|
|
|
#8 | |
|
Membre éclairé
![]() Inscription : juillet 2011 Messages : 141 ![]() |
Citation:
Si rien ne se passe, c'est que cette fenêtre est peut-être déjà ouverte. Recherchez parmi les fenêtres ouvertes : Project VBAProject, Edition, Properties, Immediate, Locals, Watches... Vous parlez d'onglet (Tab) dans Excel 2003, recherchez éventuellement le Developer Tab. Le temps actuel c'est le moment où on lance la macro. Qui, quand et comment cette macro est lancée ? Indiquez sur quel évènement, la macro doit s'exécuter, si c'est périodique automatiquement ou sur demande de l'utilisateur ? |
|
|
|
20
|
|
|
#9 |
|
Invité régulier
![]() Inscription : mars 2011 Messages : 49 ![]() |
j'ai vérifie les fenêtres ouvertes mais j'ai pas trouvé la fenêtre d'exection
l'événement de déclenchement du macro est l'activation de la feuille de classeur |
|
|
01
|
|
|
#10 |
|
Membre éclairé
![]() Inscription : juillet 2011 Messages : 141 ![]() |
VBE menu "Tools" > "Options" > Dernier onglet "Docking"
Cochez l'option [x] Immediate Window Quand on désélectionne cette option [ ] Immediate Window, cette fenêtre remplace la fenêtre de code [Code pane]. Voyez-vous la fenêtre d'Exécution immédiate en renplacement de la fenêtre de Code ? Si on clique sur un Module, la fenêtre d'Exécution immédiate disparait, cachée par la fenêtre de code. Si on coche "Docking" > [x] Immediate Window et que la fenêtre n'est toujours pas visible, utilisez la méthode suivante sans changer le focus une fois le raccoursi saisi : Tapez le raccourci clavier Ctrl+G Même si vous ne voyez pas la fenêtre d'Exécution immédiate, tapez à l'aveugle et validez par ENTER : Voyez-vous la boite de message "From Immediate Window" ? Dans ce cas, la fenêtre d'Exécution immédiate est en dehors de l'écran (dans l'hyperspace) La méthode pour tenter de la faire apparaître est de minimiser Excel puis de le remettre en fenêtre normale. Parfois cela permet à la fenêtre d'Exécution immédiate de réapparaitre. Une autre méthode consiste à tenter de changer la résolution de l'écran. Pouvez-vous voir les autres fenêtres de Debug telles que celle pour les variables locales ? Cliquez sur le VBE menu "View" > "Locals Window" ou "View" > "Watch Window" Comparez avec la capture d'écran dans : Using the Immediate Window Lire également Immediate Window Can't Be Viewed by Dave. 02-24-2010 09:31 PM sans aller jusqu'à patcher la Registry. |
|
|
20
|
|
|
#11 | ||||
|
Invité régulier
![]() Inscription : mars 2011 Messages : 49 ![]() |
merci pour votre reponse
j'ai pas trouvé docking j'ai pas compris mémé l'utilité de fentere d'execution on ne peut pas afficher le temps par un macro?? merci pour votre aide j'ai trouvé le code suivant: # Dans la partie workbook du classeur, insérer le code suivant Code :
j'ai trouvé un code pour afficher l'heure en format hh:mm:s mon tableau contient 6 colonnes a l'activation de la feuille qui contient le tableau la comparaison entre le temps affiché dans la cellule A1 et le temps cible de chaque ligne doit être faite je pense à associé a chaque ligne une constante exemple pour la ligne 1: a=A1-07:20:00 et un autre variable vide boolean pour vérifier la 2 condition " l'un des cellules est vide" Code :
|
||||
|
|
01
|
|
|
#12 | ||
|
Membre éclairé
![]() Inscription : juillet 2011 Messages : 141 ![]() |
Bravo d'avoir commencé.
![]() A moins d'être un hiérarchique en colère par rapport à un subordonné, on n'utilise pas "je veux un macro" [I want a macro].En français diplomatique surtout dans un forum, on préfère "je souhaiterai une macro" ou "j'aimerai une macro pour masquer les lignes". [I would like] Editez votre message pour changer l'expression. Dans le message précédent, le modérateur a regroupé tous vos messages consécutifs. Cela signifie qu'il faut prendre le temps nécessaire pour bien lire chaque question et y répondre avant de poster des messages consécutifs. Le modérateur a inséré pour vous avant la première ligne la balise [code] et après la dernière ligne de code la balise [/code]Dans l'éditeur du forum, vous trouverez dans la barre d'outil le bouton "#" qui ajoute automatiquement ces deux balises si vous sélectionnez toutes les lignes de votre code dans votre message. Cela permettra de conserver l'indentation du code à l'intérieur du bloc While ... Wend 1. Option Explicit pour commencer un module Commencer toujours votre module par : Code :
Option Explicit ' Commentaire qui explique ce que fait le module 2. Déclaration et utilisation de Boolean Créer un nom de procédure et y mettre le traitement pour tester si une cellule est vide plutôt que d'écrire un fragment de code qui commence par vide=false. Le fait que false soit en minuscule et collé au "=" montre que ce code n'a pas été saisi dans un module du VBE. Toujours présenter un code validé par le VBE. Suivre les instructions du message #4, chapitre 3 et compléter le module ModClock puisque c'est ainsi que Module1 a été renommé. Déclarer les types avec l'instruction Dim plutôt de dire que vide est un Boolean. Par contre on peut trouver un nom plus complet tel que isCellEmpty, le préfixe "is" permettant de se rappeler que c'est un Boolean. Et on peut même commenter la déclaration.
C'est la propriété des Boolean. On n'a pas besoin de les comparer avec False ou True. 3. Variable d'indice de rangée indRow et de colonne indCol On n'utilise jamais de variable sur une seule lettre telle que i car c'est impossible de les substituer pour améliorer la lisibilité. Utilisez indCol pour montrer qu'il s'agit d'une indice de colonne. Déclarer cette variable avec le type As Integer Comme il faudra masquer d'autre ligne que la première, prévoir également d'utiliser indRow pour l'indice de rangée. C'est là qu'interviennent les constantes déclarées dans le message #4. Remplacer i = 1 par : si le tableau commence en colonne définie par la constante : Code :
Les voilà les deux constantes que je vous demandais avec un commentaire. Il reste une constante à déclarer et commenter. Son nom et sa valeur sont en violet dans le message #4. La règle est basique. Pas ou peu de constante numérique ou chaîne littérale dans une procédure. Déclarer la constante correspondante avec un nom parlant pour vous et utiliser la dans vos procédures. Si le tableau contient 6 colonnes, on voit déjà un bug parce qu'on n'a pas déclaré la constante colTabEnd = 6 et le code utilise une autre constante numérique inconnue i <= 8 4. Comparaison horaire Dans l'expression a = A1 - 07:20:00 choisir un nom de variable sur plus d'une lettre représentative de l'opération. S'il s'agit d'une durée, remplacer par durationMask ou n'importe quel nom commençant par time ou date ou ce que vous voulez relatif à ce qu'il y a faire mais par "a" qui n'a aucune signification. Il faut surtout déclarer son type. Vous verrez à la fin de ce message que l'on peut se passer de cette variable. Dans le message #3, vous avez parlé de D8. Qu'est-ce que vient faire A1 maintenant ? Encore un problème d'absence de constantes. Relisez mon message #4 chapitre 3, la cellule où on range le temps est identifiée par deux constantes rowHourOpen et colHourOpen. On va accéder à sa valeur par : Cells(rowHourOpen, colHourOpen).Value De même on a défini la constante hourMaskStart, ce n'est pas pour voir l'erreur de syntaxe A1 - 07:20:00. Utiliser la constante hourMaskStart puisqu'elle a été créée pour cela. Notez l'utilisation des "#" autour de l'heure du premier masquage lors de la déclaration de la constante dans le module ModClock du message #4 chapitre 3. C'est le format VBA pour les constantes horaires. Plutôt que de passer par la variable intermédiaire a en plus sur une seule lettre : If a > 0 remplacer par : Code :
If Cells(rowHourOpen, colHourOpen).Value > hourMaskStart And isCellEmpty Then |
||
|
|
10
|
|
|
#13 | ||
|
Expert Confirmé Sénior
![]() Inscription : juillet 2008 Messages : 5 848 ![]() |
Bonjour
J'ai l'impression qu'une usine à gaz des ressources est entrain d'être montée. N'oublions pas la fonction principale d'Excel. Mais bon. Peut être il faudrait augmenter le temps de rafraichissement pour ne pas surdimensionner le besoin (10 secondes à la place d'une seconde par exemple) Ci-après une proposition pour cacher les lignes répondant aux 2 critères. Code :
__________________
Cordialement. |
||
|
|
20
|
|
|
#14 | ||
|
Membre éclairé
![]() Inscription : juillet 2011 Messages : 141 ![]() |
Citation:
Je n'ai toujours pas vu l'intérêt de maintenir une horloge dynamique dans la cellule D8 alors qu'elle s'affiche dans le coin droit de la barre des tâches de Windows sans qu'Excel y soit pour quelque chose. Si on a besoin dans Excel du temps actuel, on peut l'obtenir par Time. Inutile donc de l'afficher périodiquement dans une cellule pour le relire sur activation d'une feuille. On risque tout au plus d'avoir un temps "actuel" Citation:
Le but était de conclure que l'on n'a pas besoin d'une horloge dynamique temps réel pour régler un problème basique de masquage de ligne selon une contrainte horaire à heure fixe et de cellule vide. Je n'ai même pas voulu entrer dans une solution à base du méga complexe AddressOf, de handle d'application, de timer temps réel à la milliseconde près, de DoEvents() alors qu'on en est, après 14 messages, à déclarer les constantes du projet comme le délai entre deux masquages de lignes à partir d'une heure fixe et à afficher la fenêtre d'Exécution immédiate dans le VBE. |
||
|
|
10
|
|
|
#15 | ||
|
Invité régulier
![]() Inscription : mars 2011 Messages : 49 ![]() |
bonjour
MERCI Mattchess et Marcatog pour vos remarques si pertinentes . pour que les choses soient plus claires je dois vous mettre dans le cadre du problème: A fin d'obliger les techniciens de chaque équipe (chaque équipe travaille8 heures) à enregistrer les données demandées après chaque heure , j'ai proposé l'idée de masquer chaque ligne à la fin de chaque heure avec une marge de 20 min si le technicien n'a pas terminé cette ligne. en effet j'ai remarqué que les techniciens ont l'habitude à remplir tous dans la dernier minute " Je n'ai toujours pas vu l'intérêt de maintenir une horloge dynamique temps réel dans la cellule D8 alors qu'elle s'affiche dans le coin droit de la barre des tâches de Windows sans qu'Excel y soit pour quelque chose. " oui vous avez raison , j'aimerai mettre l'horloge dynamique dans chaque feuille active du classeur juste pour la forme pour la fréquence de rafraichissement 1 seconde ou 10seconde c'est la même pour le code suivant: est- ce que je peux enlever "?" @ mercatog merci pour votre code j'ai des questions à propos ce code quelle est l'utilité de la procédure updatetime ?? LE CODE SUIVANT : Code :
.Cells(1, 1).Value = Format(Time, "HH:MM:SS") mais vous n'avez pas précisé la fréquence de rafraichissement j'ai pas compris et et dans le code time est ce q 'elle représente le temps réel et "s" que représente -t-elle ? j'ai pas compris Code :
Application.CountA(c.Offset(0, 1).Resize(1, 8)) = 0 Code :
|
||
|
|
01
|
|
|
#16 | |||||
|
Expert Confirmé Sénior
![]() Inscription : juillet 2008 Messages : 5 848 ![]() |
Citation:
Regarde dans ton code les commentaires explicatifs. En plus, l'aide est gratuit (F1 sur l'instruction non claire). Le code commenté (légèrement) Dans un module standard Code :
Code :
__________________
Cordialement. |
|||||
|
|
10
|
|
|
#17 | ||
|
Membre éclairé
![]() Inscription : juillet 2011 Messages : 141 ![]() |
Et le fin mot "End" de l'histoire est apparu dans votre dernière ligne 31 car on peut y lire "End Sub".
Comme il était vraisemblablement plus de 7 h 20 du matin, le début de la procédure commençant par "Sub " suivi du nom de votre procédure a été étrangement masquée... La solution devient concrète à partir du moment où on change le commentaire après Option Explicit pour un commentaire résolument réaliste sur ce que le module ModMask doit faire contrairement au titre initial de la discussion : Code :
Ligne 1 masquée à partir de : 07:20:00 Ligne 2 masquée à partir de : 08:20:00 Ligne 3 masquée à partir de : 09:20:00 Ligne 4 masquée à partir de : 10:20:00 Ligne 5 masquée à partir de : 11:20:00 Ligne 6 masquée à partir de : 12:20:00 Ligne 7 masquée à partir de : 13:20:00 Ligne 8 masquée à partir de : 14:20:00 Selon l'heure courante de lancement, vous pourrez lire dans la fenêtre d'Exécution immédiate les huit messages précédents écrits en bleu foncé. Dans la fenêtre d'Exécution immédiate : Les huit lignes masquées précédemment sont à nouveau visibles. Si la fenêtre d'Exécution immédiate n'est pas accessible ou visible (voir message #10), vous pourriez lancer la macro MasquerLignes() classiquement par l'Excel menu "Tools" > "Macros" Sélectionner AfficherLignes ou MasquerLignes. Cliquez sur "Run". Si vous souhaitez afficher le gadget de l'heure en D8 -- ce qui ne se sert strictement à rien dans cette application -- (les techniciens peuvent avoir leurs propres montres ou lirent l'heure dans la barre de tâches de Windows), vous allez prendre de la ressource processeur pour animer cette horloge et il est bien possible que les techniciens ne puissent plus saisir ce qu'ils doivent saisir avant la contrainte horaire fatidique. Comme cela on sera sûr que toutes les lignes seront masquées. Oui, il n'y a plus de question. Vous pouvez mettre en commentaire ou ... masquer Debug.Print qui affiche un message dans la fenêtre d'Exécution immédiate qui semble masquer dans votre Excel quelque soit l'heure. ___________ Si la discussion est résolue, vous pouvez cliquer sur le bouton En bas de ce message s'il vous a apporté des éléments de réponse pertinents, pensez également à voter en cliquant sur le bouton vert ci-dessous.
|
||
|
|
10
|
|
|
#18 |
|
Invité régulier
![]() Inscription : mars 2011 Messages : 49 ![]() |
merci énormément pour vos réponse
le problème est résolu franchement c'est la meilleur forum , j'y trouve toujours des solutions à mes problèmes grâce aux ses génies ![]() Merci encore pour l'intérêt que vous avez porté à mon problème bonsoir @matchess il reste une chose l'événement du déclenchement du macro est-il possible de mettre l'activation d'une cellule de la ligne qui sera masqué un événement du déclenchement? pour l'événement ""la feuille soit active" cette événement est déclenché seulement à l'ouverture de la feuille ?? c'est à dire si on ouvre la feuille normalement l'événement sera déclenché donc les lignes qui vérifient les conditions sera masqués on suppose que le technicien ne ferme pas la feuille , elle reste ouverte après un certain temps un autre ligne vérifie les conditions est ce qu'il sera masqué ? ce pour ce raison je réfléchis à l 'événement une cellule de ligne est active merci |
|
|
01
|
|
|
#19 | |||||||
|
Membre éclairé
![]() Inscription : juillet 2011 Messages : 141 ![]() |
Citation:
Code :
Citation:
Citation:
Une cellule peut être sélectionnée ou non. On peut détecter le changement de sélection par : Code :
|
|||||||
|
|
10
|
|
|
#20 | ||
|
Invité régulier
![]() Inscription : mars 2011 Messages : 49 ![]() |
merci j'ai bien compris
j'ai fait ce code mais quand je l'ai exécutée un message est affiché " end if without bolck if " j'ai vérifié tous les structure if End if mais j'ai pas trouvé aucune erreur le code est le suivant : Code :
|
||
|
|
01
|
Copyright © 2000-2012 - www.developpez.com