Page 1 sur 1

[Résolu] [Calc] Parcourir, tester, changer valeur

Publié : 08 août 2016 19:49
par CImb
Bonjour,

Je suis un noob en oBasic et je veux faire un truc que je crois plutôt simple, au niveau 1 de maitrise de oBasic. Seulement j'ai pas le temps d'utiliser quelques heures pour arriver à ce niveau et j'imagine que, pour certain d'entre vous, ça va prendre 30 secondes.

Je souhaite parcourir une colonne et tester si les valeurs de chacune des cellules est supérieur à 360. Si oui, changer cette valeur pour celle de la case d'au-dessus.
Je joins un mini exemple, c'est la colonne C qui est concernée.

Clément

Re: [Calc] Parcourir, tester, changer valeur

Publié : 08 août 2016 23:54
par zeguedon
Bonjour,

Un petit bout de code qui gère la colonne C quelque soit sa longueur, il suffit juste de coller les nouvelles données à traiter et appuyer sur le bouton GO :lol:

Code : Tout sélectionner

Sub Main
oFeuil = thisComponent.currentController.activeSheet
lignesVides() = oFeuil.columns.GetByName("C").queryEmptyCells.RangeAddresses
For  x = 1 to lignesVides(0).StartRow - 1 
    	cell = oFeuil.GetCellByPosition(2,x)
    	If cell.value > 360 Then
    		cell.value = oFeuil.GetCellByPosition(2,x-1).value
    	end if
    next
End Sub
et le fichier qui va avec :
A+

Re: [Calc] Parcourir, tester, changer valeur

Publié : 08 août 2016 23:58
par Piaf
Bonsoir
A tester

Code : Tout sélectionner

Sub Main
Dim oDoc as Object, maFeuille as Object, maZone as Object
Dim i as Long
	oDoc = thisComponent
	maFeuille = oDoc.CurrentController.ActiveSheet
	maZone = maFeuille.getCellRangeByName("C2:C54")
	For i = LBound(maZone.DataArray) To UBound(maZone.DataArray)
		If maZone.DataArray(i)(0) > 360 Then
			maZone.getCellByPosition(0,i).Value = maZone.DataArray(i - 1)(0)
		End If	
	Next i
End Sub
Pas le temps non plus pour les explications.
 Ajout : Grillé par zeguedon :lol: 
A+

Re: [Calc] Parcourir, tester, changer valeur

Publié : 09 août 2016 01:31
par martinbrait
Bonjour CImb,

Un exemple, en pièce jointe.

Code : Tout sélectionner

REM  *****  BASIC  *****

Sub Main

'Quel est le nombre maximum de cellules dans une feuille de calcul LibreOffice  ?

   ' Le nombre maximum de colonnes est de 1024 (de la colonne A à la colonne AMJ) ;
   ' le nombre maximum de lignes est de 1 048 576 ;
   ' le nombre maximum de cellules dans une feuille est de 1 073 741 824;
   ' le nombre maximum de feuilles dans un classeur est 256.
'ModifierMonTableau(NomFeuille As String,NumCol As Integer,NbLig As Long)
	ModifierMonTableau("Feuille2",3,1048576,360)
	MsgBox "Les valeurs supérieures à 360 ont été substituées dans la colonne C",  0+64, "TRANSFORMATION EFFECTUEE"
End Sub

Sub ModifierMonTableau(NomFeuille As String,NumCol As Integer,NbLig As Long,NombreLimite As Integer)
dim PysClass as object, PysFeuille as object, PysCell as object, PysUpperCell As Object, PysQuery as object, PysEnum as object
dim PysLigEnCours as long, PysColEnCours as integer

'on suppose, comme sur l'exemple que tous les champs du tableau sont remplis
const NbCol = 1
const StartRowNum=1
ColNum=CInt(NumCol)-1	'Nombre naturel de colonnes


PysClass = thiscomponent 'Le classeur courant
PysFeuille = PysClass.sheets.getByname(NomFeuille)'Dans ce classeur accès à une feuille par son nom

for PysLigEnCours  = StartRowNum   to NbLig ' parcours des lignes
      PysCell = PysFeuille.getCellByPosition(ColNum, PysLigEnCours)   'Accès à la cellule
	If PysLigEnCours > 1  Then
		PysUpperCell = PysFeuille.getCellByPosition(ColNum, PysLigEnCours-1)
		
	'traitement à partir de la ligne 2 uniquement
	If Len(PysCell.String)>1 Then      
      'Dans notre cas, 360 est de type variant, pouvant être évalué avec un opérateur mathématique.
      	If CLng(PysCell.String) >=NombreLimite Then
      		PysCell.String = PysUpperCell.String
		End If
     End if
      'on choisit d'abréger le parcours
      If Len(PysCell.String)=0 Then Exit For		
	
	EndIf 
next PysLigEnCours
End Sub
Merci et à bientôt !

Re: [Calc] Parcourir, tester, changer valeur

Publié : 09 août 2016 08:51
par CImb
Merci beaucoup,
Vos solutions fonctionnent. C'est intéressant de voir les différentes façons de résoudre un même problème, ça me servira quand je voudrai m'y connaitre plus en oBasic.
A+

Re: [Résolu] [Calc] Parcourir, tester, changer valeur

Publié : 09 août 2016 16:08
par ThierryT