Page 1 sur 1

[Résolu][Calc] Gestion convocation

MessagePublié: 13 Août 2019 03:59
par OOotremer971
Bonjour,

Pour faire suite à ce fil : colorer des lignes sous conditions

Un premier jet qui peut encore être amélioré en fonction des contraintes que l'utilisateur final est susceptible de devoir affronter. Je me suis autoriser quelques libertés qui n'apparaissaient pas dans le cahier des charges, réversibles si besoin :
-) J'ai mis une liste déroulante dans les colonnes J,M,P afin de sélectionner A ou P pour absent ou présent, cela limite les erreurs de saisie.
-) Lorsqu'une des colonnes J,M,P contient la lettre P, la ligne est volontairement verrouillée. Pour effectuer une éventuelle correction sur une ligne, il faut sélectionner "Corriger" dans la colonne R et modifier ce qui doit l'être sur cette ligne. Elle sera à nouveau protégée lorsqu'un P aura été saisi.Pour communiquer entre la feuille1 et la feuille2, j'ai besoin d'un identifiant unique pour retrouver les lignes écartée lors de la première absence. Je me suis basé sur la colonne A en espérant que chaque ligne possède un numéro différent.

Le fichier est conçu pour fonctionner ligne par ligne. Si il devait être alimenté par copier coller d'un autre fichier, il faudrait copier/coller les données de la colonne A à I (pas plus). La colonne J devra être remplie manuellement ligne par ligne pour que le système fonctionne correctement.

Je te laisse tester, n’hésite pas à te plaindre si ça ne fonctionne pas correctement et n'hésite pas non plus à persévérer pour comprendre comment il fonctionne.

Code : Tout sélectionner   AgrandirRéduire
Option Explicit


Sub Main(oEvt)
if oEvt.supportsService("com.sun.star.table.Cell") then
   Dim oDoc As Object, oCa As Object
   Dim nSheet As Long, nCol As Long, nRow As Long
   oDoc = Thiscomponent : oCa = oEvt.CellAddress
   nSheet = oCa.Sheet : nCol = oCa.Column : nRow = oCa.Row
   Select Case nCol
      Case 9, 12, 15, 17
         Select Case oEvt.String
          Case "A"
             If nCol = 15 Then
                oDoc.Sheets(nSheet).GetCellRangeByPosition(0,nRow,16,nRow).CellStyle = "AA"
               oDoc.Sheets(nSheet).GetCellByPosition(16,nRow).SetString("RENONCE")
             End If
             If nCol = 12 Then
                oDoc.Sheets(nSheet).GetCellRangeByPosition(0,nRow,nCol,nRow).CellStyle = "A"
                oDoc.Sheets(nSheet).GetCellRangeByPosition(nCol+1,nRow,16,nRow).CellStyle = "STD"
             End If
             If nCol = 9 Then
                Dim y As Long, ref As Long, Formule1 As String, Formule2 As String
                ref = oDoc.Sheets(nSheet).GetCellByPosition(0,nRow).Value
               y = EmptyFirstLine(nSheet+1)
                oDoc.Sheets(nSheet).GetCellRangeByPosition(0,nRow,nCol,nRow).CellStyle = "A"
                oDoc.Sheets(nSheet).GetCellRangeByPosition(nCol+1,nRow,16,nRow).CellStyle = "STD"
                oDoc.Sheets(nSheet+1).GetCellRangeByPosition(0,y,9,y).SetDataArray(oDoc.Sheets(nSheet).GetCellRangeByPosition(0,nRow,9,nRow).DataArray)
               oDoc.Sheets(nSheet+1).GetCellRangeByPosition(0,y,9,y).CellStyle = "A"
               Formule1 ="=IF(ISERROR(VLOOKUP($A"&Cstr(nRow+1)&";$Feuille2.$A$1:$L$1000;COLUMN();0));""""&T(STYLE(""STD""));TEXT(VLOOKUP($A"&Cstr(nRow+1)&";$Feuille2.$A$1:$L$1000;COLUMN();0);""JJ/MM/AA""))&T(STYLE(""A""))"
               Formule2 ="=IF(ISERROR(VLOOKUP($A"&Cstr(nRow+1)&";$Feuille2.$A$1:$L$1000;COLUMN();0));""""&T(STYLE(""STD""));TEXT(VLOOKUP($A"&Cstr(nRow+1)&";$Feuille2.$A$1:$L$1000;COLUMN();0);""HH:MM:SS""))&T(STYLE(""A""))"
               oDoc.Sheets(nSheet).GetCellByPosition(nCol+1,nRow).SetFormula(Formule1)
               oDoc.Sheets(nSheet).GetCellByPosition(nCol+2,nRow).SetFormula(Formule2)
             End If
          Case "P"
             oDoc.Sheets(nSheet).GetCellRangeByPosition(0,nRow,nCol,nRow).CellStyle = "P"
             oDoc.Sheets(nSheet).GetCellRangeByPosition(nCol+1,nRow,16,nRow).CellStyle = "GR"
             oDoc.Sheets(nSheet).GetCellByPosition(16,nRow).SetString("")
         
          Case "Modifier"
             oDoc.Sheets(nSheet).GetCellRangeByPosition(0,nRow,16,nRow).CellStyle = "STD"
             oDoc.Sheets(nSheet).GetCellByPosition(17,nRow).SetString("")   
      End Select
   End select
End if
End Sub

Function EmptyFirstLine(index As Long) As Long
EmptyFirstLine = Thiscomponent.Sheets(index).Columns.GetByName("A").queryEmptyCells.RangeAddresses(0).StartRow
End Function


et le fichier pour tester :

Re: [Calc] Gestion convocation

MessagePublié: 13 Août 2019 07:33
par Norvak
Bonjour,
merci d'avoir pris du temps pour m'aider, cependant je ne sais pas si je dois l'executer ta macro ou si elle est déjà censé fonctionner?
Car j'ai fait un test ça n'a pas marché puis ensuite je suis aller outils > macros > executer une macro > gestion convocation> standard > module 1 > main et cela m'a mis un message d'erreur :
erreur msg.png
erreur msg.png (9.7 Kio) Consulté 425 fois


Que dois je faire?
Merci d'avance.

Re: [Calc] Gestion convocation

MessagePublié: 13 Août 2019 08:42
par Dude
La macro est branchée sur l'événement de feuille "Contenu modifié".
Elle ne doit pas être exécutée en direct car elle attends les coordonnées de la cellule active.

Re: [Calc] Gestion convocation

MessagePublié: 13 Août 2019 08:54
par Norvak
Dude a écrit:La macro est branchée sur l'événement de feuille "Contenu modifié".
Elle ne doit pas être exécutée en direct car elle attends les coordonnées de la cellule active.


Bonjour,
Excuse moi mais j'ai rien compris à ton msg, ... :super:

Re: [Calc] Gestion convocation

MessagePublié: 13 Août 2019 09:16
par Dude
Et moi, je n'ai pas compris ce que tu n'as pas compris.

Re: [Calc] Gestion convocation

MessagePublié: 13 Août 2019 09:28
par Norvak
Dude a écrit:La macro est branchée sur l'événement de feuille "Contenu modifié".


Je ne vois pas où est "contenue modifié"? sur la piècejointe il ya feuille 1 et 2.De quoi parles tu par "contenu modifié"

Dude a écrit:Elle ne doit pas être exécutée en direct car elle attends les coordonnées de la cellule active.


ne doit pas être exécutée en direct c'est à dire?
cellule active?

Re: [Calc] Gestion convocation

MessagePublié: 13 Août 2019 09:38
par Dude
Norvak a écrit:De quoi parles tu par "contenu modifié"

no_problemo.gif
Clique sur l'image pour en voir l'animation


Norvak a écrit:ne doit pas être exécutée en direct c'est à dire?
Norvak a écrit:je suis aller outils > macros > executer une macro > gestion convocation> standard > module 1 > main et cela m'a mis un message d'erreur

Re: [Calc] Gestion convocation

MessagePublié: 13 Août 2019 09:54
par Norvak
ok mais du coup comment je fais pour tester son tableau?

Re: [Calc] Gestion convocation

MessagePublié: 13 Août 2019 10:21
par Dude
Il me semble que OOotremer971 te donne un mode d'emploi au départ non ?

Néanmoins comme le code qu'il publie dans son 1er message ne correspond pas à celui qui est dans le document, je lui laisse le soin d'expliquer son travail.

Mais comme j'ai l'habitude de le dire, l'usage de macro n'est jamais la panacée.
Le tableur dispose de fonctionnalités internes qu'il convient d'exploiter avant.
Et si le problème n'est pas résolu, se poser la question : une suite bureautique est-il l'outil adapté ?

Bon courage

Re: [Calc] Gestion convocation

MessagePublié: 13 Août 2019 10:42
par Norvak
Dude a écrit:Il me semble que OOotremer971 te donne un mode d'emploi au départ non ?

sauf que son mode d'emploi ne marche pas ou alors j'ai raté un épisode mais lequel? :lol:

Dude a écrit:Et si le problème n'est pas résolu, se poser la question : une suite bureautique est-il l'outil adapté ?

Qu'entends tu par là? :shock:

Re: [Calc] Gestion convocation

MessagePublié: 13 Août 2019 11:06
par OOotremer971
Bonjour,

Je viens de télécharger le fichier que j'ai mis en ligne et effectivement les dernières modifications ne se sont pas enregistrées correctement. Je modifie ça et je reviens.

A+

Désolé

Re: [Calc] Gestion convocation

MessagePublié: 13 Août 2019 11:14
par Dude
Norvak a écrit:Qu'entends tu par là? :shock:

J'entends qu'un tableur est souvent utilisé pour n'importe quoi :
http://oooforum.free.fr/index.php/2016/ ... -planning/
Il suffit de remplacer "planning" par "gestion convocation". :lol:

Re: [Calc] Gestion convocation

MessagePublié: 13 Août 2019 11:37
par OOotremer971
Une version corrigée. C'est bizarre cette histoire d'enregistrement qui se fait pas :(
Il reste une petite modification à faire sur l'affichage des colonnes K et L lorsque la feuille2 n'est pas renseignée. Corrigé
A+

[Résolu]:Re: [Calc] Gestion convocation

MessagePublié: 13 Août 2019 13:15
par Norvak
waaaaa le génie :bravo: , meercii mille fois j'espère que ça va pas être trop galère à reproduire sur mon tableau :lol:
je te tiens au courant si j'ai réussi mais en tout cas sur ton tableau ça marche nickel cette fois.
comme quoi tu vois c'est pas ma faute "dude" y avait une couille dans sa macro 8)

Re: [Calc] Gestion convocation

MessagePublié: 13 Août 2019 13:32
par OOotremer971
Norvak a écrit:j'espère que ça va pas être trop galère à reproduire sur mon tableau :lol:

Ça risque de l'être et quitte à perdre du temps autant le faire efficacement.

Transfère les données de ton fichier vers le mien. Tu peux faire un copier/collage spécial (décocher format) de la zone A1:Ix de ton fichier vers le mien. Ensuite, à partir de la colonne J, tu travailles ligne par ligne pour renseigner la colonne J et les suivantes le cas échéant et tout devrait bien se passer.

A+