Code VBA qui ne fonctionne plus sans raison app

Bonjour à tous et plus particulièrement à Dan, Ooiste, Dubois, Amadéus et Galopin qui m'apportez vraiment beaucoup.

Alors là je ne comprends plus rien.

Vous m'avez élaboré ce code VBA dans l'exemple en pièce jointe pour les onglets janvier / février.

J'ai pas mal compris comment cela fonctionnait, ça marchait bien, vous m'avez appris à rajouter des formules automatiquement sur les nouvelles lignes créées.

Grâce à vous j'ai aussi monté une usine à gaz pour calculer des congés en fonction des horaires de chacun des agents qui travaillent sur ma commune.

Et puis d'un coup d'un seul, depuis hier le code VBA ne fonctionne presque plus sauf pour case BdCongés:

case "Hs", case"Ré", ne fonctionnent plus.

Qu'ai-je fais comme Conn..., heu pardon, bêtise ?

AU SECOURS....

-- Mer Déc 30, 2009 2:48 pm --

J'ai trouvé une première erreur,

Select Case Z
Case "Hs", "Ré": S = Z
    NomDate S, iR, iC  'Call (voir plus bas)

Il y avait pas les guillements de Hs et Ré, mais ça ne résoud pas tout.

La sélection de la feuille ne se fait pas

A part la 1ère formule, les autres ne se créent pas.

-- Mer Déc 30, 2009 3:18 pm --

Apparemment cela vient des autres formules, si je les enlève, le .select refonctionne.

C'est donc une erreur de syntaxe dans les formules à ajouter.

Quelqu'un peut-il m'aider à trouver laquelle est-ce svp ?

Les guillemets peut-être ?

-- Mer Déc 30, 2009 3:44 pm --

j'ai presque tout trouvé :

j'ai remplacé :

Case "Hs"
.Range("F" & LR).Formula = "=E" & LR & "-D" & LR
.Range("I" & LR).Formula = "=IF(A" & LR & "=HsIndiv!$C$14,"""",IF(OR(C" & LR & "<HsIndiv!$F$13,G" & LR & "<>""A payer""),"""",A" & LR & ")"
.Range("J" & LR).Formula = "=IF(OR(A" & LR & "<>HsIndiv!$C$14,C" & LR & "<HsIndiv!$F$12,C" & LR & ">HsIndiv!$F$13,G" & LR & "<>""A payer""),"""",MAX(J$1:J" & LR - 1 & ")+1)"
.Range("K" & LR).Formula = "=IF(OR(A" & LR & "<>Heures!$B$5,G" & LR & "<>""A récupérer""),"""",MAX($K:K" & LR - 1 & ")+1)"
    .Select

par

Case "Hs"
.Range("F" & LR).Formula = "=E" & LR & "-D" & LR
.Range("I" & LR).Formula = _
"=IF(A" & LR & "=HsIndiv!$C$14,"""",IF(OR(C" & LR & "<HsIndiv!$F$12,C" & LR & ">HsIndiv!$F$13,G" & LR & "<>""A payer""),"""",A" & LR & "))"
.Range("J" & LR).Formula = _
"=IF(OR(A" & LR & "<>HsIndiv!$C$14,C" & LR & "<HsIndiv!$F$12,C" & LR & ">HsIndiv!$F$13,G" & LR & "<>""A payer""),"""",MAX(J$1:J" & LR - 1 & ")+1)"
    .Select
.Range("K" & LR).Formula = _
"=IF(OR(A" & LR & "<>Heures!$B$5,G" & LR & "<>""A récupérer""),"""",MAX($K$1:K" & LR - 1 & ")+1)"

ça marche...

il me reste à transformer :

.Range("F" & LR).Formula = "=VLOOKUP(Weekday(E" & LR & ",1);INDIRECT(D" & LR & ");11;0)"

et

.Range("D" & LR).Formula = "=IF(OR(C" & LR & "<Légende!$K$6;C" & LR & ">Légende!$L$6);VLOOKUP(A" & LR & ";recherche;15;0);VLOOKUP(A" & LR & ";recherche;16;0))"

-- Mer Déc 30, 2009 3:54 pm --

j'ai remplacé par :

.Range("F" & LR).Formula = _
"=VLOOKUP(Weekday(E" & LR & ",1);INDIRECT(D" & LR & ");11;0)"

et

    .Range("D" & LR).Formula = _
"=IF(OR(C" & LR & "<Légende!$K$6;C" & LR & ">Légende!$L$6);VLOOKUP(A" & LR & ";recherche;15;0);VLOOKUP(A" & LR & ";recherche;16;0))"

mais ça ne fonctionne pas, quelqu'un a-t'il une idée svp ?

bonjour,

Euh... Il y a beaucoup de chose à dire ! Je n'ai répondu qu'à la question posée mais et c'est l'inconvénient des forum on ne répond pas aux questions que vous ne posez pas. Or beaucoup de débutants se trompent souvent de question.

Mon projet est-il viable ?

Ai-je fait un brin d'analyse pour déterminer une bonne méthode de W ou est-ce que j'improvise tout au fil de l'eau...

Suis-je à la hauteur ?

Je voudrais faire ça : Ok pourquoi pas... Mais est-ce bien raisonnable ?

J'ai bien vu que tu étais revenu sur le post précédent mais je n'ai pas ecore répondu parce que je travaille beaucoup la-dessus. Mais on est fichtrement mal barré...

Pour répondre à ta dernière question : Supprime la gestion d'erreur et tu auras la réponse à ta question !

J'ai bien compris que ça te posait des problèmes de suppression mais ça tu n'en parlais pas au départ !

Je me suis interressé à la logique du problème, pas à l'exactitude des formules. De plus la gestion d'erreur masquait la faute...

Bon avant de continuer sur ce sujet, Il faut que je te dise qu'il y aura pas mal de chose à remettre à plat.

On pourrait continuer de travailler gentiment sur janvier pour se rendre compte ensuite qu'on ne peut pas travailler de la sorte.

Si on prend le projet globalement et qu'on analyse un peu le machin, je pense que les Worksheet_Change n'ont rien à faire là. De même que la Sub NomDate qui à vocation à migrer dans un module standart (Module1)

D'ailleurs au passage la feuille init non plus n'a pas vocation à avoir la moindre macro.

Bon maintenant que je me suis jeté à l'eau. Qu'est-ce qu'on fait ?

Ce que je suis en train de faire c'est une gestion centralisée des Worksheet_Change, car il me semble hors de question de multiplier les feuilles et les problèmes de la sorte...

Malheureusement je n'avance pas vite car je dois gérer aussi la fin d'année... et mes journées n'ont que 24 heures !

Mébon, je ne puis en dire plus pour l'instant.

En premier je vais essayer de revoir ces formules qui ne passent pas en Hs...

Ensuite... On va faire des voeux hein !

A+

Je suis très honoré par ton aide, je te l'assure.

De même c'est la fin de l'année, je dois faire signer des arrêtés aux agents, remplir les notations et vérifier les paies de remplacement de gardiens, sans compter les pb de fuites de plafonds des écoles après les chutes de neige etc etc donc comme toi il me faudrait des journées de 48h. lol

En fait, je suis plus ou moins de passage dans ce service. Acteur de toute une restructuration dans le but d'optimiser le service public à des fins économiques dans l'intérêt général, j'essaie de construire un tableau qui sera simple d'accès aux utilisateurs lambdas.

Sans aller jusqu'à équiper notre réseau de logiciels libres, utiliser Excel ou Access à au moins 50% de ses possibilités de manière à automatiser un grand nombre de tâches administratives (présences, congés, heures supp, etc, ), permettrait d'éviter l'investissement dans des logiciels pro à coûts excessifs, et dont parfois la complexité décourage les plus calés d'entre nous. Surtout que celui que nous avions n'était en plus même pas adapté à nos besoins.

Ce qu'il faut que tu saches quand même, c'est que mon tableau (dont l'exemple vierge s'appelle "cours planning 2" en raison des données personnelles présentes dans le vrai), est déjà utilisé par tous mes collègues de bureau qui le trouvent par ailleurs très pratique, et particulièrement adapté à notre service.

Dans la pratique, il ne me manque pas grand chose, à part quelques petits réglages.

Pour répondre aux questions pertinentes, pour moi ce projet est viable et parfaitement réalisable vu que toute notre gestion de personnel se fait déjà dessus, sauf qu'il me reste les congés à automatiser et un dernier tableau de recherches pour mettre en place un planning automatique. J'y reviendrai par la suite.

En conclusion, je serai vraiment ravi et honoré de travailler là-dessus avec toi. Pour la nouvelle année ce serait parfait.

De plus ton sens de l'humour me fait beaucoup rire (coder avec les pieds, être banané, ect.. ).

Je m'arrête là pour aujourd'hui, mais je vais préparer un résumé de tout ce que j'ai besoin pour que tu me dises si on peut améliorer, simplifier ou si il faut tout refaire, ce qui dans ce cas ferait grincer des dents mes collègues.

Si je l'ai plus ou moins improvisé, c'est qu'au départ ce tableau a tout de suite plu à l'ensemble du service et qu'il a été exploité dès le début de sa création par tous mes collègues.

Il a donc fallu que je l'améliore au fur et à mesure de son utilisation.

Ceci dit, le problème de suppression peut être contourné si on empêche les doublons de dates à l'indexation par rapport aux nom afin de ne pas enlever 2 fois les heures si le choix congé a par erreur été tapé 2 fois. (j'essaierai d'être plus précis à l'aide de mon exemple sur lequel j'inscrirai les commentaires).

Enfin j'insiste encore sur le fait que sans vous, sans toi, je n'en serais pas là et je ne sais pas comment vous remercier. Je serais ravi de vous rencontrer un jour.

Si tu peux juste me mettre en VBA les 2 formules que je vais te transmettre sur ce même forum dans la journée quand j'aurais une pose, ça serait magnifique, cela me permettrait d'automatiser enfin les congés. Je demanderai en même temps pour l'indexation sans doublons.

Mille fois merci, bonnes fêtes de fin d'année, et j'attendrai lundi pour vous transmettre tous mes voeux plus longuement.

A très vite Roger

David.

Bonjour,

Ok. ça confirme un peu ce que j'imaginais.

Tant mieux si le truc est déjà opérationnel. ça laisse un peu de marge de manoeuvre car on n'est pas bousculé par le temps. ça serait plus problématique si on avait une obligation de rendement immédiat.

Je vais regarder tes deux dernières formules, mais... dans quelques heures!

A+

C'est vraiment très gentil, je n'exprimerait jamais à quel point cela me touche cette aide si précieuse.

Merci.

Je viens juste de m'apercevoir (quelle banane t'as raison), j'ai mis des ; au lieu de ,

Ca change tout..

Pffffff..

Il me reste le problème des doublons dans l'indexation.

Comment puis-je indexer sans doublons sur la colonne date à partir d'une formule du genre :

=SI(A2<>Congés!$B$5;"";MAX(F$1:F1)+1)

La colonne date est la colonne C.

Il me faut aussi le cas où je supprime un choix.

Case ""

que dois-je mettre pour ne pas avoir d'erreur si je supprime la ligne 'on error resume next' dans le code ?

Doit-on ouvrir un autre forum pour cela, celui-ci étant résolu pour moi ?

Peut-on échanger nos emails ?

bonsoir,

Pour la première question, je n'ai pas de réponse. En fait je ne comprends pas trop la question. ça ne me parait pas être un problème d'indexation mais plutôt d'éviter de créer des doublons. Une sous routine dans la Sub NomDate peut peut-être y arriver, mais je manque un peu de billes pour pouvoir jouer avec toi... Dans quel contexte crains-tu de créer un doublon ? Là je ne te suis pas bien. Il me semble qu'il y a autant de chance de donner deux périodes de congés à un même quidam le 1er Aout que d'enterrer deux fois sa belle-mère...

Pour les autres questions, à mon avis (mais je ne suis pas un professionnel...) ça ne parait pas possible dans ce contexte compte tenu des autres choix (Liste de validation + Worksheet_Change)

Le On Error Resume Next n'est pas une gestion d'erreur.

Avec un USF ça me paraissait plus souple, mais ce n'est pas possible non plus dans ce contexte toujours compte tenu du choix des (Listes de Validation + Worksheet_Change)

De toute façon dans l'un comme l'autre cas la seule manière de gérer les doublons c'est déviter d'en faire. Une fois validé, la correction d'erreur passera par un "mano à mano" avec ta BD ou par une sortie sans sauvegarde... mais surement pas par un Case ""

A+

Rechercher des sujets similaires à "code vba qui fonctionne raison app"