[Calc] Parcourir lignes et colonnes en partant de 1

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 !

[Calc] Parcourir lignes et colonnes en partant de 1

Messagepar martinbrait » 14 Mai 2021 10:35

Bonjour,

Dans un code, je parcours des lignes et colonnes d'une feuille de classeur.

Aujourd'hui, je fais référence aux lignes et aux colonnes d'une feuille calc,
par un compteur de ligne qui indique 0 pour la ligne 1
et un compteur de colonnes qui indique 0 pour la colonne 1

Pourriez-vous m'indiquer la solution la plus efficace possible,
pour faire en sorte que mes numéros de compteur,
soient identiques aux numéros de lignes et de colonnes,
affichés en bordure de chaque feuille ?

Je m'adapte en utilisant la fonction suivante :
Code : Tout sélectionner   AgrandirRéduire
Public Function EquivCellNum(Num)As Integer
EquivCellNum = Num - 1
End Function


Avez-vous une solution plus logique, s'il-vous-plaît,
du type faire partir la base de mon tableau à 1 au lieu de 0.
Merci pour votre aide.
Dernière édition par martinbrait le 14 Mai 2021 13:05, édité 2 fois.
LibreOffice version 5.4.7.2.M6 (x64)
Windows 10
+
LibreOffice version 5.4.7.2.M6 (x64)
Windows 7

#HSQL Database Engine 1.8.0
version=1.8.0

Locale : fr-FR (fr_FR)

Obligation de version


Bonjour, merci et à bientôt !
Avatar de l’utilisateur
martinbrait
InconditiOOnnel
InconditiOOnnel
 
Message(s) : 753
Inscrit le : 09 Avr 2013 08:15
Localisation : T'as pas dit bonjour, merci et à bientot !

Re: [CALC] Parcourir lignes et colonnes en partant de 1

Messagepar micmac » 14 Mai 2021 10:38

Bonjour,
Dans votre signature il y a écrit: LibreOffice version 5.1.6.2
Windows 10
+
LibreOffice version 4.3.6.2.0
Windows 7
Ces versions de LibO sont obsolètes.
Si c'est une obligation, mentionnez-le dans votre signature en ajoutant Obligation de version.

Afin de profiter des dernières améliorations, il est fortement recommandé d'être à jour de la dernière version stable
Accès direct à votre signature pour la corriger.
Avatar de l’utilisateur
micmac
RespOOnsable forum
RespOOnsable forum
 
Message(s) : 7556
Inscrit le : 28 Août 2010 09:45

Re: [Calc] Parcourir lignes et colonnes en partant de 1

Messagepar jeanmi2403 » 14 Mai 2021 14:18

Bonjour,
martinbrait a écrit:Avez-vous une solution plus logique, s'il-vous-plaît,

Ta solution est parfaitement logique, il me semble même que c'est la meilleure
du type faire partir la base de mon tableau à 1 au lieu de 0.

Pour les tableaux,
Code : Tout sélectionner   AgrandirRéduire
option base 1

permet de numéroter à partir de 1.
Pour les feuilles de calcul, pas de possibilité de changer, à ma connaissance.
Cordialement,
Jean-Michel
LibO 7.0.6 et AoO 4.1.10 sur Windows 10 x64 & Ubuntu 20.04
LibO 7.1.0.3 sur OpenSuse & Linux MX
Avatar de l’utilisateur
jeanmi2403
InconditiOOnnel
InconditiOOnnel
 
Message(s) : 904
Inscrit le : 18 Jan 2008 10:02
Localisation : Val de Marne

Re: [Calc] Parcourir lignes et colonnes en partant de 1

Messagepar martinbrait » 14 Mai 2021 16:43

Bonjour jeanmi2403,
Pas de solution intuitive alors :?

Voici un extrait de code, pour illustrer une approche bancale, d'écriture du contenu d'un tableau, vers une plage de feuille de classeur :
Code : Tout sélectionner   AgrandirRéduire

'[Calc]Ecrire un tableau à deux dimensions
Sub TestEcrireDansFeuille()
TestPysPlageEcrireDansFeuille("test",1,2,1,10)
End Sub

Sub TestPysPlageEcrireDansFeuille(sNomFeuille As String,iColMin As Integer,iColMax As Integer,iRowMin as integer,iRowMax as integer)

Dim oDoc, oSheet
Dim I as Long, J as Long
oDoc = ThisComponent
'oSheet=oDoc.Sheets(0)
oSheet = oDoc.getSheets().getByName(sNomFeuille)

'on adapte les numéros de lignes
iColMin = iColMin - 1
iColMax = iColMax - 1
iRowMin = iRowMin - 1
iRowMax = iRowMax - 1

For I=iRowMin to iRowMax
   For J = iColMin to iColMax
      oSheet.getCellByPosition(J, I).formulaLocal = "Salut" & I & J
   Next J
Next I

End Sub



Code : Tout sélectionner   AgrandirRéduire
'La méthode consiste à utiliser un "tableau de tableau" créé avec GetDataArray,
'puis à en calculer normalement le contenu, avant d'utiliser SetDataArray pour le copier dans Calc.

Sub TestWindmarcEcrireDansFeuille()
       'based on http://www.oooforum.org/forum/viewtopic.phtml?t=6825
      Dim oDoc, oSheet, oRange
      Dim I as Long, J as Long
      Dim A(2) as variant, B(2) as String 'Variant is mandatory
      oDoc = ThisComponent
     ' oSheet=oDoc.Sheets(0)
      oSheet = oDoc.getSheets().getByName("test")
      oRange = oSheet.getCellRangebyName("A1:C3")
      'oRange = oSheet.getCellRangeByName("NamedRange")
      A=oRange.GetDataArray

      For I=0 to 2
         B=A(I)   
       For J = 0 to 2
          B(J) = "Magique" & I & J
       Next J
       A(I)=B
      Next I
        oRange.SetDataArray(A())   'Check http://www.oooforum.org/forum/viewtopic.phtml?t=6825
End Sub

'Cette macro prend aussi 5 secondes pour un tableau 10000 x 20, en comprenant le temps de calculer les éléments du tableau de départ.



Code : Tout sélectionner   AgrandirRéduire
'Stocker une plage dans un tableau
Sub PlageDansTableau()
    Dim FeuilleActive As Object
    Dim i as integer
    Dim dimc as variant
    FeuilleActive = ThisComponent.getCurrentController.getActiveSheet
    dimc = FeuilleActive.getCellRangebyName("A1:A2").getDataArray()
    For i = 0 To 1
    print dimc(i)(0)
    Next
End Sub


'Voici les principes de base, pour échanger les données entre feuilles et tableau mémoire.
'Si une aide secourable peut m'aider à en faire une version générique de qualité,
'je vous en remercie infiniment.
'Ici, mon objectif est de faire correspondre le plus simplement possible
'numéros de ligne, numéros de colonne,
'que ce soit :
- dans la fenêtre de calc où l'on commence toujours ligne 1, colonne A
- dans la lecture ooobasic de la feuille via oooBasic, où il faudrait restituer ligne 0, colonne 0, en 1,A
- dans un tableau où il faudrait restituer ligne 0, colonne 0, en 1,A

Merci beaucoup.
LibreOffice version 5.4.7.2.M6 (x64)
Windows 10
+
LibreOffice version 5.4.7.2.M6 (x64)
Windows 7

#HSQL Database Engine 1.8.0
version=1.8.0

Locale : fr-FR (fr_FR)

Obligation de version


Bonjour, merci et à bientôt !
Avatar de l’utilisateur
martinbrait
InconditiOOnnel
InconditiOOnnel
 
Message(s) : 753
Inscrit le : 09 Avr 2013 08:15
Localisation : T'as pas dit bonjour, merci et à bientot !

Re: [Calc] Parcourir lignes et colonnes en partant de 1

Messagepar Dude » 17 Mai 2021 09:57

Salut,

Les index commencent à 0 et pas seulement pour les coordonnées de cellules :
Code : Tout sélectionner   AgrandirRéduire
'oSheet=oDoc.Sheets(0)

Il y a eu tout un tas de discussion sur la notation L1C1 et le fait qu'elle ne doit pas être utilisée.
Avatar de l’utilisateur
Dude
Grand Maître de l'OOffice
Grand Maître de l'OOffice
 
Message(s) : 22629
Inscrit le : 03 Mars 2006 08:45
Localisation : 127.0.0.1

Re: [Calc] Parcourir lignes et colonnes en partant de 1

Messagepar jeanmi2403 » 17 Mai 2021 23:46

Bonsoir,
'Voici les principes de base, pour échanger les données entre feuilles et tableau mémoire.
'Si une aide secourable peut m'aider à en faire une version générique de qualité,

Tout est déjà analysé et réalisé, il me semble ?
Bonne soirée,
Jean-Michel
LibO 7.0.6 et AoO 4.1.10 sur Windows 10 x64 & Ubuntu 20.04
LibO 7.1.0.3 sur OpenSuse & Linux MX
Avatar de l’utilisateur
jeanmi2403
InconditiOOnnel
InconditiOOnnel
 
Message(s) : 904
Inscrit le : 18 Jan 2008 10:02
Localisation : Val de Marne


Retour vers Macros et API

Qui est en ligne ?

Utilisateur(s) parcourant ce forum : Aucun utilisateur inscrit et 7 invité(s)