[Résolu][Calc] spécifier une ligne en fonction de la position d'une cellule

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 !
Robert3000
Fraîchement OOthentifié
Messages : 6
Inscription : 22 déc. 2023 14:28
Localisation : Belgique

[Résolu][Calc] spécifier une ligne en fonction de la position d'une cellule

Message par Robert3000 »

Bonjour,

chaque mois j'édite un décompte de chauffage (chaudière commune)
à tous les occupants d'un immeuble.
Chaque appartement a sa feuille, et il y a des feuilles qui contiennent des données qui sont envoyées aux autres feuilles.

J'ai enregistré une petite macro qui, pour chaque appartement, stocke les résultats dans l'évolution des consommations mois par mois de chaque appartement, elle se nomme "ChgEvolution" (elle apparaît dans la barre d'outil).

Je me positionne pour chaque appartement sur la première cellule du mois précédent (Col J) et je lance la macro.

Cette macro transfère à la ligne suivante (le mois qui va être traité) les renvois (=), fixe les chiffres du mois précédent par copié/collé et enfin formate les cellules en monétaire.
La macro est relancée manuellement pour chaque feuille-appartement.

Je suis actuellement obligé de réenregistrer la macro chaque mois puisque la ligne (Row) de positionnement change chaque mois.

Existe-t-il un moyen, dans la macro, de spécifier la ligne qui change chaque mois en fonction du positionnement de cellule ?

Je vous remercie, en néophyte, de l'aide que vous pourrez m'apporter, tout en vous souhaitant une merveilleuse année 2024.
Vous ne pouvez pas consulter les pièces jointes insérées à ce message.
Dernière modification par Robert3000 le 09 janv. 2024 08:01, modifié 1 fois.
Open Office 14.1.15 sous Windows 10
Avatar de l’utilisateur
Bidouille
RespOOnsable forum
RespOOnsable forum
Messages : 12457
Inscription : 08 nov. 2005 16:23
Localisation : Caen, France

Re: [Calc] Problème de ligne dans une Macro répétitive mensuellement

Message par Bidouille »

Bonjour,

Titre modifié : Problème de ligne dans une Macro répétitive mensuellement
"problème" et "macro" sont implicites dans un titre et donc parfaitement inutiles

Afin de ne pas avoir à télécharger un document, veuillez publier à la suite, le code de la macro.

Merci de votre collaboration à nous aider à garder la qualité de ce forum optimum.
Robert3000
Fraîchement OOthentifié
Messages : 6
Inscription : 22 déc. 2023 14:28
Localisation : Belgique

Re: [Calc] spécifier une ligne en fonction de la position d'une cellule

Message par Robert3000 »

Merci pour votre attention et vos précisons.

Voici le code.
Code Macro GgtEvolution.pdf
Vous ne pouvez pas consulter les pièces jointes insérées à ce message.
Open Office 14.1.15 sous Windows 10
Avatar de l’utilisateur
Dude
IdOOle de la suite
IdOOle de la suite
Messages : 25602
Inscription : 03 mars 2006 07:45
Localisation : 127.0.0.1

Re: [Calc] spécifier une ligne en fonction de la position d'une cellule

Message par Dude »

Salut,

Pourquoi mettre ça dans un PDF qu'il faudra télécharger ? :roll:
La macro doit être publiée ici même de cette manière :

Code : Tout sélectionner

Sub UneMacro
   Code de la macro
   ...
Le document que tu fournis ne contient pas de macro (cf. image ci-dessous).
Qui plus est, il faut te mettre à notre place car ton classeur contient 20 feuilles que tu es seul à maîtriser.
Pour nous faire gagner du temps, simplifie le en ne mettant que la feuille concernée par le problème.
capture.jpg
Vous ne pouvez pas consulter les pièces jointes insérées à ce message.
Robert3000
Fraîchement OOthentifié
Messages : 6
Inscription : 22 déc. 2023 14:28
Localisation : Belgique

Re: [Calc] spécifier une ligne en fonction de la position d'une cellule

Message par Robert3000 »

Rebonjour,

J'ai un peu battu le beurre...
Mes macro était logées dans Mes Macros/Standard/Module1.

J'ai refais une macro à l'identique, elle est logée dans
12-2023 - Proprio - Décompte Chauffage/Standard/Module1
Elle s'appelle Main
Voici le code

Code : Tout sélectionner

REM  *****  BASIC  *****
sub Main
rem ----------------------------------------------------------------------
rem define variables
dim document   as object
dim dispatcher as object
rem ----------------------------------------------------------------------
rem get access to the document
document   = ThisComponent.CurrentController.Frame
dispatcher = createUnoService("com.sun.star.frame.DispatchHelper")

rem ----------------------------------------------------------------------
dim args1(0) as new com.sun.star.beans.PropertyValue
args1(0).Name = "ToPoint"
args1(0).Value = "$C$21:$H$21"

dispatcher.executeDispatch(document, ".uno:GoToCell", "", 0, args1())

rem ----------------------------------------------------------------------
dim args2(0) as new com.sun.star.beans.PropertyValue
args2(0).Name = "EndCell"
args2(0).Value = "$H$22"

dispatcher.executeDispatch(document, ".uno:AutoFill", "", 0, args2())

rem ----------------------------------------------------------------------
dim args3(0) as new com.sun.star.beans.PropertyValue
args3(0).Name = "ToPoint"
args3(0).Value = "$C$21:$H$22"

dispatcher.executeDispatch(document, ".uno:GoToCell", "", 0, args3())

rem ----------------------------------------------------------------------
dim args4(0) as new com.sun.star.beans.PropertyValue
args4(0).Name = "ToPoint"
args4(0).Value = "$C$21"

dispatcher.executeDispatch(document, ".uno:GoToCell", "", 0, args4())

rem ----------------------------------------------------------------------
dim args5(0) as new com.sun.star.beans.PropertyValue
args5(0).Name = "ToPoint"
args5(0).Value = "$C$21:$H$21"

dispatcher.executeDispatch(document, ".uno:GoToCell", "", 0, args5())

rem ----------------------------------------------------------------------
dispatcher.executeDispatch(document, ".uno:Copy", "", 0, Array())

rem ----------------------------------------------------------------------
dim args7(0) as new com.sun.star.beans.PropertyValue
args7(0).Name = "ToPoint"
args7(0).Value = "$C$21"

dispatcher.executeDispatch(document, ".uno:GoToCell", "", 0, args7())

rem ----------------------------------------------------------------------
dim args8(5) as new com.sun.star.beans.PropertyValue
args8(0).Name = "Flags"
args8(0).Value = "V"
args8(1).Name = "FormulaCommand"
args8(1).Value = 0
args8(2).Name = "SkipEmptyCells"
args8(2).Value = false
args8(3).Name = "Transpose"
args8(3).Value = false
args8(4).Name = "AsLink"
args8(4).Value = false
args8(5).Name = "MoveMode"
args8(5).Value = 4

dispatcher.executeDispatch(document, ".uno:InsertContents", "", 0, args8())

rem ----------------------------------------------------------------------
dim args9(0) as new com.sun.star.beans.PropertyValue
args9(0).Name = "NumberFormatValue"
args9(0).Value = 107

dispatcher.executeDispatch(document, ".uno:NumberFormatValue", "", 0, args9())


end sub
 


Concernant le fichier, je l'ai réduit au maximum,
mais j'ai dû garder 2 feuilles, sinon cela n'avait aucun sens.

Merci pour toutes vos indications
Vous ne pouvez pas consulter les pièces jointes insérées à ce message.
Open Office 14.1.15 sous Windows 10
Avatar de l’utilisateur
Dude
IdOOle de la suite
IdOOle de la suite
Messages : 25602
Inscription : 03 mars 2006 07:45
Localisation : 127.0.0.1

Re: [Calc] spécifier une ligne en fonction de la position d'une cellule

Message par Dude »

Le mode d'emploi donné dans ton 1er message ne fonctionne pas :
Robert3000 a écrit : 04 janv. 2024 09:05 Je me positionne pour chaque appartement sur la première cellule du mois précédent (Col J) et je lance la macro.
Si je me place sur la cellule C22 de la feuille 0D, j'ai un avertissement pour l'écrasement des données.
Robert3000
Fraîchement OOthentifié
Messages : 6
Inscription : 22 déc. 2023 14:28
Localisation : Belgique

Re: [Calc] spécifier une ligne en fonction de la position d'une cellule

Message par Robert3000 »

Ah oui!
Mes excuses

Je ne pensais plus à ce premier message.

Il faut se positionner dans la feuille 0D en C21 et lancer la macro
Le résultat est parfait

Puis, pour constater l'erreur, immédiatement se positionner en C22 et relancer la macro

Cordialement
Open Office 14.1.15 sous Windows 10
Avatar de l’utilisateur
Dude
IdOOle de la suite
IdOOle de la suite
Messages : 25602
Inscription : 03 mars 2006 07:45
Localisation : 127.0.0.1

Re: [Calc] spécifier une ligne en fonction de la position d'une cellule

Message par Dude »

Robert3000 a écrit : 04 janv. 2024 13:26 Il faut se positionner dans la feuille 0D en C21 et lancer la macro
Le résultat est parfait
erreur.jpg
Le plus simple est que tu nous dises ce que tu cherches à faire exactement ?
Vous ne pouvez pas consulter les pièces jointes insérées à ce message.
Robert3000
Fraîchement OOthentifié
Messages : 6
Inscription : 22 déc. 2023 14:28
Localisation : Belgique

Re: [Calc] spécifier une ligne en fonction de la position d'une cellule

Message par Robert3000 »

Il faut répondre oui, chez moi l'ai coché "Ne plus plus afficher cet avertissement"

Ce que je veux faire c'est 1. Copier tous les renvois de la ligne 21 : p ex "= Répartition.$D$6" , "= Répartition.$E$6" etc...
à la ligne suivante la 22.
2. Fixer toutes les cellules "nombres" de la ligne 21 par copié/collé.
3. Changer le format de toutes les cellules de la ligne 21 en monétaire.

Cordialement
Open Office 14.1.15 sous Windows 10
Avatar de l’utilisateur
Dude
IdOOle de la suite
IdOOle de la suite
Messages : 25602
Inscription : 03 mars 2006 07:45
Localisation : 127.0.0.1

Re: [Calc] spécifier une ligne en fonction de la position d'une cellule

Message par Dude »

L'enregistreur de macro a ses limites.
Pour contourner la référence à la ligne courante, il faut ajouter une fonction au début :

Code : Tout sélectionner

REM  *****  BASIC  *****
sub Main
nLigne = LigneEncours

rem ----------------------------------------------------------------------
rem define variables
dim document   as object
dim dispatcher as object
rem ----------------------------------------------------------------------
rem get access to the document
document   = ThisComponent.CurrentController.Frame
dispatcher = createUnoService("com.sun.star.frame.DispatchHelper")

rem ----------------------------------------------------------------------
dim args1(0) as new com.sun.star.beans.PropertyValue
args1(0).Name = "ToPoint"
args1(0).Value = "$C$" & nLigne & ":$H$" & nLigne

dispatcher.executeDispatch(document, ".uno:GoToCell", "", 0, args1())

rem ----------------------------------------------------------------------
dim args2(0) as new com.sun.star.beans.PropertyValue
args2(0).Name = "EndCell"
args2(0).Value = "$H$" & nLigne + 1

dispatcher.executeDispatch(document, ".uno:AutoFill", "", 0, args2())

rem ----------------------------------------------------------------------
dim args3(0) as new com.sun.star.beans.PropertyValue
args3(0).Name = "ToPoint"
args3(0).Value = "$C$" & nLigne & ":$H$" & nLigne + 1

dispatcher.executeDispatch(document, ".uno:GoToCell", "", 0, args3())

rem ----------------------------------------------------------------------
dim args4(0) as new com.sun.star.beans.PropertyValue
args4(0).Name = "ToPoint"
args4(0).Value = "$C$" & nLigne

dispatcher.executeDispatch(document, ".uno:GoToCell", "", 0, args4())

rem ----------------------------------------------------------------------
dim args5(0) as new com.sun.star.beans.PropertyValue
args5(0).Name = "ToPoint"
args5(0).Value = "$C$" & nLigne & ":$H$" & nLigne

dispatcher.executeDispatch(document, ".uno:GoToCell", "", 0, args5())

rem ----------------------------------------------------------------------
dispatcher.executeDispatch(document, ".uno:Copy", "", 0, Array())

rem ----------------------------------------------------------------------
dim args7(0) as new com.sun.star.beans.PropertyValue
args7(0).Name = "ToPoint"
args7(0).Value = "$C$" & nLigne

dispatcher.executeDispatch(document, ".uno:GoToCell", "", 0, args7())

rem ----------------------------------------------------------------------
dim args8(5) as new com.sun.star.beans.PropertyValue
args8(0).Name = "Flags"
args8(0).Value = "V"
args8(1).Name = "FormulaCommand"
args8(1).Value = 0
args8(2).Name = "SkipEmptyCells"
args8(2).Value = false
args8(3).Name = "Transpose"
args8(3).Value = false
args8(4).Name = "AsLink"
args8(4).Value = false
args8(5).Name = "MoveMode"
args8(5).Value = 4

dispatcher.executeDispatch(document, ".uno:InsertContents", "", 0, args8())

rem ----------------------------------------------------------------------
dim args9(0) as new com.sun.star.beans.PropertyValue
args9(0).Name = "NumberFormatValue"
args9(0).Value = 107

dispatcher.executeDispatch(document, ".uno:NumberFormatValue", "", 0, args9())


end sub

Function LigneEnCours
	oCell = ThisComponent.getCurrentSelection()
	sAdr = oCell.AbsoluteName
	aAdr = Split(sAdr,"$")
	LigneEncours = Val(aAdr(3))
End function
Robert3000
Fraîchement OOthentifié
Messages : 6
Inscription : 22 déc. 2023 14:28
Localisation : Belgique

Re: [Clôturé] [Calc] spécifier une ligne en fonction de la position d'une cellule

Message par Robert3000 »

Effectivement l'enregistreur Macro a ses limites.
Merci pour vos essais. Cordialement
Open Office 14.1.15 sous Windows 10
Avatar de l’utilisateur
Oukcha
RespOOnsable modération
RespOOnsable modération
Messages : 4117
Inscription : 06 oct. 2008 08:03

Re: [Calc] spécifier une ligne en fonction de la position d'une cellule

Message par Oukcha »

Sujet résolu ?
  • Placez-vous sur le premier message de votre fil de discussion
  • En haut à droite de ce message, cliquez sur le bouton du petit crayon pour éditer.
  • Modifiez le titre du message en cochant l'icône Image et en tapant [Résolu] (respectez la graphie donnée) comme illustré ci-dessous :

    Image
Cordialement
                                        
Pour tout savoir sur le fonctionnement de ce forum :arrow: À lire avant tout ! Image