Page 2 sur 2

Recherche d'occurrence

Posté : 19 juil. 2016 15:40
par Bidouille
La bibliothèque Tools fournit avec OpenOffice offre la fonction PartStringInArray (incluse dans le module Strings).
Elle permet de vérifier si une occurrence est trouvée dans une variable tableau.

NB : n'oubliez pas de charger la bibliothèque au départ.

Code : Tout sélectionner

Sub Main
   GlobalScope.BasicLibraries.loadLibrary("Tools")
   
   oTab = Array("Ali", "Bob", "Jim", "Joe", _
             "Léa", "Max", "Tom", "Zoé")
   
   PartStringInArray(oTab, "Léa", 1) 'Renvoie 4
   PartStringInArray(oTab, "lea", 0) 'Renvoie -1
   PartStringInArray(oTab, "LEA", 0) 'Renvoie -1
   PartStringInArray(oTab, "J", 1) 'Renvoie 2
   PartStringInArray(oTab, "Jo", 0) 'Renvoie 3
   PartStringInArray(oTab, "jo", 0)  'Renvoie -1
   PartStringInArray(oTab, "o", 1)   'Renvoie 1   
End Sub

Elimination des lignes vides

Posté : 27 oct. 2021 13:53
par Bidouille
Il s'agit de copier une plage de données sans les lignes vides.
Dans cet exemple, on teste si la cellule de la colonne A contient un nom.
On colle le résultat sous la 12e ligne du tableau.
transfert_sans_ligne_vide.png
transfert_sans_ligne_vide.png (12.66 Kio) Vu 5177 fois

Code : Tout sélectionner

   nCol = 0 'Index de la colonne que l'on teste si vide
   nLigne = 12 'N° de ligne où se collera la plage
   
   oDoc = ThisComponent
   oFeuil = oDoc.Sheets(0) ' La 1ere feuille qui est indexée à 0
   oPlage = oFeuil.getCellRangeByName("A1:D11")
   oCopie = oPlage.DataArray
   maxCol = UBound(oCopie(0))
   k = 0
   for i = 0 to UBound(oCopie)
      if oCopie(i)(nCol) <> "" then
         Redim Preserve oColle(0 to k)
         Redim oLigne(0 to maxCol)
         for j = 0 to maxCol
            oLigne(j) = oCopie(i)(j)
         next
         oColle(k) = oLigne
         k = k + 1
      endif   
   next
   
   oPlage = oFeuil.getCellRangeByPosition(0,nLigne,maxCol,nLigne+k-1)
   oPlage.DataArray = oColle

Elimination de cellules vides à gauche

Posté : 17 janv. 2022 06:28
par Bidouille
Autre cas de figure, on veut conserver les cellules remplies en les ramenant à gauche :
capture.png
capture.png (58.76 Kio) Vu 4267 fois

Ce qui nous donne :

Code : Tout sélectionner

   oDoc = ThisComponent
   oFeuil = oDoc.Sheets(0) ' La 1ere feuille qui est indexée à 0
   oPlage = oFeuil.getCellRangeByName("A1:H5")
   oCopie = oPlage.DataArray
   maxLig = UBound(oCopie)
   maxCol = UBound(oCopie(0))
   oColle = oCopie
   for i = 0 to maxLig
      for j = 0 to maxLig
          for k = 0 to maxCol
             if oCopie(j)(k) = "" and k < maxCol then
                oColle(j)(k) = oCopie(j)(k+1)
               oCopie(j)(k+1) = ""
             endif
          next
      next
   next
   
   oPlage = oFeuil.getCellRangeByName("A8:H12")
   oPlage.DataArray = oColle