Petite question toute bete

Signaler
Messages postés
131
Date d'inscription
mardi 11 mai 2004
Statut
Membre
Dernière intervention
21 juillet 2005
-
Messages postés
3757
Date d'inscription
mardi 23 septembre 2003
Statut
Modérateur
Dernière intervention
13 mars 2006
-
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

Messages postés
79
Date d'inscription
jeudi 15 avril 2004
Statut
Membre
Dernière intervention
8 juin 2004

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 !
Messages postés
17288
Date d'inscription
mercredi 2 janvier 2002
Statut
Modérateur
Dernière intervention
27 septembre 2021
71
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...
Messages postés
131
Date d'inscription
mardi 11 mai 2004
Statut
Membre
Dernière intervention
21 juillet 2005

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
Messages postés
4172
Date d'inscription
mercredi 30 juillet 2003
Statut
Membre
Dernière intervention
9 juin 2006
27
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.
Messages postés
131
Date d'inscription
mardi 11 mai 2004
Statut
Membre
Dernière intervention
21 juillet 2005

por quelle raison dit tu que end est a proscrire????
Messages postés
4172
Date d'inscription
mercredi 30 juillet 2003
Statut
Membre
Dernière intervention
9 juin 2006
27
Il laisse parfois des choses en mémoire cet abruti

Christophe R.
Messages postés
131
Date d'inscription
mardi 11 mai 2004
Statut
Membre
Dernière intervention
21 juillet 2005

dans mon cas je n'est qu'une seul form donc la boucle n'est pas utile
merci a vous tous
a bientot
Messages postés
3757
Date d'inscription
mardi 23 septembre 2003
Statut
Modérateur
Dernière intervention
13 mars 2006
18
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
Messages postés
131
Date d'inscription
mardi 11 mai 2004
Statut
Membre
Dernière intervention
21 juillet 2005

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
Messages postés
3757
Date d'inscription
mardi 23 septembre 2003
Statut
Modérateur
Dernière intervention
13 mars 2006
18
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
Messages postés
131
Date d'inscription
mardi 11 mai 2004
Statut
Membre
Dernière intervention
21 juillet 2005

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:
Messages postés
3757
Date d'inscription
mardi 23 septembre 2003
Statut
Modérateur
Dernière intervention
13 mars 2006
18
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