IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

OpenOffice & LibreOffice Discussion :

LibreOffice Basic - Bug de comparaison de chaînes [LibreOffice][Tableur]


Sujet :

OpenOffice & LibreOffice

  1. #1
    Membre du Club
    Étudiant
    Inscrit en
    Avril 2006
    Messages
    63
    Détails du profil
    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2006
    Messages : 63
    Points : 57
    Points
    57
    Par défaut LibreOffice Basic - Bug de comparaison de chaînes
    Bonjour,

    Je réalise une macro pour gérer mes comptes.
    Je rentre les opérations dans une feuille Opérations avec une ligne par opération, comprenant la date, le montant, le compte ou le poste de provenance, le compte ou le poste de destination. Le programme génère un identifiant unique pour chaque opératino afin de pouvoir gérer les suppressions par ailleurs.

    Ensuite, il y a un onglet par compte avec une ligne par opération, avec la date, le montant (positif ou négatif selon qu'il s'agisse d'un débit ou d'un crédit), puis le poste ou le compte de provenance/destination, et enfin le solde résultant, puis la clef de l'opération. Ces valeurs sont en fait appelées depuis la feuille opération par des formules (=Opération.K5), sauf la clef qui est écrite en dur.

    Les opérations ne sont pas toujours entrées par ordre chronologique.
    Avant tout traitement, le programme trie donc la feuille opération sur les dates, qui sont entrées en tant que chaînes de caractères avec l'année, suivie du mois, puis du jour.

    Lors de l'insertion d'une opération dans le compte, le programme se place sur la première opération de ce compte puis compare sa date à celle de l'opération à enregistrer. Si l'opération à enregistrer est postérieure, il passe à la ligne suivante jusqu'à rencontrer une ligne vide, sinon, il s'arrête et insère une nouvelle ligne.

    Le code de ce mécanisme est ici :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    sub EcritOp(a_nblignes as integer, a_compte as string, a_signe as integer, a_devers as string, a_clef as string)
    	' parcourt les dates d'opérations existantes, et insère la nouvelle opération dans l'ordre chronologique.
     
    	dim p_Ofl as object
    	dim p_date as string
    	dim p_Nblignes as integer
    	dim p_Formule as string
    	dim p_DateL as string
    	set p_ofl = odoc.sheets.getbyname(a_compte)
     
    	p_date = ofl.getCellByposition(0,a_nblignes).getformula 
             'ofl est la feuille opération, a_nblignes est le numéro de ligne de l'opération dans la feuille opération
    	p_nblignes=2
    	p_dateL = p_ofl.getcellbyposition(0,p_nblignes).getstring 
    	do while p_datel <>"" and p_date > p_datel
    		p_nblignes=p_nblignes+1
    		p_datel = p_ofl.getcellbyposition(0,p_nblignes).getstring 
    	loop
     
    	' insertion de la ligne
    	p_ofl.rows.insertbyindex(p_nblignes,1)
    	' remplissage de la date
    	p_ofl.getcellbyposition(0,p_nblignes).setformula("=" & ofl.name & ".a" & a_nblignes+1)
     
    	' remplissage du montant
    	p_formule = "=" & ofl.name & ".b" & a_nblignes+1 & "*" & a_signe
    	p_ofl.getcellbyposition(1,p_nblignes).setformula(p_formule)
     
    	' remplissage de la provenance/destination
    	p_ofl.getcellbyposition(2,p_nblignes).setformula(a_devers)	
    	' remplissage de la description
    	p_ofl.getcellbyposition(3,p_nblignes).setformula("=" & ofl.name & ".e" & a_nblignes+1)
    	' insertion d'une clef : numéro de ligne dans la feuille opération
    	p_ofl.getcellbyposition(7,p_nblignes).setformula(a_clef)
    	' insertion du calcul du solde :
    	p_formule = "=e" & p_nblignes & "+b" & p_nblignes+1
    	p_ofl.getcellbyposition(4,p_nblignes).setformula(p_formule)
     
    	' si le solde d'en dessous n'est pas vide, il faut le recalculer sur la case qu'on vient d'insérer
    	if p_ofl.getcellbyposition(4,p_nblignes+1).getformula <> "" then
    		p_formule = "=e" & p_nblignes+1 & "+b" & p_nblignes+2
    		p_ofl.getcellbyposition(4,p_nblignes+1).setformula(p_formule)
    	endif
    	ofl.getCellByposition(5,a_nblignes).setformula(a_clef) ' on inscrit la clef de l'opération dans la feuille opération
     
    end sub
    Pour vérifier si tout marche bien, je trie mes opérations par montant décroissant puis je les insère en deux fois. Lors de la deuxième fois, le programme est supposé insérer les opérations dans les onglets comptes dans l'ordre chronologique parmi celles déjà existantes.
    Or, ce n'est pas le cas, l'ordre chronologique n'est pas toujours respecté, je ne comprends pas pourquoi. Quand j'exécute le programme pasà pas sur un certain nombre d'opérations, tout se passe pourtant bien...
    Quelqu'un aurait-il une idée ?
    Je précise que toutes les cellules contenant les dates sont bien en format texte.

    Bonne fin de journée,

  2. #2
    Membre du Club
    Étudiant
    Inscrit en
    Avril 2006
    Messages
    63
    Détails du profil
    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2006
    Messages : 63
    Points : 57
    Points
    57
    Par défaut
    Bonsoir,

    Dans les feuilles de chaque compte, j'ai inscrit les dates en dur, et non plus avec une formule faisant référence à la feuille opération. ça a l'air de marcher.

    Désolé pour le dérangement.

    Bonne soirée.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [Excel-VBA] Pb de comparaison de chaîne de caractères
    Par tangjuncn dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 26/02/2007, 12h50
  2. [String] Comparaison de chaînes ?
    Par toto019 dans le forum Langage
    Réponses: 4
    Dernier message: 21/07/2006, 23h18
  3. Comparaison de chaîne (avec pourcentage ou...)
    Par yves232 dans le forum Langage
    Réponses: 4
    Dernier message: 26/04/2006, 17h23
  4. Comparaison de chaînes
    Par log2n dans le forum Assembleur
    Réponses: 12
    Dernier message: 20/02/2006, 19h21
  5. MySQL, et les comparaisons de chaînes en cyrillique, Chinois
    Par SuperCed dans le forum SQL Procédural
    Réponses: 2
    Dernier message: 15/12/2005, 15h24

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo