[Calc] Saisie rubrique et sous rubrique report de nom
Modérateur : Vilains modOOs
Règles du forum
Balisage obligatoire dans cette section !
Aidez-nous à vous aider au mieux en balisant correctement votre question : reportez-vous sur les règles de cette section avant de poster !
Balisage obligatoire dans cette section !
Aidez-nous à vous aider au mieux en balisant correctement votre question : reportez-vous sur les règles de cette section avant de poster !
-
- Membre lOOyal
- Messages : 43
- Inscription : 05 sept. 2012 09:15
- Localisation : Metz
Re: [Calc] Saisie rubrique et sous rubrique report de nom
Hello c'est encore moi, alors j'ai un petit problème en effet si je copie et affecte ma liste déroulante un certain nombre de lignes cela fait plusieurs choses non désirables:
-ça fait ralentir a fond le programme
-ma date n'est plus reporté au bon endroit c'est a dire deux lignes après la date suivante en effet pour le report j'ai utilisé la derniere ligne non vide
n'y aurait t'il pas une solution pour copier coller la liste déroulante ou en affecter une nouvelle par macro s'il vous plait?? T_T cela arrangerait bien mes choses
-ça fait ralentir a fond le programme
-ma date n'est plus reporté au bon endroit c'est a dire deux lignes après la date suivante en effet pour le report j'ai utilisé la derniere ligne non vide
n'y aurait t'il pas une solution pour copier coller la liste déroulante ou en affecter une nouvelle par macro s'il vous plait?? T_T cela arrangerait bien mes choses
Bien à vous
Libre Office 3.6
Windows xp
Libre Office 3.6
Windows xp
-
- ManitOOu
- Messages : 3028
- Inscription : 30 avr. 2011 23:08
- Localisation : Casablanca (Maroc)
Re: [Calc] Saisie rubrique et sous rubrique report de nom
Je me disais aussi... s'il te donnait 50€ à chaque nouvelle demande, tu deviendrais vite riche
Bon, un truc que je viens de découvrir, sans la bible qui me paraît muette à ce sujet, juste un coup d’œil à l'objet cellule et au SDK + oser tenter l'aventure (sur un nouveau classeur, je suis pas fou )
Place une liste de validité correcte où tu veux, dans la feuille Données par exemple ; soit c1 cette cellule
Si c2 est la cellule où tu veux rajouter la validité, mets juste
Bon, un truc que je viens de découvrir, sans la bible qui me paraît muette à ce sujet, juste un coup d’œil à l'objet cellule et au SDK + oser tenter l'aventure (sur un nouveau classeur, je suis pas fou )
Place une liste de validité correcte où tu veux, dans la feuille Données par exemple ; soit c1 cette cellule
Si c2 est la cellule où tu veux rajouter la validité, mets juste
Code : Tout sélectionner
c2.validation = c1.validation
ça m'étonne un peu, sauf (peut-être) si tu en as mis sur toute une colonne ; quand j'ai émis cette suggestion, je pensais à une zone "raisonnable", 500 cellules par exemple.nhan57 a écrit :ça fait ralentir a fond le programme
À bientôt
LibO 4.1.5.3 et AOO 4.0.1 sous Windows 7, MRI et SDK pour les macros.
Et la sauvegarde incrémentée, c'est sympa !
LibO 4.1.5.3 et AOO 4.0.1 sous Windows 7, MRI et SDK pour les macros.
Et la sauvegarde incrémentée, c'est sympa !
-
- Membre lOOyal
- Messages : 43
- Inscription : 05 sept. 2012 09:15
- Localisation : Metz
Re: [Calc] Saisie rubrique et sous rubrique report de nom
Rah si seulement arrête alhrazred tu commence à me faire rêveralhazred a écrit :Je me disais aussi... s'il te donnait 50€ à chaque nouvelle demande, tu deviendrais vite riche
j'ai essayé de cette façon .GetCellByPosition(3,index1).validation=d5.validation dans la macro addthemes mais il ne l'accepte pas mmmhhhhhhalhazred a écrit :Bon, un truc que je viens de découvrir, sans la bible qui me paraît muette à ce sujet, juste un coup d’œil à l'objet cellule et au SDK + oser tenter l'aventure (sur un nouveau classeur, je suis pas fou )
Place une liste de validité correcte où tu veux, dans la feuille Données par exemple ; soit c1 cette cellule
Si c2 est la cellule où tu veux rajouter la validité, mets juste
Code : Tout sélectionner Agrandir
c2.validation = c1.validation
question raisonnable je lui en avais mis 1500 *siffle c'est pour qu'il évite de râler en effet il veut en créer des réunions ce cher mossieur!alhazred a écrit :ça m'étonne un peu, sauf (peut-être) si tu en as mis sur toute une colonne ; quand j'ai émis cette suggestion, je pensais à une zone "raisonnable", 500 cellules par exemple.
Par contre ce qui devait arriver arriva.... il me demande maintenant le bouton report de thèmes c'est à dire de sélectionner un thème dans la feuille compte rendu et de le reporter à une autre date,ainsi dans la feuille "themes a aborder" la modification est prise en compte, alors la je ne vois vraiment pas comment faire une petite aide?
Bonne journée! pour moi encore aujourd'hui et demain à souffrir (travailler) et puis 5 semaines à l'Université au seigneur comme j'aime les études maintenant!
Bien à vous
Libre Office 3.6
Windows xp
Libre Office 3.6
Windows xp
-
- ManitOOu
- Messages : 3028
- Inscription : 30 avr. 2011 23:08
- Localisation : Casablanca (Maroc)
Re: [Calc] Saisie rubrique et sous rubrique report de nom
Bonsoir,
Avecça ira nettement mieux.
Il ne va jamais les utiliser autre part, puisqu'en fait ils ne représentent rien de fixe (ils se modifient selon les ajouts et suppressions)
Et si par exemple il y a une date de clôture du dossier, il est bien plus simple de les rajouter alors (ou à chaque modification) par une macro (incrémenter, passer les lignes vides et celles des réunions)
En éludant le problème, une macro de base qui va déplacer la ligne d'index1 vers index2 (à toi de calculer correctement ces index)
Et maintenant la renumérotation des thèmes (pour faire plaisir à Missié ton patron)
Et bonne vie d'étudiant, c'est la meilleure (loin derrière moi, snifff)
Moi non plus, je l'accepte pas d5 est une cellule ou une adresse de cellule ?...nhan57 a écrit :j'ai essayé de cette façon .GetCellByPosition(3,index1).validation=d5.validation dans la macro addthemes mais il ne l'accepte pas mmmhhhhhh
Avec
Code : Tout sélectionner
.GetCellByPosition(3,index1).validation=.GetCellRangeByName("D5").validation
Pleure pas, c'est assez simple, si on oublie le problème de ces p#####n de numéros -- à mon avis, c'est du sadisme gratuitnhan57 a écrit :sélectionner un thème dans la feuille compte rendu et de le reporter à une autre date,ainsi dans la feuille "themes a aborder" la modification est prise en compte
Il ne va jamais les utiliser autre part, puisqu'en fait ils ne représentent rien de fixe (ils se modifient selon les ajouts et suppressions)
Et si par exemple il y a une date de clôture du dossier, il est bien plus simple de les rajouter alors (ou à chaque modification) par une macro (incrémenter, passer les lignes vides et celles des réunions)
En éludant le problème, une macro de base qui va déplacer la ligne d'index1 vers index2 (à toi de calculer correctement ces index)
Code : Tout sélectionner
'les index sont à partir de 0
Sub MoveRow(theSheet As Object,index1 As Long, index2 As Long)
Dim theRows As Object, theSource As Object, theTarget As Object
theRows = theSheet.rows
theSource = theRows(index1)
theRows.InsertByIndex(index2,1)
theTarget = theRows(index2).GetCellByPosition(0,0)
theSheet.CopyRange(theTarget.cellAddress,theSource.rangeAddress)
theRows.RemoveByIndex(index1,1)
End Sub
Code : Tout sélectionner
Sub SetThemeNumbers(theSheet As Object)
Dim number As Long, rowIndex As Long
For rowIndex = 2 To LastUsedRow(theSheet)
'Test sur les utilisateurs : présence <=> ligne de thème
cell = theSheet.GetCellByPosition(2,rowIndex)
If cell.string <> "" Then
theSheet.GetCellByPosition(0,rowIndex).value = number
End If
number = number+1
Next rowIndex
End Sub
'Si tu ne l'as pas déjà quelque part dans tes macros
Function LastUsedRow(sheet As Object) As Long 'donnée par Piaf
Dim cursor As Object
cursor = sheet.CreateCursor
cursor.GoToEndOfUsedArea(false)
LastUsedRow = cursor.rangeAddress.startRow
End Function
À bientôt
LibO 4.1.5.3 et AOO 4.0.1 sous Windows 7, MRI et SDK pour les macros.
Et la sauvegarde incrémentée, c'est sympa !
LibO 4.1.5.3 et AOO 4.0.1 sous Windows 7, MRI et SDK pour les macros.
Et la sauvegarde incrémentée, c'est sympa !
-
- Membre lOOyal
- Messages : 43
- Inscription : 05 sept. 2012 09:15
- Localisation : Metz
Re: [Calc] Saisie rubrique et sous rubrique report de nom
Bonsoir Alhazred merci encore une fois de ton temps, tu es vraiment une personne superbe, et à vrai dire si tu n'étais pas là je ne sais pas ce que j'aurais fait prendre de ton temps pour aider un pauvre débutant est vraiment respectable, si j'avais eu de la chance (mais je n'en ai jamais) mon tuteur aurait eu au minimum ton niveau mais on m'a affecté une personne qui n'a déjà d'un aucun diplôme informatique (je ne juge pas sur le diplôme) mais surtout pas les connaissances nécessaires, j'aurais été livré à moi même si ce forum n'existait pas.
Merci pour les macros, j'ai essayé de l'adapter mais ça ne marche pas, l'ai-je mal compris?
voici mon code
Et voici ci-joint mon dernier fichier ods au cas ou alors pour éviter de chercher ou se trouve mon rajoute, il se trouve dans la feuille AddTheme
et j'ai créer une nouvelle boite de dialogue qui est ReportThemeDlg
Merci d'avance! c'est dommage si je l'ai mal compris pourtant j'ai essayé de bien l'étudier
alhazred a écrit :.GetCellByPosition(3,index1).validation=.GetCellRangeByName("D5").validation
Merci pour les macros, j'ai essayé de l'adapter mais ça ne marche pas, l'ai-je mal compris?
voici mon code
Code : Tout sélectionner
Sub ReportTheme
With thisComponent.sheets
mainSheet = .GetByName("Themes a aborder")
serviceSheet = .GetByName("Données")
ReportSheet = .GetByName("Compte Rendu")
End With
Dim dlg As Object,dates As Object, theme As Object
DialogLibraries.LoadLibrary("Standard")
dlg = CreateUnoDialog(DialogLibraries.Standard.ReportThemeDlg)
dates = dlg.GetControl("Dates")
SetDates(dates)
Dim active_sheet As Object
Dim active_cell As Object
Dim Selection as Object
Dim MonTheme as String
Do
If dlg.Execute = 0 Then Exit Sub 'Cancel
If dates.selectedItem = "" Then
Print "Choissisez une date de réunion"
Else
Exit Do 'Dialog totally done and correct
End If
Loop
Selection = thisComponent.CurrentSelection
MonTheme = Selection.FormulaLocal
Dim index2 As Long
index2 = GetNewIndex(dates.selectedItem) 'the n° of the theme is done
active_sheet = thisComponent.currentController.activeSheet
ThisComponent.currentSelection.supportsService("com.sun.star.sheet.SheetCell")
if MonTheme = "" Or isEmpty(MonTheme) = true then
MsgBox("La cellule sélectionnée ne contient pas de texte")
Exit sub
end if
if Selection.cellbackColor = RGB (0,0,0) then
MsgBox("veuillez selectionner un thème")
Exit sub
end if
Dim r as integer
Dim c as integer
active_cell = thisComponent.getCurrentSelection
r = active_cell.CellAddress.Row
c = CellAddress.Column.GetCellRangeByName("E")
if Selection = thisComponent.sheets.getbyname("Compte rendu").GetCellByPosition(CStr(c)) then
MsgBox("Veuillez selectioner un thème")
Exit Sub
end if
active_cell = thisComponent.getCurrentSelection
MoveRow(mainSheet,active_cell,index2)
SetThemeNumbers(mainSheet)
SetThemeNumbers(ReportSheet)
end Sub
et j'ai créer une nouvelle boite de dialogue qui est ReportThemeDlg
Merci bien! mais en goutant à ce travail je me dis dit ah tiens après ma licence en alternance je ferais bien de continuer les études c'est plutôt sympa!alhazred a écrit :Et bonne vie d'étudiant, c'est la meilleure (loin derrière moi, snifff)
Merci d'avance! c'est dommage si je l'ai mal compris pourtant j'ai essayé de bien l'étudier
Vous ne pouvez pas consulter les pièces jointes insérées à ce message.
Bien à vous
Libre Office 3.6
Windows xp
Libre Office 3.6
Windows xp
-
- ManitOOu
- Messages : 3028
- Inscription : 30 avr. 2011 23:08
- Localisation : Casablanca (Maroc)
Re: [Calc] Saisie rubrique et sous rubrique report de nom
Bonjour,
Oui, oui, on m'appelle alhazred le magnifique ou saint alhazred, alors pas la peine d'en rajouter
Ta macro me prenant la tête (trop longue, je t'ai conseillé de décomposer, autant que possible, en macros plus petites, disons de 5 à 15 lignes), je vais me contenter de commenter les lignes fautives.
Mais d'abord, la liste de réunions dans Données doit absolument être synchronisée avec TOUTE la feuille Thèmes (bon travail en perspective) à moins que, pour la phase de développement, tu ne préfères complètement vider les listes (feuilles Données, Thèmes et Compte-rendu)
activeCell est inutile, tu as déjà Selection avec la même définition ; en plus, il y a le risque (minime, je le reconnais) que l'utilisateur ait changé entre temps de feuille courante.
cellAddress.column est un nombre, et "E" n'est pas une adresse correcte.
Et le test est simplement de voir si la cellule utilisateur est remplie ou pas. Nouvelle version :
Tu peux aussi supprimer les tests précédents sur la sélection (à part celui avec SupportsService) : ainsi, on peut sélectionner n'importe quelle cellule de la ligne.
Bon J-1
Oui, oui, on m'appelle alhazred le magnifique ou saint alhazred, alors pas la peine d'en rajouter
Ta macro me prenant la tête (trop longue, je t'ai conseillé de décomposer, autant que possible, en macros plus petites, disons de 5 à 15 lignes), je vais me contenter de commenter les lignes fautives.
Mais d'abord, la liste de réunions dans Données doit absolument être synchronisée avec TOUTE la feuille Thèmes (bon travail en perspective) à moins que, pour la phase de développement, tu ne préfères complètement vider les listes (feuilles Données, Thèmes et Compte-rendu)
La dernière ligne fait de c une cellule, donc Dim c As Object.nhan57 a écrit : Dim r as integer
Dim c as integer
active_cell = thisComponent.getCurrentSelection
r = active_cell.CellAddress.Row
c = CellAddress.Column.GetCellRangeByName("E")
if Selection = thisComponent.sheets.getbyname("Compte rendu").GetCellByPosition(CStr(c)) then
activeCell est inutile, tu as déjà Selection avec la même définition ; en plus, il y a le risque (minime, je le reconnais) que l'utilisateur ait changé entre temps de feuille courante.
cellAddress.column est un nombre, et "E" n'est pas une adresse correcte.
Et le test est simplement de voir si la cellule utilisateur est remplie ou pas. Nouvelle version :
Code : Tout sélectionner
Dim r as Object
Dim c as Object
r = Selection.Rows(0)
c = r.GetCellRangeByName("E1")
if c.string = "" then
Déjà dit, je crois, cette feuille n'a pas de colonne pour les numéros. Et dans le cas contraire, il n'y aucune raison, avec ton patron , pour qu'ils soient dans la même colonne que dans la feuille Thèmes pour laquelle SetThemeNumbers a été conçue.nhan57 a écrit :SetThemeNumbers(ReportSheet)
Bon J-1
À bientôt
LibO 4.1.5.3 et AOO 4.0.1 sous Windows 7, MRI et SDK pour les macros.
Et la sauvegarde incrémentée, c'est sympa !
LibO 4.1.5.3 et AOO 4.0.1 sous Windows 7, MRI et SDK pour les macros.
Et la sauvegarde incrémentée, c'est sympa !
-
- Membre lOOyal
- Messages : 43
- Inscription : 05 sept. 2012 09:15
- Localisation : Metz
Re: [Calc] Saisie rubrique et sous rubrique report de nom
Bonjour Alhazred le magnifique
Merci de ta réponse, j'ai donc fait tout ce que tu m'as dit mais j'ai beau essayer d’exécuter la macro rien n'y fait!
J'ai bien synchronisé la liste de réunion de la feuille donnée avec celle de thèmes a aborder, et la feuille compte rendu tout ce qui se trouve au dessus de ma ligne bleu n'a pas besoin d'être synchronisé
mais la partie là (je pense) déconne chez moi et j'ai un message d'erreur m'annoncant sur la fonction sub move Row valeur de propriété incorrecte
voici le code qui pose problème
l'appel de la fonction MoveRow as t'elle les bon paramètres? je m'emmele les pinceaux
et voici au cas ou la version mise a jour, avec un allègement du code
Merci de ta réponse, j'ai donc fait tout ce que tu m'as dit mais j'ai beau essayer d’exécuter la macro rien n'y fait!
J'ai bien synchronisé la liste de réunion de la feuille donnée avec celle de thèmes a aborder, et la feuille compte rendu tout ce qui se trouve au dessus de ma ligne bleu n'a pas besoin d'être synchronisé
mais la partie là (je pense) déconne chez moi et j'ai un message d'erreur m'annoncant sur la fonction sub move Row valeur de propriété incorrecte
voici le code qui pose problème
Code : Tout sélectionner
Dim index2 As Long
index2 = GetNewIndex(dates.selectedItem) 'the n° of the theme is done
ThisComponent.currentSelection.supportsService("com.sun.star.sheet.SheetCell")
mainSheet.unprotect("*****")
MoveRow(mainSheet,Selection,index2)
SetThemeNumbers(mainSheet)
mainSheet.protect("*****")
et voici au cas ou la version mise a jour, avec un allègement du code
Vous ne pouvez pas consulter les pièces jointes insérées à ce message.
Bien à vous
Libre Office 3.6
Windows xp
Libre Office 3.6
Windows xp
-
- ManitOOu
- Messages : 3028
- Inscription : 30 avr. 2011 23:08
- Localisation : Casablanca (Maroc)
Re: [Calc] Saisie rubrique et sous rubrique report de nom
Ah je viens de constater que l'as de la sécurité a encore sévi dans la version 2.2.4 : le classeur n'affiche que la feuille principale... sauf que si on interdit l'exécution des macros...
Il me semble qu'il faut d'abord construire la banque avant d'y mettre des alarmes, sinon les ouvriers vont les déclencher...
Bon, j'avais remarqué en première lecture et puis oublié cette erreur : dan la déf. de MoveRow, index1 doit être un nombre
Mais la vie n'est pas si rose que ça Je te donne simplement les étapes :
Il me semble qu'il faut d'abord construire la banque avant d'y mettre des alarmes, sinon les ouvriers vont les déclencher...
Bon, j'avais remarqué en première lecture et puis oublié cette erreur : dan la déf. de MoveRow, index1 doit être un nombre
Mais la vie n'est pas si rose que ça Je te donne simplement les étapes :
- Trouver ce qui concerne la sélection ; si elle n'est pas conforme (plusieurs cellules ou pas une ligne de thème -- voir simplement si un utilisateur a été indiqué), on arrête avec message correspondant.
Elle doit fournir 3 indices de ligne dans Compte-rendu, dans Thèmes (le même-4) et dans Données(un peu plus compliqué. - Demander la nouvelle date (fait dans ta macro)
- A partir de la date, trouver les trois indices correspondants
- Déplacer les lignes dans Compte-rendu et Thèmes ; attention, il y a un problème dans MoveRow si la nouvelle date est avant l'ancienne
- Mettre à jour les nombres de Thèmes pour les deux dates (feuille Données)
- Rafraîchir les b####l de numéros dans la feuille Thèmes uniquement
À bientôt
LibO 4.1.5.3 et AOO 4.0.1 sous Windows 7, MRI et SDK pour les macros.
Et la sauvegarde incrémentée, c'est sympa !
LibO 4.1.5.3 et AOO 4.0.1 sous Windows 7, MRI et SDK pour les macros.
Et la sauvegarde incrémentée, c'est sympa !
-
- Membre lOOyal
- Messages : 43
- Inscription : 05 sept. 2012 09:15
- Localisation : Metz
Re: [Calc] Saisie rubrique et sous rubrique report de nom
Oups oui pardon c'est ma macro lancé des l'execution qui se trouve dans multi-macro je n'ai autorisé que mon "super patron" a avoir accès à tout car c'est le grand maitre! il suffit de mettre en commentaire deux trois lignesalhazred a écrit :Ah je viens de constater que l'as de la sécurité a encore sévi dans la version 2.2.4 : le classeur n'affiche que la feuille principale... sauf que si on interdit l'exécution des macros...
Il me semble qu'il faut d'abord construire la banque avant d'y mettre des alarmes, sinon les ouvriers vont les déclencher...
alhazred a écrit :Bon, j'avais remarqué en première lecture et puis oublié cette erreur : dan la déf. de MoveRow, index1 doit être un nombre
Mais la vie n'est pas si rose que ça Je te donne simplement les étapes :
Trouver ce qui concerne la sélection ; si elle n'est pas conforme (plusieurs cellules ou pas une ligne de thème -- voir simplement si un utilisateur a été indiqué), on arrête avec message correspondant.
Elle doit fournir 3 indices de ligne dans Compte-rendu, dans Thèmes (le même-4) et dans Données(un peu plus compliqué.
Demander la nouvelle date (fait dans ta macro)
A partir de la date, trouver les trois indices correspondants
Déplacer les lignes dans Compte-rendu et Thèmes ; attention, il y a un problème dans MoveRow si la nouvelle date est avant l'ancienne
Mettre à jour les nombres de Thèmes pour les deux dates (feuille Données)
Rafraîchir les b####l de numéros dans la feuille Thèmes uniquement
Fournir les indices de lignes dans compte-rendu okay ça seras par rapport a la cellule active,avec un get address, pour ce qui est de la feuille thèmes et données mmmhhhh je vois pas il faut que je me creuse dessus
demander la nouvelle date Okay!
à Partir de la date trouver les trois indices,donc faire une recherche avec un search string (dis moi si je me trompe)
deplacer les lignes okay donc j'en appelle a la superbe macro dont tu m'as gracieusement fait cadeau
mettre a jour okay j'appelle la deuxieme macro
rafraichir les numéro dans la feuille thème(je vais le garder pour la fin pour l'instant le principal est le report)
Je me permettrais de faire appel à toi si jamais cela ne te dérange pas et si je rencontre des problèmes
Bien à vous
Libre Office 3.6
Windows xp
Libre Office 3.6
Windows xp