[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 !
Avatar de l’utilisateur
martinbrait
InconditiOOnnel
InconditiOOnnel
Messages : 753
Inscription : 09 avr. 2013 09:15
Localisation : T'as pas dit bonjour, merci et à bientot !

[Calc] Parcourir lignes et colonnes en partant de 1

Message 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.
Dernière modification par martinbrait le 14 mai 2021 14:05, modifié 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
micmac
RespOOnsable forum
RespOOnsable forum
Messages : 9224
Inscription : 28 août 2010 10:45

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

Message 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.
Touche Ctrl de Windows = touche cmd⌘ sur Mac
Outils > Options sur Windows = OpenOffice > Préférences sur Mac
Avatar de l’utilisateur
jeanmi2403
SuppOOrter
SuppOOrter
Messages : 1398
Inscription : 18 janv. 2008 10:02
Localisation : Val de Marne

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

Message 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,
Jean-Michel
LibO 7.5.9 et AoO 4.1.15 sur Windows 11 & Ubuntu 22.04
LibO 7.6 sur OpenSuse & Linux MX
Avatar de l’utilisateur
martinbrait
InconditiOOnnel
InconditiOOnnel
Messages : 753
Inscription : 09 avr. 2013 09:15
Localisation : T'as pas dit bonjour, merci et à bientot !

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

Message 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.
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
Dude
IdOOle de la suite
IdOOle de la suite
Messages : 25143
Inscription : 03 mars 2006 08:45
Localisation : 127.0.0.1
Contact :

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

Message 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.
Avatar de l’utilisateur
jeanmi2403
SuppOOrter
SuppOOrter
Messages : 1398
Inscription : 18 janv. 2008 10:02
Localisation : Val de Marne

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

Message 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,
Jean-Michel
LibO 7.5.9 et AoO 4.1.15 sur Windows 11 & Ubuntu 22.04
LibO 7.6 sur OpenSuse & Linux MX
Répondre