| ||||||||
Petite astucienne | bonjour
je souhaiterais modifier la macro jointe de facon a ce que lorqu une personne est de service
sa ligne complete se copie ds le deuxieme tableau comme le montre le 2eme tableau
http://cjoint.com/?iqpODv5cd8
j ai essaye de supprime dispo+1 ca marche seulement il faudrait qu il me mette la ligne suivante en desous
merci et a desuite j espere
Modifié par la reunion le 23/08/2006 15:35 | |||||||
Publicité | ||||||||
| ||||||||
Petit astucien | re
je n'avais pas vu cette question et finalement j'espère que mon dernier fichier répond correctement à ce qui est demandé.
ps : sur le forum, il faut éviter de créér un nouveau sujet en parallèle du sujet en cours pour une question de même nature.
a+
| |||||||
Petite astucienne | bonjour a tous[hello]
pour la macro de debut de sujet c est bon
mais la ,j aurais besoin que l on m aide pour modifier la macro qui se trouve dans le fichier jiont
http://cjoint.com/?ixlwdJDl8e
en effet actuellement elle cherche dans le tableau complet si quelqu un travail et me marque automatiquement son nom prenom etc.. dans la feuille 3
que faut il modifier dans la macro pour qu elle ne cherche que dans les colonnes samedi dimanche et jour ferie si quelqu un travail
ne soyez pas etonnes, normalement les 2 tableaux sont dans des classeurs separes, c est pour cela que la macro fait reference a un dossier recap
merci a tous d avance | |||||||
Astucien ![]() | up
voir réponse en MP
sinon : http://cjoint.com/?iyrYjmCrU4 ...
comme j'ai dit, je sais pas comment ça fonctionne donc je suis pas sur du résultat...
à vérifier par DIXIT
| |||||||
![]() | Bonjour,
Tu peux essayer ça (sans aucune garantie : codé avec le pied, à la hache et non testé !)
...
For b = 4 To 34 'pour colonnes 4 à 34 (la dernière pour mois de 31 jours)
If YSDF(lign, b) Then
texte = Cells(lign, b)
...
...
Sheets(nomfeuille).Select
End If
End If
Next b
...
En plus il faut rajouter cette macro :[code]Function YSDF(Row&, Col%) As Boolean
YSDF = Cells(Row, Col).Interior.ColorIndex = 40
End Function[/code]
A+ | |||||||
Astucien ![]() | galopin01 a écrit :
une seule ligne suffisait... [clindoeil]
Bonjour, Tu peux essayer ça (sans aucune garantie : codé avec le pied, à la hache et non testé !) ...
For b = 4 To 34 'pour colonnes 4 à 34 (la dernière pour mois de 31 jours)
If YSDF(lign, b) Then
texte = Cells(lign, b)
...
...
Sheets(nomfeuille).Select
End If
End If
Next b
...
En plus il faut rajouter cette macro :[code]Function YSDF(Row&, Col%) As Boolean
YSDF = Cells(Row, Col).Interior.ColorIndex = 40
End Function[/code]
A+
| |||||||
![]() | Salut Bérylion,
Tout dépend ce qu'on cherche ! Ton raisonnement ne m'avais pas échappé mais il ya des moments ou on est obligé de faire des choix !
La question était : elle ne cherche que dans les colonnes samedi dimanche et jour ferie
J'ai donc répondu à la question.
Savoir laquelle des 2 méthodes est la meilleure ne se limite pas qu'au nombres de lignes dans la macro...
Dans mon hypothèse je n'examine la condition <> "" que dans 5 cellules sur 7 environ
Dans ton hypothèse tu examines la condition ColorIndex = 40 dans toutes les cellules non vides.
Pour savoir qui fait le moins de tour de boucle, il faudrait connaitre le nombre précis de cellules non vide dans les cellules blanches et dans les cellules vides et faire une comparaison... Ou mettre un timer à l'exécution de chaque macro...
C'est la raison pour laquelle je ne répond en général pas à ce genre de question assez flou ou il est difficile de distinguer le nécessaire, du mieux ou de l'essentiel. Je ne me suis forcé à répondre que parce que j'ai été sollicité par un MP.
Enfin cerise sur le gateau, si mes réponses peuvent apporter un plus qui font progresser mon interlocuteur, je ne me prive pas :
La petite fonction que j'y ai implanté était de cette nature : C'est mon style !
A+ | |||||||
![]() | Pour (peut-être) expliquer plus simplement :
Si tu es médecin et qu'on te demande d'isoler les enfants malades tu ne vas pas commencer par vérifier tous les individus pour voir s'ils sont malades, tu ne vas examiner que les enfants... | |||||||
Astucien ![]() | galopin01 a écrit :
[bigsmile]
Me doutais bien que t'avais mis "tout ça" pour le plaisir...
mais comme j'avais pas bien tout saisi la macro de dixit (ai pas suivi l'historique), j'ai "ratissé large" en testant toutes les cellules non vide [rougir]
mais ta méthode est beaucoup plus fine, Doc' [clindoeil]
Salut Bérylion, Tout dépend ce qu'on cherche ! Ton raisonnement ne m'avais pas échappé mais il ya des moments ou on est obligé de faire des choix ! La question était : elle ne cherche que dans les colonnes samedi dimanche et jour ferie
J'ai donc répondu à la question.
Savoir laquelle des 2 méthodes est la meilleure ne se limite pas qu'au nombres de lignes dans la macro...
Dans mon hypothèse je n'examine la condition <> "" que dans 5 cellules sur 7 environ
Dans ton hypothèse tu examines la condition ColorIndex = 40 dans toutes les cellules non vides.
Pour savoir qui fait le moins de tour de boucle, il faudrait connaitre le nombre précis de cellules non vide dans les cellules blanches et dans les cellules vides et faire une comparaison... Ou mettre un timer à l'exécution de chaque macro...
C'est la raison pour laquelle je ne répond en général pas à ce genre de question assez flou ou il est difficile de distinguer le nécessaire, du mieux ou de l'essentiel. Je ne me suis forcé à répondre que parce que j'ai été sollicité par un MP.
Enfin cerise sur le gateau, si mes réponses peuvent apporter un plus qui font progresser mon interlocuteur, je ne me prive pas :
La petite fonction que j'y ai implanté était de cette nature : C'est mon style !
A+
| |||||||
![]() | Bonjour,
Quand je tiens un os je ne le lache pas ! [bigsmile]
J'ai mesuré avec un Timer les mérites comparés des uns et des autres :
Afin d'obtenir des chiffres significatifs, le test à été fait sur 100 000 boucles effectives
(Colonne 2 non vide)
[img]http://perso.orange.fr/galopin01/images/Stats.jpg[/img]
Les chiffres en blancs (on parle en seconde) montrent qu'il n'y a pas de différence significative entre les 2 méthodes.
Par contre les chiffres en jaunes (cas ou il y a juste un concierge le WE) m'ont interrogés.
J'en suis arrivé à la conclusion que ce qui bouffait le maximum de temps, ce n'est pas le nombre de boucles elles mêmes (le nombre de boucles étant à peu de chose près identique) mais c'est ce qu'il a à l'intérieur de la boucle !
J'ai donc regardé à l'intérieur de la boucle... et j'ai vu : Oh horreur ! Tout un tas de truc : des variables, un Select...
J'ai donc remplacé tout l'intérieur de la boucle if par le code suivant :[code]
datejour = Cells(3, b) ' ***** la date est ligne 1
datejour = Mid(datejour, 4, 3) + Left(datejour, 3) + Right(datejour, 4)
With Workbooks(fichrecap).Sheets(nomfeuille)
.Cells(dispo1, 1) = datejour
.Cells(dispo1, 2) = Cells(lign, 1)
.Cells(dispo1, 3) = Cells(lign, 2)
.Cells(dispo1, 4) = Cells(lign, 3)
.Cells(dispo1, 5) = texte
End With
dispo1 = dispo1 + 1 'pour incrémentation de ligne[/code]
et ça donne les résultats en bleu !
Ce qui prouve à l'évidence que l'essentiel (du point de vue de l'optimisation), ce n'est pas les conditions de la boucle mais le contenu de cette boucle...
A+
| |||||||
Petit astucien | bonsoir,
pour information : le "cahier des charges" du demandeur n'est pas très stable !.
je me retire du concours
bon courage aux spécialistes.
a+
| |||||||
![]() | Ben...
J'avais cru déceler également un léger flou dans la présentation, c'est pourquoi je ne me suis pas dépêché d'intervenir.
Néanmoins notre amie n'est pas dépourvues de qualités : si elle veut bien faire quelques efforts pour nous présenter les choses de manière compréhensibles pour des neurones un peu usagés comme les miens, on trouvera peut-être un terrain d'entente !
A+ | |||||||
Publicité | ||||||||
| ||||||||
|
Les bons plans du moment PC Astuces | Tous les Bons Plans | ||||||||||||||||||
|