Rechercher : dans
Par :

OOoBasic, macro sous openoffice linux

Dernière réponse le 29 jui 2005 à 19:03:36 Shogolat, le 28 jui 2005 à 11:51:28 
 Signaler ce message aux modérateurs

Bonjour j'aimerai faire une macro sous OpenOffice Calc.

Mais je n'arrive pas à trouver comment écrire dans une cellule à partir d'une macro ou affecter la valeur d'une cellule à une autre cellule.
Et aussi je ne trouve pas l'opérateur =
En basic le = est l'affectation hors je ne trouve pas comment faire pour la comparaison if x = y then.

Enfaite je voudrais un truc simple comme :

if cellule(a1) = cellule (d1) then /// je compare a1 et d1
cellule(e1) = cellule (b1) /// j'affecte la valeur de b1 dans e1
end if

Comment déclarer la variable de la cellule?

et ensuite comment faire pour admettons affecter le numéro de la ligne dans une variable x admettons.

comme ca je pourrais comparé ax avec bx par exemple pour pouvoir comparer toutes les lignes d'une feuille.

Merci d'avance

Configuration: Debian
OpenOffice 1.1.3

Meilleures réponses pour « OOoBasic, macro sous openoffice linux » dans :
Choisir une distribution Linux VoirChoisir sa distribution GNU/Linux est loin d'être évident ! Surtout quand on débute sur la banquise ;-) Ceci n'a pas la prétention de promouvoir une distribution au détriment des autres. C'est plutôt une liste de solutions classées par...
[Linux] Compresser/Décompresser un fichier ZIP VoirLes fichiers ZIP sont généralement destinés à un usage sous Microsoft Windows. Le format de compression privilégié sous Linux est GZip (.gz) ou le format Tarball (.tar.gz). Il est néanmoins possible de compresser et décompresser des fichiers ZIP à...
Configurer le wifi sous Linux VoirWiFi sous Linux Première étape : diagnostic Deuxième étape : la carte n'est pas reconnue Troisième étape : configurer la carte En WEP En WPA Quatrième étape : se connecter au point d'accès Toujours en difficulté ? Ce tutoriel...
Télécharger MOREFUNC (Macro complémentaire EXCEL) VoirMorefunc est une macro complémentaire proposant 67 nouvelles fonctions de feuille de calcul pour Excel. Ces fonctions sont compatibles avec Excel 95 à 2007. Elles ne sont pas portables sur d'autres plate-formes que Windows, ni sur d'autres...
Exécuter une macro VoirExécuter une macro Excel et Calc proposent plusieurs façons d’exécuter une macro : en la sélectionnant dans une liste, dans la boîte de dialogue Macro ; par un raccourci clavier ; en l’attachant à un bouton de la barre d’outils ; ...
Linux - L'installation de logiciels VoirLes différents types d'archives Basiquement il existe plusieurs façons de récupérer une application fonctionnant sous Linux : Sous forme de paquetage RPM. Il s'agit d'un fichier portant l'extension .rpm permettant une installation automatique,...
Linux - L'éditeur Vi VoirIntroduction à Vi Vi est un des éditeurs de texte les plus populaires sous les systèmes de type Unix (avec Emacs et pico) malgré son ergonomie très limitée. Sous Linux il existe une version libre de Vi appelée Vim (Vi Improved). Vi (prononcez...

1

lami20j, le 29 jui 2005 à 01:18:46
  • +1

Salut,

A       B        C      D       E
1	45		45	
2	454		45	
3	8		 2	
4	754		65	
5	2		32	
6	12		23	
7	5		 7	5
8	232		 1	
9	665		12	
10     323		 6	


J'ai testé sur les valeurs suivantes et le résultat et 5 puisque A7 = D7 donc E7 = B7


Sub comparer()

	dim classeur as object
	dim feuilles as object
	dim feuille as object
	dim cellule as object
	dim c1 As Integer,c2 As Integer,c3 As Integer
	classeur = thisComponent  ' le classeur
	feuilles = classeur.Sheets ' la collection des feuilles
	feuille = feuilles.getByName("a")
 'la feuille je l'ai nommée a

	dim i as integer
	for i=1 to 10
 		c1= feuille.getcellrangebyname("A" & i).value
 		c2= feuille.getcellrangebyname("D" & i).value
 		c3 = feuille.getcellrangebyname("B" & i).value
 		
 		if c1 = c2 then
 		 	feuille.getcellrangebyname("E" & i).value = c3
		 end if
 	next i
End Sub


Une feuille openoffice contient 32000 lignes.

L'exemple je l'ai fait que pour les 10 lignes.

Ca m'etonnerait que tu auras besoin de toutes les lignes.

Si tu veut vraiment vérifier toutes les lignes de 0 à 31999 alors tu peut utiliser ce module.

Sub comparer()

	dim classeur as object
	dim feuilles as object
	dim feuille as object
	dim cellule as object
	dim c1 As Integer,c2 As Integer,c3 As Integer
	classeur = thisComponent  ' le classeur
	feuilles = classeur.Sheets ' la collection des feuilles
	feuille = feuilles.getByName("a") 'la feuille je l'ai nommée a

	dim i as integer
	dim nblignes as integer
	nblignes = feuille.rows.count
 'on stocke dans une variable le nombre de lignes
' on peut aussi utiliser une constante sachant que le nombre de lignes et 32000
	for i=1 to nblignes

 'on vérifie toutes les lignes (il faut adapter au contenu de ta feuille)
 	 ' on utilise les variables c1,c2,c3 pour stocker
 ' le contenu des cellules à chaque passage dans la boucle

                c1= feuille.getcellrangebyname("A" & i).value
 		c2= feuille.getcellrangebyname("D" & i).value
 		c3 = feuille.getcellrangebyname("B" & i).value
 		
 		if c1 = c2 then 
 		 	feuille.getcellrangebyname("E" & i).value = c3
		 end if
 	next i
End Sub

Répondre à lami20j

2

shogolat, le 29 jui 2005 à 09:52:37
  • +1

Enfaite ta solution fonctionne mais pas comment j'ai besoin, car toi ca fonctionne si le mot à la ligne 10 de la f1 = le mot à la ligne 10 de la f2 et ca ne fonctionne pas si le mot ligne 10 f1 <> du mot l10 f2 mais = au mot l52 f2

j'ai fait ca, ca fonctionne, c'est un peu long car si le mot n'existe pas sur la feuille 2 il la parcourt en entier pour chercher si le mot est là ou non, ca ralentit mais utile si les mots ne sont pas à la même ligne, pour trouver il ne me manqué que le code pour prendre la valeur d'une cell:

Sub trouve()
Dim classeur as Object
Dim lesfeuilles as Object
Dim feuille as Object
Dim cell as Object
Dim feuille1 as Object

classeur = thisComponent
lesfeuilles = classeur.Sheets
feuille = lesfeuilles.getByName("Feuille2")
feuille1 = lesfeuilles.getByName("Feuille1")
Dim x as Long
Dim y as Long
Dim xx as Long


xx = 1 'ligne
y = 0 'colonne
x = 1


while feuille.getCellByPosition(y,xx).string <> ""

if feuille.getCellByPosition(y,xx).string = feuille1.getCellByPosition(y,x).string then

feuille1.getCellByPosition(y+15,x).string = feuille.getCellByPosition(y+15,xx).string
feuille1.getCellByPosition(y+16,x).string = feuille.getCellByPosition(y+16,xx).string
x = x+1
xx = xx+1

else

while feuille.getCellByPosition(y,xx).string <> feuille1.getCellByPosition(y,x).string and feuille1.getCellByPosition(y,x).string <> ""
x = x+1

wend


if feuille.getCellByPosition(y,xx).string = feuille1.getCellByPosition(y,x).string then
feuille1.getCellByPosition(y+15,x).string = feuille.getCellByPosition(y+15,xx).string
feuille1.getCellByPosition(y+16,x).string = feuille.getCellByPosition(y+16,xx).string
else
xx = xx + 1
x = 0
end if


end if
wend

End sub

Répondre à shogolat

3

 lami20j, le 29 jui 2005 à 19:03:36

Salut,

Enfaite ta solution fonctionne mais pas comment j'ai besoin


Je suis certain que tu as raison. Cependant ce ne pas ça que tu as demandé. Dans ton message je n'ai pas deviné qu'il s'agit de plusieurs feuilles par exemple.

pour trouver il ne me manqué que le code pour prendre la valeur d'une cell:


Dim strCellule As String 
' une variable dans la quelle on stocke le contenu d'une cellule ( le cas string)

strCellule = feuille.getCellRangeByName("C2").String
 ' (ou value en fonction de format de tes données)


ou

strCellule = feuille.getCellByPosition(x,y).String


c'est un peu long car si le mot n'existe pas sur la feuille 2 il la parcourt en entier pour chercher si le mot est là ou non


Pour ça il y a aussi des solutions. Par exemple la methode de recherche dichotomique.


lami20j

Répondre à lami20j