| ||||||||
Petit astucien | Bonjour, Je profite de mes vacances pour essayer d'améliorer mon planning de travail . J'ai lu des bouquins sur VBA et Excel et j'ai vu que ce que je voulais faire est possible. Mais je ne sais pas comment m'y prendre . Pourriez vous m'aider s'il vous plait ? Voici mon fichier: http://cjoint.com/?0HEjek8ZvR8 Attention je ne travaille qu'avec Excel 97 et je vais l'utiliser sur Excel 2003. Donc s'il vous plait afficher moi la macro car je ne peux pas ouvrir de fichier xlsm ou xlsx. Merci Voici ce que jouhaiterais: lorsque je remplis la colonne I par "o" ou "n" , je recopie toute la ligne (de "A" à "K"), dans la feuille qui correspond à l'intitulé de la colonne "D"
la première macro fonctionne (ce n'est pas moi qui l'ai écrite, je l'ai juste adapté à mes besoins...), c'est celle que j'utilise actuellement. Je continue quand même à travailler sur ce fichier ( ça fait 8 jours que je suis dessus ...)
Par avance je vous remercie .
Edit: 10:10 Modifié par MichelM37 le 30/08/2013 10:12 | |||||||
Publicité | ||||||||
| ||||||||
Astucien | Bonjour, Macro à mettre dans le module de la feuille 1 (Planning), en remplacement de tes divers essais [NB: effacer tout le code existant dans ce module avant d'y coller la macro ci-dessous] Private Sub Worksheet_Change(ByVal Target As Range) | |||||||
Petit astucien | Bonjour et merci, Mais je dois quand même conserver ma première macro, pour recopier ma ligne dans ma première feuille : autrement puis je rajouter autant de feuilles que je veux (en conservant le même nom, bien sûr) ? | |||||||
Astucien | Re, La macro est une évènementielle, lancée par tout changement de valeur dans la feuille. Il ne peut par définition n'y en avoir qu'une ! Elle peut cependant faire diverses choses... Il faudrait donc que tu précises très exactement ce que faisait ta macro antérieure, sous quelles conditions, et l'on intègrera ces actions dans la macro programmée sur l'évènement "Change". NB : pas compris ta questions sur le rajout de feuilles ! Ni les raisons qui te font dupliquer une ligne... Modifié par ferrand le 30/08/2013 17:09 | |||||||
Petit astucien | Voici ma macro d'origine:
En fait cette macro me recopie la ligne en dessous si je mets "n" dans la colonne "I" . Pour les feuilles, dans mon exemple, il n'y a que 4 feuilles, mais à teme je vais me retrouver avec une trentaine de feuille. Je voulais donc savoir si cela posera un problème? Pourriez vous,s'il vous plait, insérer des commentaires pour que je comprenne et que je puisse faire évoluer votre macro si nécessaire? Encore merci de votre aide (je n'étais parti du tout de la bonne manière ). | |||||||
Astucien |
J'ai bien vu que tu recopiais la ligne dans ta macro initiale ! Je ne vois pas la raison qui te conduit à avoir 2 lignes identiques sur Planning lorsque tu saisis "n" en colonne I ? Le nombre de feuilles peut augmenter sans que cela pose problème. La macro prélève le nom de la feuille cible pour la copie en colonne D. Dès lors que les noms des feuilles correspondent aux noms mis en col. D, la macro continuera de fonctionner. | |||||||
Petit astucien | C'est un planning de travail annuel (défini à l'avance avec ma maintenance préventive), tant que je n'ai pas fini mon travail, je remplis mon planning (date et nombre d'heure). Si le travail est fini je mets "o", si le travail n'est pas fini, je mets "n". Ainsi mon travail non fini reste affiché tant qu'il n'est pas fini. J'ai créé un filtre automatique afin d'afficher la semaine de travail, et je mets vide dans la dernière colonne (Temps) afin d'avoir mon travail à effectuer. J'espère que cela ne posera pas de problème. Donc il faut que j'essaie d'intégrer les deux en une seule macro | |||||||
Astucien | Je comprends bien la notion de fini ou non fini notée en colonne I, cependant qu'il soit fini ou non, en l'état de ce que tu fais, cela reste affichée sur la feuille planning, une fois si c'est fini, deux fois sur deux lignes consécutives si ce n'est pas fini. Il y a donc quelque chose qui m'échappe ! | |||||||
Petit astucien | Lorsque je remplis mon planning, j'inscris la date et le nombre d'heure effectué. Puis la ligne se recopie en dessous mais avec les cellules "Date" et "Temps",vide. Donc avec le filtre automatique, je mets la colonne "Temps" sur vide. Alors je n'ai plus que des lignes "uniques" avec ce qu'il me reste à faire comme travail. Mon vrai planning actuel, avec lequel je travaille est trop gros, pour que je puisse vous le transmettre, ce serait plus explicite.
| |||||||
Astucien | Essaie la macro modifiée suivante : Private Sub Worksheet_Change(ByVal Target As Range) Commentaires: -(ligne 3): aucune action si changement n'affecte pas la colonne I -(ligne 4): action si valeur "o" ou "n" affectée en colonne I -(ligne 5): recueil du numéro de ligne concernée de Planning (variable n) -(ligne 6): affectation à variable nfc du nom de la feuille cible figurant en colonne D - sur la feuille cible [ligne 7], on recueille le numéro de la première ligne vide, affecté à variable m [ligne 8] puis on copie la plage A à K (ligne n) de Planning pour la coller sur la feuille cible (ligne m) [ligne 9] - si la valeur affectée (ayant lancée la macro) était "n" : action complémentaire [ligne 11] - On suspend l'interception des évènements qui pourraient relancer la macro à tort [ligne 12] - Sur Planning [ligne 13], on insère une ligne sous la ligne concernée [ligne 14] puis on copie la plage A à H (ligne n) pour la coller sur la ligne insérée [ligne 15] - On rétablit l'interception des évènements [ligne 17] et on vide le presse-papier [ligne 19]. L'opération est terminée. | |||||||
Petit astucien | Bonjour,
Un grand merci, ça fonctionne . Sauf que je n'avais pas prévu que dèsque je mets "o" et que je passe à la cellule suivante il m'a déjà recopié la ligne sur l'autre feuille. Il va falloir que je m'adapte pour remplir mon planning . J'essaie d'intégrer un message d'erreur en cas ou la feuille n'a pas été créé (Cas d'une nouvelle machine, en cours d'année...). Ou voir si la feuille ne peut pas se créer toute seule. | |||||||
Astucien | Salut ! Dès que tu valides "o" ou "n", la macro est exécutée ! C'est bien ce qui est recherché Si la feuille cible n'a pas été créée, il se produira une erreur d'exécution 1004. A priori dans le contexte, il ne devrait pas y avoir d'autre élément produisant une erreur 1004, on peut donc l'intercepter et afficher un message ou/et créer la feuille manquante (de préférence par copie d'un modèle masqué comportant la mise en forme préalable commune de tes feuilles cibles. Pour intercepter une erreur d'exécution : If Target.Column <> 9 Then Exit Sub (...) Application.CutCopyMode = False A tester (je n'ai fait que l'écrire dans le post) après avoir créé feuille modèle.
| |||||||
Petit astucien | L'ordre des instructions à une impoirtance dans la macro ? J'étais bien parti avec: "On Error GoTo erreur" sauf que je le plaçais beaucoup plus bas dans la macro (là ou je croyais que l'erreur arrivée...) mais j'essayais de continuer avec: erreur: select case number Case 1004 MsgBox "La feuille n'éxixte pas", vbInformation Comme je ne m'en sortais pas , j'ai fini par incorporer la tienne Mais j'ai eu une "erreur de compilation" "utilisation incorecte de la propriété" Worksheets("Machine").Copy after: Worksheets (thisWorkbook.Worksheets.Count) En cherchant j'ai rajouté le "=" avant Woksheets (this....) Mais maintenant j'ai une erreur inattendue: l'erreur 9 s'est produite Et je ne trouve rien sur cette erreur | |||||||
Astucien |
Tu as très bien fait : un oubli de ma part en tapant !
Erreur 9 = L'indice n'appartient pas à la sélection. Se déclenche sur Worksheets(nfc) : l'indice (nom) nfc n'appartient pas à la collection de noms des feuilles du classeur... Mauvaise appréciation de ma part ! Ce n'est pas une erreur 1004 mais une erreur 9 qui se déclenche en cas d'absence de feuille cible. On va donc modifier en conséquence. Private Sub Worksheet_Change(ByVal Target As Range) Ici on ne cible que l'erreur sur Worksheets(nfc), significative de feuille manquante donc, pour créer ladite feuille et reprendre le cours de l'exécution. Pour mieux voir (avec indentation) dans le fichier : http://cjoint.com/?CIbnBIkCGh5 | |||||||
Petit astucien | Bonjour, et encore Merci de te pencher sur mon problème . Je ne vois aucun changement entre ta dernière proposition et la première . Je n'ai pas de message d'erreur, mais je n'ai pas d'avertissement ou de création de feuille "nouvelle machine". Je vois bien le: - On error GoTo erreurfeuille Mais je ne comprends pas le: - On error GoTo 0 Dans le "erreurfeuille", tu commence par Worksheets ("Machine") , mais cette feuille n'éxiste pas . Je pensais pouvoir être capable d'y arriver tout seul, mais je vois que c'est plus compliqué que je le pensais . MERCI. | |||||||
Astucien | Je ne vois aucun changement entre ta dernière proposition et la première Regarde mieux
Normal ! Il n'y a pas de message
La seconde commande annule la première... Ce qui limite le recours au gestionnaire d'erreur aux erreurs survenant entre ces deux commandes. Soit uniquement sur : With Worksheets(nfc) , donc pratiquement sur l'erreur provoquée par le fait que la feuille appelée n'existe pas.
Le gestionnaire d'erreur crée une copie de la feuille "Machine" et lui donne le nom adéquat. Cela présuppose que la feuille "Machine" existe !! Tu la trouveras dans le fichier joint à mon post précédent (elle est masquée car n'a nul besoin d'être visible). Je te conseille d'ouvrir ce fichier et de tester le fonctionnement de la macro pour les différents cas que tu as soulevé. | |||||||
Petit astucien | Je suis désolé, mais je vois les modifications dans la macro (ajout d'une feuille "Machine" et "Machine(2)" en 6 et 7, mais je ne vois pas de modification au niveau du résultat La feuille se créer bien dans la macro, mais elle n'apparait pas dans le classeur . | |||||||
Astucien | Petite correction du gestionnaire d'erreur : erreurfeuille: Pour la suite il te faudra un peu attendre (j'embarque aujourd'hui) que je soie arrivé à destination. | |||||||
Petit astucien | Bonjour, J'espère que tu as fait un bon voyage... C'est bon tout fonctionne Un grand merci . Je n'ai plus qu'à l'adapter à mon fichier. Je vais essayer de faire une macro pour incrémenter mes interventions dans le planning et te dirais ce qu'il en est.... | |||||||
|
Les bons plans du moment PC Astuces | Tous les Bons Plans | ||||||||||||||||||
|