[Résolu] Formule : addition d'une colonne avec fin aléatoire

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 !
stargate
NOOuvel adepte
NOOuvel adepte
Messages : 22
Inscription : 10 avr. 2006 07:05
Localisation : Belgique

[Résolu] Formule : addition d'une colonne avec fin aléatoire

Message par stargate »

Bonjour, meilleurs voeux à toute l'équipe


je voudrais additionner les cellules d'une colonne dont le début est K10 et la fin est aléatoire.


j'ai testé ceci mais il me retourne une erreur.

Code : Tout sélectionner

Sub TotalAirCare()
Dim oFeuille As Object
Dim oCell As Object
Dim oPlageTotalAirCare As Object
Dim j As integer
Dim fonc As Integer
Dim resultat As Double
oFeuille = ThisComponent.Sheets.getByIndex(0) 
J =10
oCell = oFeuille.getCellByPosition(10,j)
while oCell.string <> ""  and j < 30
j = j + 1
oCell = oFeuille.getCellByPosition(10,j)
wend  
'MsgBox j
oPlageTotalAirCare = oFeuille.getCellRangeByPosition(10,10,10,j)
fonc = com.sun.star.sheet.GeneralFunction.SUM
resultat = oPlageTotalAirCare.computeFunction(fonc)
oCell.getCellByPosition(10,j).Value = resultat

End Sub
l'erreur est signalée à la ligne

Code : Tout sélectionner

oCell.getCellByPosition(10,j).Value = resultat


erreur : une exception s'est produite:
Type: com.sun.star.lang.IndexOutOfBoundsException


une idée merci
Dernière modification par stargate le 07 janv. 2007 09:52, modifié 1 fois.
00o 2.3.0 Fedora 8
bm92
ManitOOu
ManitOOu
Messages : 2562
Inscription : 26 nov. 2005 13:42

Message par bm92 »

une idée merci
J'en ai deux :lol:

:idea: Pour ton erreur, c'est une étourderie. Il fallait écrire oFeuille et non oCell

Code : Tout sélectionner

oFeuille.getCellByPosition(10,j).Value = resultat
:idea: En fait, pour une simple addition on pouvait faire plus simple

Code : Tout sélectionner

Sub TotalAirCare2() 
Dim oFeuille As Object 
Dim oCell As Object 
Dim oPlageTotalAirCare As Object 
Dim j As integer 
Dim fonc As Integer 
Dim resultat As Double 
oFeuille = ThisComponent.Sheets.getByIndex(0) 
J =10 
resultat = 0
oCell = oFeuille.getCellByPosition(10,j) 
while oCell.string <> ""  and j < 30 
  resultat = resultat + oCell.Value
  j = j + 1 
  oCell = oFeuille.getCellByPosition(10,j) 
wend  
oFeuille.getCellByPosition(10,j).Value = resultat 
End Sub
stargate
NOOuvel adepte
NOOuvel adepte
Messages : 22
Inscription : 10 avr. 2006 07:05
Localisation : Belgique

Message par stargate »

merci,

mais dans les deux cas , le résultat retourné = 0
n'est ce pas un problème de format de cellule

je t'expliique le cheminement d'un ajout dans une cellule


je récupère l'affichage d'un textfield

Code : Tout sélectionner


Sub Ajouter()
Dim oDoc As Object
Dim oSheet As Object
Dim oCellRange As Object
Dim oCell As Object

Dim sVal6 As String
Dim vMonChamps6

oDoc = thiscomponent              
oSheet= oDoc.Sheets.getByName("Feuille1")

vMonChamps5 = Dialog1.GetControl("txtElectronic")

sVal6=vMonChamps5.Text

osheet.getCellByPosition(10,i).String = sVal6 

End Sub
je me rend compte que j'essaie d'additionner du texte

Comment rendre le contenu des cellules en nombre

j'ai essayé avec CNUM mais sans succès

peut-on convertir une plage de cellule contenant du texte en plage de cellule au format nombre


merci de ta patiente
00o 2.3.0 Fedora 8
Jeff
Grand Maître de l'OOffice
Grand Maître de l'OOffice
Messages : 10007
Inscription : 18 sept. 2006 09:40
Localisation : France

Message par Jeff »

Bonjour,

à titre d'info, CNUM ne peut apparemment pas comporter plusieurs critères :

Code : Tout sélectionner

=CNUM(A1+A2)  -> incorrect

Code : Tout sélectionner

=CNUM(A1)+CNUM(A2)  -> correct
EDIT : Par contre, en fonction matricielle ça marche :

Code : Tout sélectionner

=CNUM(A1:A10)
à valider par Ctrl+Maj+Entrée pour obtenir en barre de formule l'affichage

Code : Tout sélectionner

{=CNUM(A1:A10)}
toutes les cellules sont alors converties.
À lire avant tout !

Pour télécharger Apache OpenOffice

AOO 4.1.16 / Debian 13 "Trixie" / Xfce
AOO 4.1.15 / Debian 11 "Bullseye" / Cinnamon
Jeff
Grand Maître de l'OOffice
Grand Maître de l'OOffice
Messages : 10007
Inscription : 18 sept. 2006 09:40
Localisation : France

Message par Jeff »

Sinon, si dans ta barre de formule tu vois une apostrophe avant ton chiffre, y'a ça aussi pour convertir un texte (par ex. '00023) en chiffre (23) : http://user.services.openoffice.org/fr/ ... remplac%2A
À lire avant tout !

Pour télécharger Apache OpenOffice

AOO 4.1.16 / Debian 13 "Trixie" / Xfce
AOO 4.1.15 / Debian 11 "Bullseye" / Cinnamon
stargate
NOOuvel adepte
NOOuvel adepte
Messages : 22
Inscription : 10 avr. 2006 07:05
Localisation : Belgique

Message par stargate »

merci,

je ne vois toujours pas comment faire par macro


ce que je voudrais, c'est qu'avec le test de la boucle, il convertisse les cellules



Code : Tout sélectionner

Sub TotalAirCare()
Dim oFeuille As Object
Dim oCell As Object
Dim oPlageTotalAirCare As Object
Dim i As integer
Dim j As integer
Dim fonc As Integer
Dim resultat As Double
oFeuille = ThisComponent.Sheets.getByIndex(0) 
J =9

resultat = 0
oCell = oFeuille.getCellByPosition(10,j)
while oCell.string <> ""  and j < 30
  resultat = resultat + oCell.Value
  j = j + 1
  oCell = oFeuille.getCellByPosition(10,j)
  oCell = CNUM(10,j)                              <------------------essai
  
wend 
oFeuille.getCellByPosition(10,j).Value = resultat 

End Sub
je sais que cela foire, mais c'est pour donner une idée
00o 2.3.0 Fedora 8
Avatar de l’utilisateur
cris59
Membre enthOOusiaste
Membre enthOOusiaste
Messages : 482
Inscription : 20 mars 2006 15:15
Localisation : Paris

Message par cris59 »

Pourquoi n'utilises-tu pas un NumericField en récupérant la valeur avec .Value ?

Code : Tout sélectionner

sVal6=vMonChamps5.Value

osheet.getCellByPosition(10,i).Value = sVal6

cris59
WinXP PRO SP2 avec OOo2.2 & Vista avec OOo2.3.1
& Debian avec OOo2.2
bm92
ManitOOu
ManitOOu
Messages : 2562
Inscription : 26 nov. 2005 13:42

Message par bm92 »

stargate a écrit :merci,

mais dans les deux cas , le résultat retourné = 0
Bien sûr que si, ça marche. Il te suffit de faire un essai en mettant manuellement des nombres dans la colonne.
stargate a écrit :je récupère l'affichage d'un textfield

Code : Tout sélectionner

sVal6=vMonChamps5.Text 
osheet.getCellByPosition(10,i).String = sVal6
Ceci est un autre problème.
- tu utilises un TextField pour recevoir un nombre, ce n'est pas idéal. En utilisant un champ numérique ou un champ formaté tu bénéficies d'une reconnaissance de nombre.
- en supposant que ton utilisateur a bien tapé un texte représentant un nombre, OOoBasic peut faire la conversion texte vers nombre.
- mais pour mettre un nombre dans une cellule on n'utilise pas sa propriété String mais sa propriété Value !

Code : Tout sélectionner

sVal6=vMonChamps5.Text 
osheet.getCellByPosition(10,i).Value = sVal6
D'autres variantes de codages seraient possibles.

Pour info, CNUM() est une fonction Calc, pas une fonction OOoBasic.
stargate a écrit :ce que je voudrais, c'est qu'avec le test de la boucle, il convertisse les cellules

Code : Tout sélectionner

  oCell = CNUM(10,j)                              <------------------essai
Là je n'arrive plus à comprendre ce que tu cherches à réaliser. Je ne vois plus le rapport avec l'aspect dialogue.

Les éléments de réponse donnés devraient te permettre de résoudre ton problème. Mais je pense qu'il te manque trop de notions de base pour entreprendre un tel codage.
Il faut commencer par te documenter en lisant :
- soit le Manuel de programmation basic SO 8 téléchargeable à la page http://fr.openoffice.org/Documentation/ ... ation.html
- soit le livre Programmation OpenOffice.org 2

La lecture ne suffit pas, il faut s'exercer avec des macros très simples pour bien comprendre. Ensuite on combine les connaissances.
stargate
NOOuvel adepte
NOOuvel adepte
Messages : 22
Inscription : 10 avr. 2006 07:05
Localisation : Belgique

Message par stargate »

ok ,ca tourne
j'ai changé cela

Code : Tout sélectionner

sVal6=vMonChamps5.Text
osheet.getCellByPosition(10,i).Value = sVal6

erreur de débutant que je suis,je cherchais midi à quatorze heure

je suis tes conseils j'ai téléchargé le Manuel de programmation basic SO 8
et j'ai le bouquin.


Encore merci
00o 2.3.0 Fedora 8