Probleme insoluble

bonjour a tous
voila j'ai un problème insoluble,
voila 3 jours que je suis dessus et sans résultat probant,
je me suis dit que dans la communauté de commentcamarche il y aurai bien quelqu'un qui pourrai éclairé ma lanterne
car là je sais plus quoi faire.
Voila le probleme en quelques lignes.
j'ai concocté une petite appli avec Excel et VBA
rien de très compliqué, il s'agit de mettre a jour un fichier excel depuis des form(s) vb
- Insertion d'une nouvelle valeur
- Affichage des valeurs dans un FlexGrid
- Modification de valeur
- Suppression de valeur
le probleme est que lorsque j'efface une ligne le poids de mon fichier augmente (au lieu de diminuer)
et le probleme est récurrent si bien qu'après avoir enregistrer les modifications mon fichier double a chaque fois
Ainsi pour un poids de 700 Ko au départ je me retrouve avec 2,14 Mo après avoir ajouter puis supprimer 2 valeurs
et si je continue mon fichier double encore... 4 Mo puis 8 Mo si bien qu'après quelques dizaines de manipulation mon fichier est devenu trop important pour pouvoir l'ouvrir (et là c'est le drame...) Obliger de supprimer mes form(s) d'excel est de les re-enregistrer dans le projet là et seulement là le poids du fichier revient à 700 Ko
je suis completement dépassé par cet effet je ne comprend pas ce qui peut causer un tel phénomène
si quelqu'un à la solution ou a déjà rencontrer ce problème.. please help me !
A toutes les bonnes volonté merci par avance
Configuration: Windows XP
Internet Explorer 6.0

3 réponses

  • Votes
  • Date
  • Date décroissante
  1. Modérateur
    Tout d'abord merci pour cet exposé détaillé. Par contre merci la prochaine fois de mettre un titre explicite à ton message (par exemple [VBA] la taille de mon fichier augmente sans raison")

    Je ne connais rien à VB mais j'ai déjà entendu parler de ce phénomne sur d'autres fichiers "microsoft". Je pense que tes modifications sont enregistrées dans le fichier excel au lieu d'être directement appliquées (ne me demande pas pourquoi !). En fait je me demandais si tu ne pouvais pas enregistrer tes données dans un fichier texte ordinaire (genre un tsv ou un csv) pour le réimporter ensuite éventuellement dans excel.

    Une autre solution c'est d'utiliser un autre langage de programmation (par exemple du C++ ?) et d'oublier les formats de fichiers microsoft puisque manifestement ils se comportent bizarrement...

    Bonne chance
    1. Bonsoir,
      merci de la piste
      mais je trouve que cela fait un peu usine a gaz
      je pense que ce problème est plus dut a mon incompétence qu'a un bug d'excel
      moi aussi je suis une bille en vba je m'y suis remit pour faire une petite appli à ma mère
      si cela continu je vais lui faire un truc en PHP/Mysql là j'aurai pas de problème car le C++ je suis pas assez bon... un peu comme le VBA quoi... ;-)
      enfin voila je continu a chercher un peu quand même.
      si cela peut aider ci-dessous le code de mes procedures :

      Private Sub DetruireLigne()
      DerniereLigne = ActiveSheet.UsedRange.Rows.Count
      Application.ScreenUpdating = False
      For R = DerniereLigne To 1 Step -1
      If Application.CountA(Rows(R)) = 0 Then Rows(R).Delete Shift:=xlUp
      Next R
      End Sub

      Private Sub CommandButton1_Click()
      UserForm3.Hide
      Set UserForm3 = Nothing
      Unload UserForm3
      Feuil6.Label3.Caption = vbNullString
      End Sub

      Private Sub Image2_Click()
      Dim Btns As String
      Btns = "vbYesNo + vbQuestion + vbDefaultButton1 + vbApplicationModal"
      Ok = MsgBox("êtes vous sûr de vouloir supprimer l'enregistrement N° " & MSFlexGrid1.RowSel & " ?", 4 + 32, "Confimez")
      If Ok = 6 Then
      Select Case (MSFlexGrid1.RowSel)
      Case 1 To 3
      MsgBox ("La cellule N°" & MSFlexGrid1.RowSel & " doît être conservée")
      Case Else
      Range("operations!A" & MSFlexGrid1.RowSel).Value = ""
      Call DetruireLigne
      Call UserForm_Activate
      Feuil6.Label3.Caption = "Le type d'opération a été supprimé"
      End Select
      End If
      End Sub

      Private Sub UserForm_Activate()
      Dim i As Integer
      ' Met en place la liste
      With MSFlexGrid1
      .Clear
      .FormatString = "<ID |> Libellé"
      .ColWidth(0) = 1050
      .ColWidth(1) = 2500
      End With
      ' Affiche les type d'operation
      tCpt = Range("operations!A1").End(xlDown).Row
      MSFlexGrid1.Rows = tCpt + 1
      With MSFlexGrid1.Rows = tCpt
      For i = 1 To tCpt
      MSFlexGrid1.Row = i
      MSFlexGrid1.Col = 0
      MSFlexGrid1.Text = i
      MSFlexGrid1.Row = i
      MSFlexGrid1.Col = 1
      MSFlexGrid1.Text = Range("operations!A" & i)
      If i > 1 Then
      Label1.Caption = "Actuellement " & i & " Enregistrements"
      Else
      Label1.Caption = "Actuellement " & i & " Enregistrement"
      End If
      Next i
      End With
      End Sub

      Private Sub MSFlexGrid1_DblClick()
      UserForm4.TextBox1.Text = MSFlexGrid1.TextMatrix(MSFlexGrid1.RowSel, MSFlexGrid1.ColSel)
      UserForm4.Label2.Caption = MSFlexGrid1.RowSel
      UserForm4.Show
      End Sub

      Private Sub Image1_Click()
      Call MSFlexGrid1_DblClick
      End Sub