Calc : Mémoire de la pile insuffisante

Bonjour à tous,

Je viens de me lancer dans la création de Macro sur libreOffice, en Basic.

Le problème que j’ai écrit fonctionne bien, cependant au bout d’un certain temps le message " Erreur d’exécution BASIC. Mémoire de la pile insuffisante" s’affiche.
J’ai l’impression qu’il s’agit d’un problème de boucle… mais impossible de voir comment résoudre cela.

Auriez-vous une idée???

Pour info : le but de l’application est d’afficher en temps réel dans un tableau, les données provenant de fichier (.txt) se trouvant dans un dossier.

Merci d’avance pour votre retour,

Voici le code :

Sub BoucleFichiers()

dim my_doc   as object
Dim my_sheets as object
Dim my_cell as object

Dim oDoc As Object , Feuille As Object 
Dim Cellule As Object 
  
oDoc = ThisComponent 
Feuille = oDoc.getSheets.getByName("Archive")

for f=4 to 100

				Cellule3 = Feuille.getCellRangeByName("D" & f)
                        Cellule3.setString("")
                         Cellule3 = Feuille.getCellRangeByName("E" & f)
                        Cellule3.setString("")
                         Cellule3 = Feuille.getCellRangeByName("F" & f)
                         Cellule3.setString("")
                         Cellule3 = Feuille.getCellRangeByName("G" & f)
                         Cellule3.setString("")
                         Cellule3 = Feuille.getCellRangeByName("H" &f)
                        Cellule3.setString("")
                         Cellule3 = Feuille.getCellRangeByName("I" & f)
                      Cellule3.setString("")
                         Cellule3 = Feuille.getCellRangeByName("J" & f)
                      Cellule3.setString("")
                        
  next f
    
P = 4
Dim NouveauChemin As String
    Dim Chemin As String, Fichier As String
            Dim DateModifFichier As Date
          
                'ThisComponent.Sheets("Archive").Range("4:100").Clear'

    Chemin = "\\srvcegid\200\TRANS\E_vers_lavage\"
    Fichier = Dir(Chemin & "*.*")
    Do While Len(Fichier) > 0
     DateModifFichier = FileDateTime(Chemin & Fichier)
     
     Cellule = Feuille.getCellRangeByName("C" & P) 
    Cellule2 = Feuille.getCellRangeByName("D" & P) 
    
    Cellule.setString(Fichier)
    Cellule2.setString(DateModifFichier)              

      
        		Open Chemin & Fichier For Input As #1 
        		
        		 
    				  Line Input #1, Ligne 
     				 'Msgbox Ligne '
  					
    				         		
               ' Workbooks.Open (Chemin & Fichier)'
         
         
                    Dim Tableau() As String
                    Dim i As Integer
                    truc = Ligne
                    Tableau = Split(truc, ";")
                   
                    
                       
                        Cellule3 = Feuille.getCellRangeByName("E" & P)
                        Cellule3.setString(Tableau(0))
                        
                        Cellule4 = Feuille.getCellRangeByName("F" & P)
                        Cellule4.setString(Tableau(1))
                        
                        Cellule5 = Feuille.getCellRangeByName("G" & P)
                        Cellule5.setString(Tableau(2))
                        
                        Cellule6 = Feuille.getCellRangeByName("H" & P)
                        Cellule6.setString(Tableau(3))
                        
                        Cellule7 = Feuille.getCellRangeByName("I" & P)
                        Cellule7.setString(Tableau(4))
                        
                        Cellule8 = Feuille.getCellRangeByName("J" & P)
                        Cellule8.setString(Tableau(5))
                    
                
        
        Close #1
        Fichier = Dir()
        P = P + 1
    Loop
    
    boucle
    End Sub

   

sub boucle

 Wait 5000
 BoucleFichiers
end sub

Bonjour

  • Ton appel à la fonction Dir devrait être : Fichier = Dir(Chemin & "*.*", 0)
  • En fin de boucle (après loop) tu rappelles boucle qui relance BoucleFichiers indéfiniment

[Ajout 18-02-20 14:00]

S’il s’agit de mettre à jour les données régulièrement je n’utiliserais pas de macro mais FeuilleLien vers des données externes qui permet d’indiquer un délai d’actualisation. Les données obtenues peuvent être dans une feuille (éventuellement masquée) et mises en forme (équivalent de ton split) ailleurs.

Cordialement

Le problème c’est que “lien vers des données externes” ne permet pas de choisir tout un dossier… Car il peut y avoir plusieurs fichiers à traiter en même temps dans le dossier.

Par ailleurs, chaque fichier à traité à un nom unique.

Aucune autre possibilité du coup Pierre-Yves ?

bonjour,

Merci pour ton retour.

J’ai modifier la fonction dir.
Je comprends bien que cela relance BoucleFichiers indéfiniment.

Malheureusement, je ne vois pas comment faire autrement.
Le tableau doit s’afficher 24h/24, sans action d’un utilisateur.

Aurais-tu une idée ?
Est-ce que si j’ajoute une ligne, demandant au fichier de se sauvegarder tt les heures pas exemple, cela permet de vider le cash .