[Calc] Saisie rubrique et sous rubrique report de nom

Discussions et questions sur tout ce qui concerne la programmation tous langages et tous modules confondus.

Modérateur : Vilains modOOs

Règles du forum
:alerte: 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 !
Avatar de l’utilisateur
nhan57
Membre lOOyal
Membre lOOyal
Messages : 43
Inscription : 05 sept. 2012 09:15
Localisation : Metz

Re: [Calc] Saisie rubrique et sous rubrique report de nom

Message par nhan57 »

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
Bien à vous
Libre Office 3.6
Windows xp
Avatar de l’utilisateur
alhazred
ManitOOu
ManitOOu
Messages : 3028
Inscription : 30 avr. 2011 23:08
Localisation : Casablanca (Maroc)

Re: [Calc] Saisie rubrique et sous rubrique report de nom

Message par alhazred »

Je me disais aussi... s'il te donnait 50€ à chaque nouvelle demande, tu deviendrais vite riche :lol:

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
nhan57 a écrit :ça fait ralentir a fond le programme
ç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.
À 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 !
Avatar de l’utilisateur
nhan57
Membre lOOyal
Membre lOOyal
Messages : 43
Inscription : 05 sept. 2012 09:15
Localisation : Metz

Re: [Calc] Saisie rubrique et sous rubrique report de nom

Message par nhan57 »

alhazred a écrit :Je me disais aussi... s'il te donnait 50€ à chaque nouvelle demande, tu deviendrais vite riche
Rah si seulement arrête alhrazred tu commence à me faire rêver :bravo:

alhazred 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
j'ai essayé de cette façon .GetCellByPosition(3,index1).validation=d5.validation dans la macro addthemes mais il ne l'accepte pas mmmhhhhhh
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.
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!

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? :aie:

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! :oops:
Bien à vous
Libre Office 3.6
Windows xp
Avatar de l’utilisateur
alhazred
ManitOOu
ManitOOu
Messages : 3028
Inscription : 30 avr. 2011 23:08
Localisation : Casablanca (Maroc)

Re: [Calc] Saisie rubrique et sous rubrique report de nom

Message par alhazred »

Bonsoir,
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
Moi non plus, je l'accepte pas :lol: d5 est une cellule ou une adresse de cellule ?...
Avec

Code : Tout sélectionner

.GetCellByPosition(3,index1).validation=.GetCellRangeByName("D5").validation
ça ira nettement mieux.
nhan57 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
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 gratuit :aie:
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
Et maintenant la renumérotation des thèmes (pour faire plaisir à Missié ton patron)

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
Et bonne vie d'étudiant, c'est la meilleure (loin derrière moi, snifff)
À 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 !
Avatar de l’utilisateur
nhan57
Membre lOOyal
Membre lOOyal
Messages : 43
Inscription : 05 sept. 2012 09:15
Localisation : Metz

Re: [Calc] Saisie rubrique et sous rubrique report de nom

Message par nhan57 »

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.
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 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
version 2.2.4.ods
alhazred a écrit :Et bonne vie d'étudiant, c'est la meilleure (loin derrière moi, snifff)
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!
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
Avatar de l’utilisateur
alhazred
ManitOOu
ManitOOu
Messages : 3028
Inscription : 30 avr. 2011 23:08
Localisation : Casablanca (Maroc)

Re: [Calc] Saisie rubrique et sous rubrique report de nom

Message par alhazred »

Bonjour,

Oui, oui, on m'appelle alhazred le magnifique ou saint alhazred, alors pas la peine d'en rajouter :lol:

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)
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
La dernière ligne fait de c une cellule, donc Dim c As Object.
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
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.
nhan57 a écrit :SetThemeNumbers(ReportSheet)
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 :lol: , pour qu'ils soient dans la même colonne que dans la feuille Thèmes pour laquelle SetThemeNumbers a été conçue.

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 !
Avatar de l’utilisateur
nhan57
Membre lOOyal
Membre lOOyal
Messages : 43
Inscription : 05 sept. 2012 09:15
Localisation : Metz

Re: [Calc] Saisie rubrique et sous rubrique report de nom

Message par nhan57 »

Bonjour Alhazred le magnifique :lol:

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("*****")
l'appel de la fonction MoveRow as t'elle les bon paramètres? je m'emmele les pinceaux :marto:

et voici au cas ou la version mise a jour, avec un allègement du code
version 2.2.4(english version).ods
Vous ne pouvez pas consulter les pièces jointes insérées à ce message.
Bien à vous
Libre Office 3.6
Windows xp
Avatar de l’utilisateur
alhazred
ManitOOu
ManitOOu
Messages : 3028
Inscription : 30 avr. 2011 23:08
Localisation : Casablanca (Maroc)

Re: [Calc] Saisie rubrique et sous rubrique report de nom

Message par alhazred »

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... :lol:
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 :cry: 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
Je crois que j'ai rien oublié, bon courage. Et tu as intérêt à faire de chaque partie une macro indépendante (au moins pour les tester).
À 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 !
Avatar de l’utilisateur
nhan57
Membre lOOyal
Membre lOOyal
Messages : 43
Inscription : 05 sept. 2012 09:15
Localisation : Metz

Re: [Calc] Saisie rubrique et sous rubrique report de nom

Message par nhan57 »

alhazred 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...
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 lignes
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 :oops:
Bien à vous
Libre Office 3.6
Windows xp