Petite question toute bete

cs_lu6fer Messages postés 131 Date d'inscription mardi 11 mai 2004 Statut Membre Dernière intervention 21 juillet 2005 - 26 mai 2004 à 14:39
cs_CanisLupus Messages postés 3757 Date d'inscription mardi 23 septembre 2003 Statut Membre Dernière intervention 13 mars 2006 - 28 mai 2004 à 16:31
quel est la difference entre la commande end et unload me

existet-il une autre facon de quitter un prog et la quelle et la plus propre pour le systeme (dechargement de memoire....)

12 réponses

blissdumpweed Messages postés 79 Date d'inscription jeudi 15 avril 2004 Statut Membre Dernière intervention 8 juin 2004
26 mai 2004 à 14:42
End ferme totalement ton application tandis que Unload me ne ferme que la form dans laquelle tu a inséré cette ligne de code...
Pour le déchargement de mémoire je c'est pas trop mais normalement le End ferme tout, enfin je pense !
0
Renfield Messages postés 17287 Date d'inscription mercredi 2 janvier 2002 Statut Modérateur Dernière intervention 27 septembre 2021 74
26 mai 2004 à 14:45
End quitte tout le programme
Unload me décharge la Form en cours et quitte si aucune autre feuille n'est chargée...

quant a dire laquelle est la plus propre, je crois savoir que End est tout simplement a proscrire....

un boucle du genre :

Public Sub Quitter
Dim Form as Form
For Each Form In Forms
Unload Form
Next Form
End Sub

peut etre utilisée...
0
cs_lu6fer Messages postés 131 Date d'inscription mardi 11 mai 2004 Statut Membre Dernière intervention 21 juillet 2005
26 mai 2004 à 14:46
parce ke pour cette appli je doit faire une sortie propre et sans trace car elle est destiner a tourner sur un serveur donc rien derrier voila si quel qu'un pe me donner plus de precision sur se point
merci d'avance
et merci a toi blissdumpweed pour ta reponse si rapide
0
crenaud76 Messages postés 4172 Date d'inscription mercredi 30 juillet 2003 Statut Membre Dernière intervention 9 juin 2006 28
26 mai 2004 à 14:47
Je suis bien de l'avis de Renfield !!!
Le End est une grosse M _ _ _ E !!!!
Il ne garantit pas que toute la mémoire est bien libéré, etc ...
contrairement à ce qu'annonce l'aide de VB !!
donc mieux vaut faire des Unload sur toutes les forms.
La boucle proposé par Renfield est parfaite pour cela

Christophe R.
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
cs_lu6fer Messages postés 131 Date d'inscription mardi 11 mai 2004 Statut Membre Dernière intervention 21 juillet 2005
26 mai 2004 à 14:48
por quelle raison dit tu que end est a proscrire????
0
crenaud76 Messages postés 4172 Date d'inscription mercredi 30 juillet 2003 Statut Membre Dernière intervention 9 juin 2006 28
26 mai 2004 à 14:50
Il laisse parfois des choses en mémoire cet abruti

Christophe R.
0
cs_lu6fer Messages postés 131 Date d'inscription mardi 11 mai 2004 Statut Membre Dernière intervention 21 juillet 2005
26 mai 2004 à 14:51
dans mon cas je n'est qu'une seul form donc la boucle n'est pas utile
merci a vous tous
a bientot
0
cs_CanisLupus Messages postés 3757 Date d'inscription mardi 23 septembre 2003 Statut Membre Dernière intervention 13 mars 2006 20
26 mai 2004 à 22:58
Je suis ok avec tous ceux qui pense que le end c pas terrible utilisé tout seul.

Décharger chaque form est une bonne idée mais je rajouterais qu'il faut avant libérer la mémoire utilisée par les objets créés par l'appli.

Pour vraiement quitter proprement, il faut que tu libères la mémoire utilisée par les objets que tu utilises.
Les forms sont des objets, un unload n'est pas inutile.Les set db opendatabase..... et set rs db.openrecordset ... sont aussi des objets qu'il vaut mieux terminer par un close, même si soi-disant ils se ferment tous seuls à la fermeture du prog.Les autres du style set objet createobject ........ vaut mieux faire un set objet nothing.
Ca peut même aller plus loin si tu utilises des apis comme copymemory où il faut utiliser une autre api comme cotaskmemfree.............

Mais bon, il faudrait voir ton code pour mieux juger et te conseiller.

Cordialement

CanisLupus
0
cs_lu6fer Messages postés 131 Date d'inscription mardi 11 mai 2004 Statut Membre Dernière intervention 21 juillet 2005
27 mai 2004 à 09:08
Option Explicit
Dim OldWidth As Integer
Dim OldHeight As Integer
Dim trouve As Boolean
Dim ex As New Excel.Application
Dim i As Integer

Private Sub Cmd1_Click()

ex.Application.ScreenUpdating = True

ex.Worksheets("TriSuppressionDoublon").Range("B7").Sort _
key1:=ex.Worksheets("TriSuppressionDoublon").Range("B8"), _
Order1:=xlAscending, Header:=xlGuess

Set ex.MaCell = ex.eWorksheets("TriSuppressionDoublon").Range("B7")

Do While Not IsEmpty(ex.MaCell)
Set ex.MaCellSuite = ex.MaCell.Offset(1, 0)
If ex.MaCellSuite.Value = ex.MaCell.Value Then
ex.MaCell.EntireRow.Delete
End If
Set ex.MaCell = ex.MaCellSuite

Loop

ex.Sheets("TriSuppressionDoublon").Select
Range("B7:B65536").Select
Selection.Copy
ex.Sheets("Workstations with SMS Installed").Select
Range("F7:F65536").Select
ex.ActiveSheet.Paste

trouve = False

Set ex.cellule1 = ex.Worksheets("Workstations with SMS Installed").Range("A7")

Set ex.cellule2 = ex.Worksheets("Workstations with SMS Installed").Range("D7")

Set ex.cellule3 = ex.Worksheets("Workstations with SMS Installed").Range("F7")

 

'on boucle sur la colonne A, jusqu'à la première cellule vide :

While Not IsEmpty(ex.cellule1)

'on teste l'égalité des 3 cellules

'si elles sont égales, alors on va rechercher la date correspondante dans l'autre feuille
If (ex.cellule1.Value ex.cellule2.Value) And (ex.cellule2.Value ex.cellule3.Value) Then

            Set ex.celluleRecherche = ex.Worksheets("TriSuppressionDoublon").Range("B7")

            While Not IsEmpty(ex.celluleRecherche) And trouve = False

                  If ex.celluleRecherche.Value = ex.cellule1.Value Then

                        trouve = True

                        ex.cellule1.Offset(0, 2).Value = ex.celluleRecherche.Offset(0, -1).Value

                  End If

                  Set ex.celluleRecherche = ex.celluleRecherche.Offset(1, 0)

            Wend

    'sinon, on descend les cellules de F d'une ligne

    Else

    

    'on recherche la plage de données à copier

    i = 0

    While Not IsEmpty(ex.cellule3.Offset(i, 0))

        i = i + 1

    Wend

    Range("F" & ex.cellule3.Row & ":F" & ex.cellule3.Offset(i - 1, 0).Row).Select

    Selection.Copy

    ex.cellule3.Offset(1, 0).Select

    ex.ActiveSheet.Paste

    ex.cellule3.Value = ""

End If

 

Set ex.cellule1 = ex.cellule1.Offset(1, 0)

Set ex.cellule2 = ex.cellule2.Offset(1, 0)

Set ex.cellule3 = ex.cellule3.Offset(1, 0)

Wend

ex.Application.ScreenUpdating = True

End Sub

Public Sub Cmd2_Click()
Dim Form As Form
For Each Form In Forms
Unload Form
Next Form
ex.Visible = True
Set ex = Nothing
End Sub

Private Sub Cmd3_Click()
ex.Workbooks.Add
ex.Visible = True
End Sub

Private Sub Form_Load()
OldWidth = Width
OldHeight = Height
End Sub

Private Sub Form_Resize()
On Error Resume Next
Dim XCoeff As Single
Dim YCoeff As Single
Dim Controle As Control
XCoeff = Width / OldWidth
YCoeff = Height / OldHeight
For Each Controle In Me
Controle.Move Controle.Left * XCoeff, Controle.Top * YCoeff, Controle.Width * XCoeff, Controle.Height * YCoeff

Next
OldWidth = Width
OldHeight = Height
End Sub


bon voile je t mis tout le code il n'est pas complet encore mais il n'y auraat pas grand chose en +
merci et a bientot
0
cs_CanisLupus Messages postés 3757 Date d'inscription mardi 23 septembre 2003 Statut Membre Dernière intervention 13 mars 2006 20
27 mai 2004 à 20:22
Je n'ai pas pu testé ton source, il doit me manquer certains trucs. Mais, j'ai vu rapidement ton code.
Décharger la form : il n'y a pas besoin de for each form in forms ....... dans ton cas, un simple unload nom_de_ta_form ou unload me devrait suffit.
Par contre, tu te sers d'un objet excel.application et je pense que c là ton pb :

quelquepart, tu fais un workbooks.add et je ne vois nulle part un workbooks.saveas ....... si tu veux sauvegarder
ou un workbooks.saved = true si tu ne veux pas sauvegarder

Puis un workbooks.close et pour terminer surtout un
ex.quit suivi d'un set ex = nothing

Je ne sais pas si je m'explique bien alors je te donne un tit code qui résume :

Explique : ce bout de code crée un classeur, renomme 2 feuilles puis remplis qques cellules.

Option Explicit
' dans projet/références......... Microsoft Excel x.x Object Library

Private Sub Command1_Click()
Dim AppExcel As Excel.Application
Dim ClasseurExcel As Excel.Workbook
Dim FeuilleExcel As Excel.Worksheet
Dim FichierXls As String

FichierXls = "c:\toto.xls"

If Dir(FichierXls) <> "" Then Kill FichierXls

' Chargement de l'application Excel
On Error Resume Next

Set AppExcel = GetObject(, "Excel.Application") ' si obj excel déjà chargé

If Err.Number <> 0 Then
Set AppExcel = CreateObject("Excel.Application") ' sinon création
End If

Err.Clear

On Error GoTo 0

' création classeur excel + sauvegarde
AppExcel.Workbooks.Add
AppExcel.ActiveWorkbook.Sheets("Feuil1").Name = "toto1"
AppExcel.ActiveWorkbook.Sheets("Feuil2").Name = "toto2"
AppExcel.ActiveWorkbook.SaveAs FileName:=FichierXls, _
FileFormat:=xlNormal, Password:="", WriteResPassword:="", _
ReadOnlyRecommended:=False, CreateBackup:=False

AppExcel.Quit

' Réouverture du classeur Excel créé
Set ClasseurExcel = AppExcel.Workbooks.Open(FichierXls)

' remplissage de qques cellules
With ClasseurExcel.Sheets("toto1")
' le format, c cells(ligne,colonne)
.Cells(1, 1) = 100
.Cells(1, 1).Interior.ColorIndex = 43
.Cells(1, 2) = 200
.Cells(1, 3) = 300
.Cells(1, 4) = 400
.Cells(1, 5) = 500

End With

ClasseurExcel.Save
ClasseurExcel.Close
AppExcel.Quit

Set FeuilleExcel = Nothing
Set ClasseurExcel = Nothing
Set AppExcel = Nothing

End Sub

J'espère que ça t'aidera. Il y a peut-être mieux mais c surtout la fin du code qui t'intéresse si g bien compris.

Bone prog

Cordialement

CanisLupus
0
cs_lu6fer Messages postés 131 Date d'inscription mardi 11 mai 2004 Statut Membre Dernière intervention 21 juillet 2005
28 mai 2004 à 09:46
pour le pb de l'enregistrement g poser une autre question mais je n'est pas tres bien compris en fait je veu enregistre le fichier sous la forme XXXXAAAAMMJJ.xls
donc avec la date de l'enregistrement mais on ma dit quel que chose comme

SaveTo:
NomFichier = "AIRBUS-RCS-IS_" & Format(Now, "yyyy") & _
Format(Now, "mm") & Format(Now, "dd") & ".XLS"

mais je ne voi pas ou il peu etre enregistrer puisequ'il n'y a aucun emplacement de dosier ou meme juste le c:
0
cs_CanisLupus Messages postés 3757 Date d'inscription mardi 23 septembre 2003 Statut Membre Dernière intervention 13 mars 2006 20
28 mai 2004 à 16:31
Bien vu, il faut indiquer tout le chemin du dossier où tu veux sauvegarder ton fichier
ex : "c:\dossier1\dossier2\classeur.xls"
si tu mets que le nom du fichier, il devrait se sauvegarder dans le dossier où se trouve ton prog.

Ca correspond, ds le bout de code + haut à FichierXls.

Cordialement

CanisLupus
0
Rejoignez-nous