Page 1 sur 1

[Calc] Parcourir lignes et colonnes en partant de 1

Publié : 14 mai 2021 11:35
par martinbrait
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

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.

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

Publié : 14 mai 2021 11:38
par micmac
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.

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

Publié : 14 mai 2021 15:18
par jeanmi2403
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

 option base 1
permet de numéroter à partir de 1.
Pour les feuilles de calcul, pas de possibilité de changer, à ma connaissance.
Cordialement,

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

Publié : 14 mai 2021 17:43
par martinbrait
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


'[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

'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

'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.

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

Publié : 17 mai 2021 10:57
par Dude
Salut,

Les index commencent à 0 et pas seulement pour les coordonnées de cellules :

Code : Tout sélectionner

'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.

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

Publié : 18 mai 2021 00:46
par jeanmi2403
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,