Probleme arret application on time

bon jour a tous

j"ai besoin de cette satanée application

Application.OnTime Now + TimeValue("00:00:30"), "importer"

mais impossible de la stopper

j'ai tout essayer

Application.OnTime Now + TimeValue("00:00:30"), "importer", schedule:=false

Application.OnTime Now + TimeValue("00:00:30"), "importer", false

Application.OnTime Now + TimeValue("00:00:30"), "importer", , false

etc....

au moment d arriver sur la commande pour stopper, j ai un message d erreur d exdcution 1004

Bonjour,

C'est normal, tu ne mets pas la même heure !

Cordialement.

Bonjour à tous,

dit autrement :

t=Now + TimeValue("00:00:30")

Application.OnTime t, "importer"

stopper :

Application.OnTime t, "importer", schedule:=false

eric

merci, j ai bien compris l histoire du temps

mais malgré tout ca ne marche pas

tu clique sur depart chrono conditionnement 1, il importe les données du fichier texte (sans ça il va tourner en boucle)

puis tu stop le chrono , normalement le application on time, doit stopper, puisque la cellule A2 passe à 1

mais il va te mettre une fenetre d erreur a cause du schedule false

Bonjour,

Je n'ai pas testé, juste regardé tes macros.

Aucune déclaration de la variable t (as date).

Il faut qu'elle soit déclarée hors procédure au début d'un module standard si tu veux qu'elle ait une durée de vie projet (sinon sa valeur est perdue dès la fin de la procédure).

Comme elle est spécifique donne lui un nom plus précis et unique comme t_import.

eric

c est c e que j ai fais avant le

t=....

if a2=0

application on time t, "importer"

else

application on time t, "importer", schedule:=false

Bonjour,

La question soulevée par eriiic est où as-tu déclaré la variable t : donc tu dis où, soit dans quel module, et sous quelle forme, soit comment tu as libellé cette déclaration (et tu peux la reproduire exactement).

[Pas de la façon dont tu reproduis du code dans ton dernier post, qui s'il est écrit comme ça te ferait crouler sous les erreurs à répétition, et qui n'aide pas à diagnostiquer un problème.]

Cordialement.

Sub importer()

Set wb = ThisWorkbook

sPath = wb.Path & Application.PathSeparator

res = FileLen(wb.Path & Application.PathSeparator & "données.txt")

While res = 0

res = FileLen(wb.Path & Application.PathSeparator & "données.txt")

Wend

t = Now + TimeValue("00:00:30")

If Range("a2").Value = 0 Then

Application.ScreenUpdating = False

Sheets("données").Select

Range("B7:D7000").Select

Selection.ClearContents

Range("B7").Select

With ActiveSheet.QueryTables.Add(Connection:="TEXT;" & wb.Path & Application.PathSeparator & "données.txt", Destination:=Range("$A$7"))

.Name = "données"

.FieldNames = True

.RowNumbers = False

.FillAdjacentFormulas = False

.PreserveFormatting = True

.RefreshOnFileOpen = False

.RefreshStyle = xlInsertDeleteCells

.SavePassword = False

.SaveData = True

.AdjustColumnWidth = True

.RefreshPeriod = 0

.TextFilePromptOnRefresh = False

.TextFilePlatform = 850

.TextFileStartRow = 1

.TextFileParseType = xlDelimited

.TextFileTextQualifier = xlTextQualifierDoubleQuote

.TextFileConsecutiveDelimiter = True

.TextFileTabDelimiter = True

.TextFileSemicolonDelimiter = False

.TextFileCommaDelimiter = False

.TextFileSpaceDelimiter = True

.TextFileColumnDataTypes = Array(1, 1, 1, 1)

.TextFileTrailingMinusNumbers = True

.Refresh BackgroundQuery:=True

End With

Cells.Select

Cells.EntireColumn.AutoFit

Sheets("recap").Select

Range("B30").Select

Application.ScreenUpdating = True

Application.OnTime t, "importer"

Else

Application.OnTime t, "importer", schedule:=False

Exit Sub

End If

End Sub

Elle n'est déclarée nulle part alors !?

déclaré?

cette macro que je vous ai coller

si je la met en route, elle importe bien toute les 30 secondes, mais ne s arretera jamais, sauf quand je vais fermer le classeur

Oui ! Parce que tu n'as pas déclaré la variable en dehors de la procédure, sa valeur n'est donc pas conservée.

Il faut au moins : la déclarer au niveau module.

alors j ai essayer au debut de la feuille, j'ai ecrit T as date

et j ai un message d erreur

Ça se déclare avec une instruction de déclaration :

Dim : déclare une variable dont la portée est limitée au module (ou à la procédure si dans une procédure)

Public : déclare une variable publique dont la portée s'étend à tous le projet.

Après le nom de la variable, le mot-clé As permet de déclarer le type de données de la variable (si omis, la variable est de type Variant).

VBA comporte une Aide qui n'est pas seulement là pour faire joli !

voila ce que j ai ecrit

Sub importer()

Dim t As Date

Set wb = ThisWorkbook

sPath = wb.Path & Application.PathSeparator

res = FileLen(wb.Path & Application.PathSeparator & "données.txt")

While res = 0

res = FileLen(wb.Path & Application.PathSeparator & "données.txt")

Wend

t = Now + TimeValue("00:00:30")

If Range("a2").Value = 0 Then

Application.ScreenUpdating = False

Sheets("données").Select

Range("B7:D7000").Select

Selection.ClearContents

Range("B7").Select

With ActiveSheet.QueryTables.Add(Connection:="TEXT;" & wb.Path & Application.PathSeparator & "données.txt", Destination:=Range("$A$7"))

.Name = "données"

.FieldNames = True

.RowNumbers = False

.FillAdjacentFormulas = False

.PreserveFormatting = True

.RefreshOnFileOpen = False

.RefreshStyle = xlInsertDeleteCells

.SavePassword = False

.SaveData = True

.AdjustColumnWidth = True

.RefreshPeriod = 0

.TextFilePromptOnRefresh = False

.TextFilePlatform = 850

.TextFileStartRow = 1

.TextFileParseType = xlDelimited

.TextFileTextQualifier = xlTextQualifierDoubleQuote

.TextFileConsecutiveDelimiter = True

.TextFileTabDelimiter = True

.TextFileSemicolonDelimiter = False

.TextFileCommaDelimiter = False

.TextFileSpaceDelimiter = True

.TextFileColumnDataTypes = Array(1, 1, 1, 1)

.TextFileTrailingMinusNumbers = True

.Refresh BackgroundQuery:=True

End With

Cells.Select

Cells.EntireColumn.AutoFit

Sheets("recap").Select

Range("B30").Select

Application.ScreenUpdating = True

Application.OnTime t, "importer"

Else

Application.OnTime t, "importer", schedule:=False

Exit Sub

End If

End Sub

et voila la reponse d excel

erreur d execution 1004

la methode on time de l objet application a echoué

Si tu ne comprends pas ce qu'on te dit depuis le début... on est dans l'impasse !

C'est pourtant clair.

désolé mferrand mais je ne suis pas informaticien, donc tout ce qui est vb je tatonne et j'apprend avec mes erreurs

de plus j'ai googleliser ce probleme avant de poster, et j'ai testé les réponses, mais ça ne marche pas

j'ai bien essayer de mettre le dim de la variable avant la sub dans le module, puis dans la sub, rien n'y fait, j'ai toujours cette erreur

Comme je l'ai dit, commencer par l'Aide est toujours préférable. La lecture de l'Aide a au moins comme intérêt de familiariser avec les appellations des composants d'Excel, VBA et de tous les éléments utilisés, et l'emploi des bonnes dénominations par le demandeur facilite toujours et évite de nombreuses questions parasites. Il y a ensuite les cours des sites spécialisés fiables. Et si google peut rendre quelques services, se précipiter sur tout ce qu'on y trouve n'est sûrement pas une bonne méthode, et ne remplace pas un apprentissage méthodique.

Dim t As Date

Sub importer()
    '[instructions]
    If Range("a2").Value = 0 Then
        '[instructions]
        t = Now + TimeValue("00:00:30")
        Application.OnTime t, "importer"
    Else
        Application.OnTime t, "importer", schedule:=False
    End If
End Sub

Si ta macro était expurgée des instructions inutiles, tu y verrais sans doute plus clair en la lisant !

Je ne l'ai pas fait... J'ai réduit à ce qui était nécessaire pour comprendre : les endroits où j'ai mentionné "instructions", c'est qu'il y a du code que je n'ai pas repris (ni expurgé donc !), mais là où je ne l'ai pas mentionné c'est qu'il n'y a rien à intercaler.

Dernier conseil : lorsque tu mets du code dans un post, tu disposes d'une balise "code", tu sélectionnes le code et cliques sur la balise, le code sera plus lisible.

Cordialement.

Dim t As Date

Sub importer()
Set wb = ThisWorkbook
   sPath = wb.Path & Application.PathSeparator
res = FileLen(wb.Path & Application.PathSeparator & "données.txt")
While res = 0
res = FileLen(wb.Path & Application.PathSeparator & "données.txt")
Wend
If Range("a2").Value = 0 Then
Application.ScreenUpdating = False

    Sheets("données").Select
    Range("B7:D7000").Select
    Selection.ClearContents
    Range("B7").Select
        With ActiveSheet.QueryTables.Add(Connection:="TEXT;" & wb.Path & Application.PathSeparator & "données.txt", Destination:=Range("$A$7"))
        .Name = "données"
        .FieldNames = True
        .RowNumbers = False
        .FillAdjacentFormulas = False
        .PreserveFormatting = True
        .RefreshOnFileOpen = False
        .RefreshStyle = xlInsertDeleteCells
        .SavePassword = False
        .SaveData = True
        .AdjustColumnWidth = True
        .RefreshPeriod = 0
        .TextFilePromptOnRefresh = False
        .TextFilePlatform = 850
        .TextFileStartRow = 1
        .TextFileParseType = xlDelimited
        .TextFileTextQualifier = xlTextQualifierDoubleQuote
        .TextFileConsecutiveDelimiter = True
        .TextFileTabDelimiter = True
        .TextFileSemicolonDelimiter = False
        .TextFileCommaDelimiter = False
        .TextFileSpaceDelimiter = True
        .TextFileColumnDataTypes = Array(1, 1, 1, 1)
        .TextFileTrailingMinusNumbers = True
        .Refresh BackgroundQuery:=True
    End With
    Cells.Select
    Cells.EntireColumn.AutoFit
    Sheets("recap").Select
    Range("B30").Select
    Application.ScreenUpdating = True
    t = Now + TimeValue("00:00:30")
    Application.OnTime t, "importer"
    Else
    Application.OnTime t, "importer", schedule:=False
    Exit Sub
    End If
End Sub

désolé, effectivement je n'ai plus de message d erreur, mais la macro importer tourne toujours....

ps: je viens de mettre un test msgbox dans chaque condition, il semblerais que malgré que a2=1, il ne passe pas à la deuxieme condition

Bonsoir tous,

Tu as un serpent qui se mord la queue :

Tu appelles la macro "Importer" qui s'appelle elle-même avec

    t = Now + TimeValue("00:00:30")
    Application.OnTime t, "importer"

Et elle s'appelle elle-même lors de chaque exécution...

Pour t'en sortir, il te faut une autre procédure pour appeler "Importer"

A+

H

Evidemment, tu finis par brouiller la réflexion !

Sub importer()
    Dim t As Date
    '[instructions]
    If Range("a2").Value = 0 Then
        '[instructions]
        t = Now + TimeValue("00:00:10")
        Application.OnTime t, "importer"
    End If
End Sub

C'est ta condition qui arrête la répétition !

L'erreur 1004 vient tout simplement du fait que tu annulait une procédure OnTime qui n'avait pas été initiée,

Rechercher des sujets similaires à "probleme arret application time"