[Résolu][Calc] spécifier une ligne en fonction de la position d'une cellule
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 !
-
- 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
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.
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
-
- 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
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.
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.
-
- 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
Merci pour votre attention et vos précisons.
Voici le code.
Voici le code.
Vous ne pouvez pas consulter les pièces jointes insérées à ce message.
Open Office 14.1.15 sous Windows 10
-
- 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
Salut,
Pourquoi mettre ça dans un PDF qu'il faudra télécharger ?
La macro doit être publiée ici même de cette manière :
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.
Pourquoi mettre ça dans un PDF qu'il faudra télécharger ?
La macro doit être publiée ici même de cette manière :
Code : Tout sélectionner
Sub UneMacro
Code de la macro
...
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.
Vous ne pouvez pas consulter les pièces jointes insérées à ce message.
-
- 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
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
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
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
-
- 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
Le mode d'emploi donné dans ton 1er message ne fonctionne pas :
Si je me place sur la cellule C22 de la feuille 0D, j'ai un avertissement pour l'écrasement des données.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.
-
- 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
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
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
-
- 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
Le plus simple est que tu nous dises ce que tu cherches à faire exactement ?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
Vous ne pouvez pas consulter les pièces jointes insérées à ce message.
-
- 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
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
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
-
- 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
L'enregistreur de macro a ses limites.
Pour contourner la référence à la ligne courante, il faut ajouter une fonction au début :
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
-
- 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
Effectivement l'enregistreur Macro a ses limites.
Merci pour vos essais. Cordialement
Merci pour vos essais. Cordialement
Open Office 14.1.15 sous Windows 10
-
- 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
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 et en tapant [Résolu] (respectez la graphie donnée) comme illustré ci-dessous :
Pour tout savoir sur le fonctionnement de ce forum À lire avant tout !