Bonjour à tous,
Pour rendre mes formules plus lisible je souhaite utiliser les noms de plage ou les étiquettes de ligne et de colonne;
C'est très simple pour les fonctions s'appliquant sur les plages complètes, par exemple "=somme('Salaires')" ou encore "=somme('Pierre')" qui donnent respectivement le total des valeur de la colonne étiquetée 'Salaire' ou de la ligne étiquetée 'Pierre', ligne qui pourrait contenir son salaire, son loyer, ses prélèvements auto ect...
Mais comment pointer vers une céllule d'une plage sans devoir nommer une à une chaque céllule? exemple (qui ne fonctionne pas) "='Salaire'.'Pierre'+'Salaire'.'Jean' " .J'espère que ma question est claire et que les exemples sont parlants...
Merci de votre aide.
EDTI: reformulation partielle de la question
définir cell par croisement étiquette ligne & colonne
Modérateur : Vilains modOOs
Règles du forum
Cette section est uniquement dédiée au tableur Calc. Vous ne devez pas poster ici de questions sur les macros mais utiliser la section éponyme.
Cette section est uniquement dédiée au tableur Calc. Vous ne devez pas poster ici de questions sur les macros mais utiliser la section éponyme.
-
- Fraîchement OOthentifié
- Messages : 4
- Inscription : 07 oct. 2006 21:02
- Localisation : San Miguel de Tucuman-Argentine
définir cell par croisement étiquette ligne & colonne
OOO_2.0.3 sous Mac OS X 10.4.8
-
- Grand Maître de l'OOffice
- Messages : 16960
- Inscription : 03 mars 2006 16:02
- Localisation : Venise verte
bonjour,
Je pense que je n'ai pas dû bien comprendre ...
car ce que tu décris, je le ferai par Insertion/Nom et après je définirai la cellule ou la plage de cellules.
Mais tu attends sans doute autre chose comme réponse.
Je pense que je n'ai pas dû bien comprendre ...
car ce que tu décris, je le ferai par Insertion/Nom et après je définirai la cellule ou la plage de cellules.
Mais tu attends sans doute autre chose comme réponse.
LibreOffice : Version : 24.2 (x64)(12 avril 2024)
Adoptium JRE ou Oracle JRE (x64), Windows 10, Thunderbird, Firefox
Adoptium JRE ou Oracle JRE (x64), Windows 10, Thunderbird, Firefox
-
- Grand Maître de l'OOffice
- Messages : 11276
- Inscription : 02 mai 2006 08:42
Si je comprends bien, par exemple :
la colonne E est nommée "salaire"
la ligne 8 est nommée "jeanmimi"
on voudrait pouvoir faire "salaire.jeanmimi" au lieu de E8 (c'est vrai que c'est plus parlant)
On pourrait faire :
=INDIRECT(ADRESSE(LIGNE(jeanmimi);COLONNE(Salaire)))
qui donne le bon résultat, mais je doute que cela constitue une réponse acceptable...
la colonne E est nommée "salaire"
la ligne 8 est nommée "jeanmimi"
on voudrait pouvoir faire "salaire.jeanmimi" au lieu de E8 (c'est vrai que c'est plus parlant)
On pourrait faire :
=INDIRECT(ADRESSE(LIGNE(jeanmimi);COLONNE(Salaire)))
qui donne le bon résultat, mais je doute que cela constitue une réponse acceptable...
-
- Fraîchement OOthentifié
- Messages : 4
- Inscription : 07 oct. 2006 21:02
- Localisation : San Miguel de Tucuman-Argentine
SAlut, Merci pour vos répones
Pierre-Yves a saisi le sens de ma question; je ne souhaite pas renommer une à une toutes les cases de mon tableau. Ce serait donc bien quelque chose du genre =INDIRECT(ADRESSE(LIGNE(jeanmimi);COLONNE(Salaire))) que je cherche; n'y aurait-il pas une syntaxe plus simple? ou moyen de créer une fonction perso qui rende la syntaxe plus simple? genre cel(nom_de_ligne;nom_de_colonne) qui marche aussi d'une fauille à l'autre au sein d'un même classeur...
Pierre-Yves a saisi le sens de ma question; je ne souhaite pas renommer une à une toutes les cases de mon tableau. Ce serait donc bien quelque chose du genre =INDIRECT(ADRESSE(LIGNE(jeanmimi);COLONNE(Salaire))) que je cherche; n'y aurait-il pas une syntaxe plus simple? ou moyen de créer une fonction perso qui rende la syntaxe plus simple? genre cel(nom_de_ligne;nom_de_colonne) qui marche aussi d'une fauille à l'autre au sein d'un même classeur...
OOO_2.0.3 sous Mac OS X 10.4.8
-
- Grand Maître de l'OOffice
- Messages : 11276
- Inscription : 02 mai 2006 08:42
Comme je ne trouve pas plus simple avec les fonctions "de base" (mais cela existe peut-être), je propose ci-dessous un exemple de fonction créée par macro. Cette fonction ne peut être copiée dans un module de la bibliothèque Standard d'OOo car elle provoquerait un message d'erreur à l'ouverture du classeur. Il faut donc la copier dans un module du classeur. Elle sera disponible dans toutes les feuilles.
On l'utilise ensuite dans le classeur de la manière suivante :
=PYSCROISE("Martin";"Salaire";A1:G8 )
Nota :
- passer les noms en arguments sous la forme lig;col (autrement dit Martin est en ligne, Salaire en colonne)
- de plus on les passe en texte (entourés de guillemets)
- A1:G8 est la plage complète. Ceci permet de mettre à jour le résultat automatiquement si la plage de données est modifiée. On peut mettre aussi un nom, ce qui est plus pratique. Par exemple :
=PYSCROISE("Martin";"Salaire";MaPlage)
- Dans ce cas, c'est la plage que l'on passe, donc on ne met pas les guillemets...
- si le nom de la fonction ne vous convient pas, il suffit de modifier toutes ses occurrences dans le code (8 si je ne m'abuse)
On l'utilise ensuite dans le classeur de la manière suivante :
=PYSCROISE("Martin";"Salaire";A1:G8 )
Nota :
- passer les noms en arguments sous la forme lig;col (autrement dit Martin est en ligne, Salaire en colonne)
- de plus on les passe en texte (entourés de guillemets)
- A1:G8 est la plage complète. Ceci permet de mettre à jour le résultat automatiquement si la plage de données est modifiée. On peut mettre aussi un nom, ce qui est plus pratique. Par exemple :
=PYSCROISE("Martin";"Salaire";MaPlage)
- Dans ce cas, c'est la plage que l'on passe, donc on ne met pas les guillemets...
- si le nom de la fonction ne vous convient pas, il suffit de modifier toutes ses occurrences dans le code (8 si je ne m'abuse)
Code : Tout sélectionner
function PysCroise(PysNom1, PysNom2, PysPlage)
dim PysCell as object, PysLig as integer, PysCol as integer, PysFeuille as integer
if thiscomponent.NamedRanges.hasByName(PysNom1) and thiscomponent.NamedRanges.hasByName(PysNom2) then
if thiscomponent.NamedRanges.getByName(PysNom1).ReferencePosition.sheet =_
thiscomponent.NamedRanges.getByName(PysNom2).ReferencePosition.sheet then
with thiscomponent.NamedRanges.getByName(PysNom1).ReferencePosition
PysFeuille = .sheet
PysLig = .row
end with
PysCol = thiscomponent.NamedRanges.getByName(PysNom2).ReferencePosition.column
PysCell = thiscomponent.sheets(PysFeuille).getCellByPosition(PysCol, PysLig)
select case PysCell.Type
case com.sun.star.table.CellContentType.EMPTY
PysCroise = ""
case com.sun.star.table.CellContentType.TEXT
PysCroise = PysCell.string
case com.sun.star.table.CellContentType.VALUE
PysCroise = PysCell.value
case com.sun.star.table.CellContentType.FORMULA
PysCroise = PysCell.value
case else
PysCroise = "#Type?"
end select
else
PysCroise = "#Feuilles<>"
end if
else
PysCroise = "#Noms N/A"
end if
end function
Dernière modification par Pierre-Yves Samyn le 10 oct. 2006 18:54, modifié 1 fois.
-
- Fraîchement OOthentifié
- Messages : 4
- Inscription : 07 oct. 2006 21:02
- Localisation : San Miguel de Tucuman-Argentine