[Résolu][Calc] Retrouver le nom 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 !
Whiteneck
Membre hOOnoraire
Membre hOOnoraire
Messages : 159
Inscription : 20 janv. 2013 11:19

[Résolu][Calc] Retrouver le nom d'une cellule

Message par Whiteneck »

Bonjour,
Et bonne année. :wink:

J'ai une procédure pour retrouver une cellule à partir de son contenu.
Ce n'est donc pas toujours la même cellule qui ressort.
Une fois la cellule identifiée, je voudrais récupéré le nom que je lui ai donné.
J'ai essayé ainsi :

Code : Tout sélectionner

Cellule.AbsoluteName
mais cela me renvoie : "$feuille.$D$80" et nom pas le nom que j'ai choisi.
SI quelqu'un peut m'aider, merci d'avance.

PS : (Je pourrais travailler avec les coordonnées de la cellule mais cela n'est pas simple à harmoniser avec le reste de ce que j'ai déjà fait).
Dernière modification par Whiteneck le 10 janv. 2019 16:28, modifié 1 fois.
LibreOffice Version : 6.3.6.2 (x64) / Windows 8.1
Avatar de l’utilisateur
Hubert Lambert
SuppOOrter
SuppOOrter
Messages : 1214
Inscription : 06 avr. 2016 07:26

Re: [Calc] Retrouver le nom d'une cellule

Message par Hubert Lambert »

Bonjour,

Si tu es certain que la valeur recherchée se trouve dans une cellule nommée, tu peux alors ne parcourir que celles-ci. Elles sont accessibles via l'objet conteneur "NamedRanges" :

Code : Tout sélectionner

    doc = thiscomponent
    plagenommees = doc.NamedRanges
    for each plagenommee in plagenommees
        plage = plagenommee.ReferredCells
        if plage.supportsService("com.sun.star.sheet.SheetCell") then
            if plage.String = contenu_recherche then 'ou plage.Value
                nom_cellule = plagenommee.Name
                msgbox plagenommee.Name
                exit sub
            end if
        end if
    next plagenommee
Cordialement.
AOOo 4.1.7 sur Win10
AOOo 4.1.x sur Linux Mint
LibreOffice 5.x/6.x sur Linux Mint
--
| « Nos défauts devraient nous donner une qualité : l'indulgence pour les défauts des autres » (Rivarol)
Whiteneck
Membre hOOnoraire
Membre hOOnoraire
Messages : 159
Inscription : 20 janv. 2013 11:19

Re: [Calc] Retrouver le nom d'une cellule

Message par Whiteneck »

Bonjour Hubert,
Merci pour ton aide.
Je suis un peu perdu. :oops:

Je joins le doc hyper simplifié de ce que je fais.
Ce qui m'importe, outre le fait de trouver le terme recherché, est d'avoir le nom de la cellule.
C'est important pour la suite.

Code : Tout sélectionner

Sub Main
	Dim oDoc, oFeuille, Cellule as Object
	Dim oZone, oZone2 as Variant
	Dim LigneVide, colon as long
	Dim deb, fin as String
   
   	oDoc = ThisComponent
   
   ' On définit une zone
   oFeuille = thiscomponent.Sheets.getByName("Animaux")    'Feuille source

   oZone = oFeuille.getCellRangeByPosition(1, 0, 1, 10) 'Zone de destination où sera cherchée 
	' On recherche
	Dim recherche as object, celluletrouvee as object
	Dim trouv as object, positiondelacelluletrouvee as variant, x as long
	Dim Cell as object

	recherche = oZone.createsearchdescriptor
	reference = "Chien"
	with recherche
	.searchstring = reference
	.searchwords = true
	.searchtype = 1  'rechercher dans les valeurs fixes ou résultant d'une formule
	end with
	trouv = oZone.findall(recherche)
	Cell = trouv(0)
		Msgbox ("Le chien est colonne " & Cell.CellAddress.column)
		Msgbox ("et ligne " & Cell.CellAddress.row+1)	
		Msgbox("Mais quel est ne nom de la cellule où il est ?")
	Cellule = oFeuille.getCellByPosition(Cell.CellAddress.column, Cell.CellAddress.row+1) '
	
End Sub
Vous ne pouvez pas consulter les pièces jointes insérées à ce message.
LibreOffice Version : 6.3.6.2 (x64) / Windows 8.1
Avatar de l’utilisateur
DLE
SuppOOrter
SuppOOrter
Messages : 1477
Inscription : 30 déc. 2007 18:56
Localisation : Lille

Re: [Calc] Retrouver le nom d'une cellule

Message par DLE »

Bonjour,

Le code fourni par d'Hubert est intégré dans ta macro.
A+
Vous ne pouvez pas consulter les pièces jointes insérées à ce message.
MacOS Sonoma 14.4.1 (iMac-Intel) : AOO 4.1.15 , LibreOffice 7.6.5.2, Adoptium-temurinJDK_1.8.0_402 -
Windows 10 64 bits :
AOO 4.1.15, Libreoffice 7.1.8.1 - FireFox, Thunderbird, ORB 1.2.1
Whiteneck
Membre hOOnoraire
Membre hOOnoraire
Messages : 159
Inscription : 20 janv. 2013 11:19

Re: [Calc] Retrouver le nom d'une cellule

Message par Whiteneck »

Super !
Merci à vous deux. :D
LibreOffice Version : 6.3.6.2 (x64) / Windows 8.1
Whiteneck
Membre hOOnoraire
Membre hOOnoraire
Messages : 159
Inscription : 20 janv. 2013 11:19

Re: [Résolu][Calc] Retrouver le nom d'une cellule

Message par Whiteneck »

Bonjour, :(

Quand je reporte la même chose dans mon doc d'origine j'ai un problème pour cette ligne

Code : Tout sélectionner

       if plage.supportsService("com.sun.star.sheet.SheetCell") then
"Erreur d'exécution BASIC.
Variable d'objet non définie"

Une idée de ce que je dois faire ?
LibreOffice Version : 6.3.6.2 (x64) / Windows 8.1
Avatar de l’utilisateur
DLE
SuppOOrter
SuppOOrter
Messages : 1477
Inscription : 30 déc. 2007 18:56
Localisation : Lille

Re: [Résolu][Calc] Retrouver le nom d'une cellule

Message par DLE »

Bonjour,

Cette ligne est-elle présente avant celle où il y a l'erreur :

Code : Tout sélectionner

plage = plagenommee.ReferredCells
MacOS Sonoma 14.4.1 (iMac-Intel) : AOO 4.1.15 , LibreOffice 7.6.5.2, Adoptium-temurinJDK_1.8.0_402 -
Windows 10 64 bits :
AOO 4.1.15, Libreoffice 7.1.8.1 - FireFox, Thunderbird, ORB 1.2.1
Whiteneck
Membre hOOnoraire
Membre hOOnoraire
Messages : 159
Inscription : 20 janv. 2013 11:19

Re: [Résolu][Calc] Retrouver le nom d'une cellule

Message par Whiteneck »

DLE a écrit :Cette ligne est-elle présente avant celle où il y a l'erreur :
Oui, j'ai tout copié (et j'ai essayé sans cette ligne)
LibreOffice Version : 6.3.6.2 (x64) / Windows 8.1
Avatar de l’utilisateur
Hubert Lambert
SuppOOrter
SuppOOrter
Messages : 1214
Inscription : 06 avr. 2016 07:26

Re: [Résolu][Calc] Retrouver le nom d'une cellule

Message par Hubert Lambert »

Whiteneck a écrit :Une fois la cellule identifiée, je voudrais récupéré le nom que je lui ai donné.
Qu'entends-tu exactement par là ? Quelle procédure utilises-tu pour lui donner un nom ? Ce nom est-il unique ou concerne-t-il une plage plus grande ?
Ce sera plus simple si tu nous fournis une fichier structuré comme ton fichier d'origine...
AOOo 4.1.7 sur Win10
AOOo 4.1.x sur Linux Mint
LibreOffice 5.x/6.x sur Linux Mint
--
| « Nos défauts devraient nous donner une qualité : l'indulgence pour les défauts des autres » (Rivarol)
Whiteneck
Membre hOOnoraire
Membre hOOnoraire
Messages : 159
Inscription : 20 janv. 2013 11:19

Re: [Résolu][Calc] Retrouver le nom d'une cellule

Message par Whiteneck »

Hubert Lambert a écrit :Ce sera plus simple si tu nous fournis une fichier structuré comme ton fichier d'origine...
Ok.
Le temps de dépersonnaliser le fichier sur lequel je travaille.
LibreOffice Version : 6.3.6.2 (x64) / Windows 8.1
Whiteneck
Membre hOOnoraire
Membre hOOnoraire
Messages : 159
Inscription : 20 janv. 2013 11:19

Re: [Résolu][Calc] Retrouver le nom d'une cellule

Message par Whiteneck »

Bonjour,

J'ai trouvé ! :D
Une des cellules nommées avait été supprimée, son nom n'avait plus de référence.
Encore merci.
LibreOffice Version : 6.3.6.2 (x64) / Windows 8.1
Whiteneck
Membre hOOnoraire
Membre hOOnoraire
Messages : 159
Inscription : 20 janv. 2013 11:19

Re: [Résolu][Calc] Retrouver le nom d'une cellule

Message par Whiteneck »

A l'usage, c'est mieux ainsi 'si quelqu'un a besoin):

Code : Tout sélectionner

    doc = thiscomponent
    plagenommees = doc.NamedRanges
    for each plagenommee in plagenommees
        plage = plagenommee.ReferredCells
        if plage.supportsService("com.sun.star.sheet.SheetCell") then
            if plage.AbsoluteName = contenu_recherche then 'ou plage.
                nom_cellule = plagenommee.Name
                msgbox plagenommee.Name
                exit sub
            end if
        end if
    next plagenommee
LibreOffice Version : 6.3.6.2 (x64) / Windows 8.1