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

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 !
CImb
NOOuvel adepte
NOOuvel adepte
Messages : 19
Inscription : 09 mars 2016 10:09

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

Message 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
Vous ne pouvez pas consulter les pièces jointes insérées à ce message.
Dernière modification par CImb le 09 août 2016 08:52, modifié 1 fois.
LibreOffice 5.2.5.1 sous Xubuntu
zeguedon
ManitOOu
ManitOOu
Messages : 3031
Inscription : 02 juil. 2014 17:25

Re: [Calc] Parcourir, tester, changer valeur

Message 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+
Vous ne pouvez pas consulter les pièces jointes insérées à ce message.
Comment baliser [Résolu] ?
AOO
LibreOffice
Sous Linux
Piaf
GourOOu
GourOOu
Messages : 5622
Inscription : 25 nov. 2011 18:07
Localisation : Guyane

Re: [Calc] Parcourir, tester, changer valeur

Message 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+
Libre Office Version: 6.1.6 et Apache OpenOffice 4.1.6 Sur Xubuntu 18.04 AMD64
Avatar de l’utilisateur
martinbrait
InconditiOOnnel
InconditiOOnnel
Messages : 753
Inscription : 09 avr. 2013 07:15
Localisation : T'as pas dit bonjour, merci et à bientot !

Re: [Calc] Parcourir, tester, changer valeur

Message 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 !
Vous ne pouvez pas consulter les pièces jointes insérées à ce message.
Dernière modification par martinbrait le 09 août 2016 18:19, modifié 1 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 !
CImb
NOOuvel adepte
NOOuvel adepte
Messages : 19
Inscription : 09 mars 2016 10:09

Re: [Calc] Parcourir, tester, changer valeur

Message 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+
LibreOffice 5.2.5.1 sous Xubuntu
Avatar de l’utilisateur
ThierryT
Membre enthOOusiaste
Membre enthOOusiaste
Messages : 467
Inscription : 10 nov. 2012 17:05

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

Message par ThierryT »

LibreOffice 6.1.3.2 x64 / AOO 4.1.5 (x86) sous Windows 8.1 (x64)
Java 8.x (x64 et x86), Firefox, Thunderbird,....

“Celui qui aime à apprendre est bien près du savoir.” (Confusius)
Comment baliser Résolu