Probleme insoluble

Fermé
sql84 Messages postés 2 Date d'inscription lundi 5 novembre 2007 Statut Membre Dernière intervention 5 novembre 2007 - 5 nov. 2007 à 01:01
sql84 Messages postés 2 Date d'inscription lundi 5 novembre 2007 Statut Membre Dernière intervention 5 novembre 2007 - 5 nov. 2007 à 01:39
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

3 réponses

LutinMalicieux
5 nov. 2007 à 01:05
.
0
mamiemando Messages postés 33446 Date d'inscription jeudi 12 mai 2005 Statut Modérateur Dernière intervention 20 décembre 2024 7 812
5 nov. 2007 à 01:07
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
0
sql84 Messages postés 2 Date d'inscription lundi 5 novembre 2007 Statut Membre Dernière intervention 5 novembre 2007
5 nov. 2007 à 01:39
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
0