Gain de place dans une fonction

Résolu
c135078 Messages postés 48 Date d'inscription lundi 12 novembre 2007 Statut Membre Dernière intervention 5 mai 2009 - 11 déc. 2008 à 10:46
c135078 Messages postés 48 Date d'inscription lundi 12 novembre 2007 Statut Membre Dernière intervention 5 mai 2009 - 12 déc. 2008 à 08:03
Bonjour,

En résumer j'ai écrit une macro me permettant grace à un formulaire d'écrire directement dans excel...
le formulaire est composé d'une liste de personne... à qui on doit sélectionner un poste pour une semaine

J'ai 81 combinaisons possible (9x9) où en fait en recopie systématiquement la même chose par poste mais en descendant d'une ligne pour chaque personne...

j'aurai donc aimé établir une "déclaration/une condition/un préalable...." de départ qui dirait si poste 1 .... écrire dans excel A, SOP, ...  du style

ActiveCell.Offset(1, 0).Range("A1").Select
If FormEncodage.personne1-poste1.Value = True Then
   poste 1
If FormEncodage.personne1-poste2.Value = True Then
   poste 2
...
ActiveCell.Offset(1, 0).Range("A1").Select
If FormEncodage.personne2-poste1.Value = True Then
   poste 1
If FormEncodage.personne2-poste2.Value = True Then
   poste 2
...

pour chaque poste ma macro ressemble à

If FormEncodage.SYop.Value = True Then
ActiveCell.Offset(0, 0).Value = "A"
ActiveCell.Offset(0, 1).Value = "SOP"
ActiveCell.Offset(0, 2).Value = "='pl'!B3"
ActiveCell.Offset(0, 3).Value = "='pl'!C3"
ActiveCell.Offset(0, 4).Value = "GYN/CPN (SOP)"
ActiveCell.Offset(0, 5).Value = "='pl'!E3"
ActiveCell.Offset(0, 6).Value = "='pl'!F3"
ActiveCell.Offset(0, 7).Value = "='pl'!G3"
ActiveCell.Offset(0, 8).Value = "='pl'!H3"
ActiveCell.Offset(0, 9).Value = "='pl'!I3"
ActiveCell.Offset(0, 10).Value = "='pl'!J3"
ActiveCell.Offset(0, 11).Value = "='pl'!K3"
End If

Donc ce qui me manque c'est la possibilité d'établir au départ Poste1 = "ma macro juste ici au dessus"
et la possibilité dans ma fonction de dire IF...true Then... "appliquer" Poste 1....

je sais pas si c'est très clair...mais comme je n'arrive à m'exprimer mieux j'ai du mal à faire des recherches sur le forum

Un tout grand merci d'avance

Jérôme

5 réponses

nhervagault Messages postés 6063 Date d'inscription dimanche 13 avril 2003 Statut Membre Dernière intervention 15 juillet 2011 37
11 déc. 2008 à 21:17
Je ne connais pas trop ce type de programmation

if FormEncodage.poste1.Value = True Then
call remplirLigne ("Personne 1",1)
End If

sub remplirligne(personne as string, numeropersonne as integer)

ActiveCell.Offset(0, 0).Value = personne
ActiveCell.Offset(0, 1).Value = "Tache1"
ActiveCell.Offset(0, 2).Value = "Tache2"
ActiveCell.Offset(0, 3).Value = "Tache3"
ActiveCell.Offset(0, 4).Value = ....
ActiveCell.Offset(0, 5).Value = "tache3"
ActiveCell.Offset(0, 6).Value = "='pl'!F3"
ActiveCell.Offset(0, 7).Value = "='pl'!G3"
ActiveCell.Offset(0, 8).Value = "='pl'!H3"
ActiveCell.Offset(0, 9).Value = "='pl'!I3"
ActiveCell.Offset(0, 10).Value = "='pl'!J3"
ActiveCell.Offset(0, 11).Value = "='pl'!K3"

end sub

apres il faut voir comment composé les formules
je ne connais pas ce style d'ecrriture
"='pl'!K3"

Peut devenir

"='p" +numeropersonne + "'!K3"
3
nhervagault Messages postés 6063 Date d'inscription dimanche 13 avril 2003 Statut Membre Dernière intervention 15 juillet 2011 37
11 déc. 2008 à 15:03
Salut,

J'ai quasi rien compris

1 --> Que vient faire le XML dans le choix de ta configuration
2 --> C'est pas du c# mais du VB (voir du VBA)

Je vais teneter de répondre
'C'est la ligne qui varie donc on atribue la ligne en fonction de la personne.

If FormEncodage.personne1-poste1.Value = True Then
 ligne = 1
end if

ActiveCell.Offset(ligne, 0).Value = "A"
ActiveCell.Offset(
ligne
, 1).Value = "SOP"
ActiveCell.Offset(
ligne
, 2).Value = "='pl'!B3"
ActiveCell.Offset(
ligne,
3).Value = "='pl'!C3"
.....
0
c135078 Messages postés 48 Date d'inscription lundi 12 novembre 2007 Statut Membre Dernière intervention 5 mai 2009
11 déc. 2008 à 16:01
Sorry j'ai essayer d'être le plus clair possible et je me rend bien compte que c'est pas gagné...

En fait j'ai un "userform" dans VB...

où j'ai créé 9 "frames" composée de 9 "optionbouton" chacune....

ce qui correspond à des 9 personnes (frame) pour lequelle on doit sélectionner au moins un poste de travail (optionbouton)

Chaque poste correspond à l'activité d'une semaine (10 demi-journées) où en fonction du poste les personnes font des taches différentes d'un jour à l'autre...

quand on valide l'encodage...

le tout est copié dans excel en ce déplacant d'une colonne vers la droite pour chaque demi journée et en descendant d'une ligne après chaque personne
 ce qui me rempli mon planing de la semaine...

actuellement voila ma macro dans laquelle la liste des taches est définie pour le poste 1 en ce décalant d'une colonne à droite après chaque tache...puis je recommence pour le poste 2 pour la personne 1...3...4 ... à la fin de la personne 1 je demande qu'il descende d'une ligne et je recommence ce qui pour 9x9 me fait 81 possibilités... il me dit que ma fonction est trop longue

pour la personne 1

ActiveCell.Offset(1, 0).Range("A1").Select

if FormEncodage.poste1.Value = True Then
ActiveCell.Offset(0, 0).Value = "Personne 1"
ActiveCell.Offset(0, 1).Value = "Tache1"
ActiveCell.Offset(0, 2).Value = "Tache2"
ActiveCell.Offset(0, 3).Value = "Tache3"
ActiveCell.Offset(0, 4).Value = ....
ActiveCell.Offset(0, 5).Value = "tache3"
ActiveCell.Offset(0, 6).Value = "='pl'!F3"
ActiveCell.Offset(0, 7).Value = "='pl'!G3"
ActiveCell.Offset(0, 8).Value = "='pl'!H3"
ActiveCell.Offset(0, 9).Value = "='pl'!I3"
ActiveCell.Offset(0, 10).Value = "='pl'!J3"
ActiveCell.Offset(0, 11).Value = "='pl'!K3"
End If
if FormEncodage.poste2.Value = True Then

...

puis pour la personne 2

'personne 2
ActiveCell.Offset(1, 0).Range("A1").Select
...

et ainsi de suite pour chaque personne

Mais pour chaque poste les taches journalières sont identiques... j'aurai donc aimé fixer des conditions de départ détaillant chaque poste et les rappeler en lorsque la valeur de ce poste = true pour cette personne...

J'espère que c'est plus clair...

déjà un tout grand merci

Jérôme

Un tout grand merci d'avance
0
c135078 Messages postés 48 Date d'inscription lundi 12 novembre 2007 Statut Membre Dernière intervention 5 mai 2009
11 déc. 2008 à 16:06
pour plus d'info je commence ma macro par

Sub Entrée ()
Userfom.hide
Range("A1").select
Selection.end(x1down).select
ActiveCell....

Un tout grand merci d'avance
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
c135078 Messages postés 48 Date d'inscription lundi 12 novembre 2007 Statut Membre Dernière intervention 5 mai 2009
12 déc. 2008 à 08:03
Parfait ça marche un tout grand merci....

Un tout grand merci d'avance
0
Rejoignez-nous