Poser votre question
0

Index hors de la plage définie dans une fonction (Calc)

posée 2021-04-26 19:26:43 +0200

Image Gravatar de NathZeb

updated 2021-04-27 11:11:31 +0200

je voudrais juste comparer le contenu de deux colonnes non contigües

Function Test()
dim oClasseur as object, oFeuille as object
Dim iLig As Integer
Dim oCellules1,oCellules2
Dim oLigs1(), oLigs2()
oClasseur = thisComponent

oFeuille = oClasseur.Sheets.getByName("Feuille2")
oCellules1 = oFeuille.getCellRangeByName("N6:N51")
oCellules2 = oFeuille.getCellRangeByName("J6:J51")

oLigs1() = oCellules1.getDataArray()
oLigs2() = oCellules2.getDataArray()
For iLig = LBound(oLigs1()) To UBound(oLigs1())
    if oLigs1(iLig) <> oLigs2(iLig) then
        print oLigs1(iLig),oLigs2(iLig)
    endif
    Next
End Function
éditer requalifier signaler fermer fusionner supprimer

Commentaires

je voudrais juste comparer le contenu de deux colonnes non contigües

Image Gravatar de NathZebNathZeb ( 2021-04-26 19:28:46 +0200 )éditer

le message d'erreur au deuxième passage est: "Valeur ou type de données incorrect(e). Index hors de la plage définie".

Image Gravatar de NathZebNathZeb ( 2021-04-26 19:29:57 +0200 )éditer

Titre modifié et code reformaté.

Image Gravatar de Hagar DelestHagar Delest ( 2021-04-27 11:12:56 +0200 )éditer

3Réponses

0

répondue 2021-04-27 11:31:43 +0200

Image Gravatar de pierre-yves samyn

Bonjour

C'est un peu plus compliqué que cela : getDataArray() retourne un tableau de tableau (même dans le cas d'une seule cellule). Dans ton cas tu ne travailles que sur une seule colonne mais une plage peut, par définition, inclure plusieurs colonnes.

Quand on parcourt la "première dimension" (par ex les lignes), pour chaque élément, on obtient un tableau (par ex. de colonnes). Dans l'exemple suivant on affiche le contenu de la plage parcourue :

oLigs1() = oCellules1.getDataArray()

nbLig = uBound(oLigs1)
nbCol = uBound(oLigs1(0))

for i = 0 to nbLig
    uneLigne = oLigs1(i)
    for j = 0 to nbCol
        print uneLigne(j)(i)
    next j  
next i

Cordialement

éditer signaler supprimer permalien plus

Commentaires

Merci beaucoup pour vos réponses. C'est effectivement un peu plus compliqué. Je n'ai pas encore saisi toutes les subtilités du langage. Je continue mon apprentissage. Je travaille sur un fichier libreoffice calc d'une auberge de jeunesse: une feuille par semaine, une colonne chaque jour contenant l'occupation des chambres. Je dois déterminer chaque jour le nombre de chambres à faire. Je suis plus familière du langage python. Merci encore,

Image Gravatar de NathZebNathZeb ( 2021-04-27 11:55:42 +0200 )éditer
0

répondue 2021-04-27 09:50:41 +0200

Image Gravatar de NathZeb

Merci pour votre réponse. Je viens de re formuler le petit programme selon ma première idée. Erreur = "Erreur d'exécution BASIC.Variable d'objet non définie". Positionnée sur la ligne "if oLigs1 ..." Il me semble que mes variables sont définies?

éditer signaler supprimer permalien plus

Commentaires

; Oui mais en tableau. Dans ce cas il fait Dim oLigs1, oLigs2

Image Gravatar de prog.amateurprog.amateur ( 2021-04-27 10:09:51 +0200 )éditer
0

répondue 2021-04-27 09:04:09 +0200

Image Gravatar de prog.amateur

Bonjour, Les tableaux olig1 et olig2 reçoivent respectivement la valeur de oLigs1(iLig) et oLigs2(iLig), donc leur indice ne dépasse pas le 0. Des variables auraient suffit ou alors il faut écrire if oLig1(0) <> oLig2(0) then Claude

éditer signaler supprimer permalien plus
S'identifier/S'inscrire pour répondre

Outils de question

1 suiveurs

Stats

Posée: 2021-04-26 19:26:43 +0200

Consultée: 27 fois

Mise à jour: Apr 27