Disfonctionnement d'une tempo
Bonsoir , je rencontre un petit soucis avec la temporisation de mon code
sur la partie module j'ai :
Public Sub TEMPO1()
Sheets("RESEAU").Range("B21:C100").Select
Selection.Sort Key1:=Sheets("RESEAU").Range("B21:C100"), Order1:=xlAscending, Header:=xlGuess, _
OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom
Sheets("RESEAU").Range("B21:C100").Select
Application.OnTime Now + TimeValue("00:00:20"), "TEMPO1"
End Sub
sur la partie feuille j'ai :
Private Sub Worksheet_Activate()
Application.OnTime Now + TimeValue("00:00:20"), "TEMPO1"
end sub parfois la ligne :
Sheets("RESEAU").Range("B21:C100").Selectest surlignée en jaune par le debugeur avec le message
la methode "range "a echouée , alors que le code semble etre ecrit correctement
a quoi cela est du et comment y remedier ?
cordialement
Bonsoir Rocket4,
L'erreur se produit sans doute car au moment de l'exécution de la procedure de tri, on cherche à sélectionner un range dans la feuille "RESEAU" qui n'est pas activée.
Si on reste sur la feuille RESEAU, aucune erreur ne se produit. Si on active la feuille RESEAU et si on change de feuille active, alors une erreur se produit.
On peut aussi trier sans sélectionner la feuille RESEAU:
Public Sub TEMPO1()
Sheets("RESEAU").Range("B21:C100").Sort Key1:=Sheets("RESEAU").Range("B21:C100"), Order1:=xlAscending, Header:=xlGuess, _
OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom
Application.OnTime Now + TimeValue("00:00:20"), "TEMPO1"
End Subbonsoir , merci pour cette réponse qui reflete parfaitement le comportement du code
c'est effectivement ce qui se produit lors du changement de page ,
bonne soirée
Suite...
Il y a peut-être aussi un autre Pb:
Chaque fois qu'on active la Feuille réseau, on relance Tempo1 qui se relance lui-même par la suite.En activant n fois RESEAU, on peut donc avoir n instances simultanées qui tournent en même temps. Il ne faudrait lancer le processus de tri répétitif qu'une seule fois.
bonjour ,
oui c'est effectivement vrai , le soucis et que j'ai besoin de me deplacer dans mon classeur et de revenir par fois sur la feuille reseau
j'ai adapté cette tempo au lieu d'appliquer manuellement un double clik à chaque fois pour executer le code , d'apres vous vaudrait il
mieux s'en défaire ?
une autre question me vient pour le réglage des tempo; est ce qu'on l'on doit effectuer ce réglage à la fois dans la partie feuille et la partie module ou seulement sur la partie module ?
Vous remerciant
Bonjour rocket mapoire le forum
tout simplement tu actives ta tempo à l'activation de la feuille et tu désactives au changement de feuille.
à la place du bouton début et fin de mapoire et le tour est joué.
Mais Rocket tu pourras pas dire que je ne t'ai pas prévenu avec tes clignotements et tes tempos dans tous les sens, tu auras bientôt un fichier qui sera un beau "jouet" mais pour bosser avec là cela deviendra impossible!!!!!!!!!
Tu auras bientôt droit à des plantages suivi par des pertes de données, est-ce que tu veux obtenir? pas sur.
a+
papou
il y a deja un peu de ca !!!
à revoir une autre stratégie ,
par contre pour reprendre ta proposition " ....tout simplement tu actives ta tempo à l'activation de la feuille et tu désactives au changement de feuille..." comment cela est possible ? tu veux dire en quittant la feuille , l'effet tempo s'arrete et en revenant dessus
elle s'amorce ? ...j'imagine qu'il faut ajouter la notion if..... then au code
. si j'effectue cette modif dans la partie module : est ce que ce serait correct ?
Public Sub TEMPO1()
Dim ok As Boolean
Private Sub Sheets("RESEAU").Range("B21:C100").Select_Deactivate()
If ok = True Then Exit Sub
Sheets("RESEAU").Range("B21:C100").Select
Selection.Sort Key1:=Sheets("RESEAU").Range("B21:C100"), Order1:=xlAscending, Header:=xlGuess, _
OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom
Sheets("RESEAU").Range("B21:C100").Select
Application.OnTime Now + TimeValue("00:00:20"), "TEMPO1"
ok = False
End Submerci pour toute correction
Bonjour le forum,
Il faut se méfier des actions à répétitions, on peut avoir des effets de bord quelquefois insolites (par exemple quand on veut sauvegarder l efichier ==> le fichier se ré-affiche)
Une piste: essayez d'utiliser les évènemenst 'change'.
si le tableau ne comporte que des valeurs saisies, essayez sur la feuille RESEAU:
Private Sub Worksheet_Change(ByVal Target As Range)
'Vérifie qu 'au moins une cellule de la zone de tri a été changée et si oui procède au tri
With Sheets("RESEAU")
If Not Intersect(.Range("B21:C100"), Target) Is Nothing Then
Sheets("RESEAU").Range("B21:C100").Sort Key1:=Sheets("RESEAU").Range("B21:C100"), _
Order1:=xlAscending, Header:=xlNo, OrderCustom:=1, MatchCase:=False, _
Orientation:=xlTopToBottom
End If
End With
End SubSi des valeurs du tableau dépendent de valeurs de la Feuil2, ajoutez ce code sur la feuille 2:
Private Sub Worksheet_Change(ByVal Target As Range)
With Sheets("RESEAU")
.Range("B21:C100").Sort Key1:=.Range("B21:C100"), _
Order1:=xlAscending, Header:=xlNo, OrderCustom:=1, MatchCase:=False, _
Orientation:=xlTopToBottom
End With
End SubBONJOUR
j'ai essayé d'adapter la deuxieme partie du code que vous m'avez proposé ( la les valeurs reportée sur la feuille RESEAU dépendent bien d'une autre feuille sur laquel j'ai ajouté ce complement de code et je vous en remercie ,malgré tout j'obtiens toujours le lancement de plusieurs instances de temporisation sur la feuille reseau lorsque je quitte celle ci et que je reviens dessus ce qui bien sur raccourci les delais de réactualisation .....et donne l'impression que la tempo fixée n'est plus respectée
je decouvre un phenomène sur excel
merci "Mapoire " concernant la première partie de votre code
il apparait une anomalie à cette ligne :
If Not Intersect(.Range("B21:C100"), Target) Is Nothing Then(re) Bonjour,
Voir le fichier joint.
Dans ce classeur, il n'y a plus aucune 'Tempo' programmée.
Seules subsistent deux procédures évènementielles:
- une pour la Feuille 'Reseau'.
- et une autre pour la feuille 'Feuil2'.
La cellule en rouge dépend de la cellule A1 sur 'Feuil2'.
La cellule en jaune dépend de la cellule D1 sur 'Feuil2'.
La cellule en orange dépend de la cellule jaune de la Feuille 'Reseau'.
Si on modifie à la main une valeur du tableau, le tri devrait se faire.
Si on modifie A1 ou D1 (de la 'Feuil2'), le tri devrait aussi se faire.
N.B. : le code n'est pas optimisé notamment les tests pour restreindre le tri aux seules cellules pertinentes de Feuil2 (dont le changement doit générer un tri).
Pour l'anomalie que tu cites, il faudrait en dire un peu plus ou bien joindre ton fichier.
Merci pour la peine que tu t'es donné à apporter une solution à mon probleme
je vais consulter ton fichier et essayer d'en tirer des conclusions
Cordialement
merci pour tout
ces tempos effectivement crées une pagaille sur ma feuille , des bugs à gogo , je vais prendre une sage résolution avec vos conseils
et moderer l'utilisation de ces dernières , vous m'avez bien informé sur la manière de l'utiliser et comment faire , je m'eforcer de l'utiliser
si besoin est à discretion
encor merci à "Mapoire " pour son investissement et à Paritec .... qui finalement aura eu raison de me prevenir
Re bonjour Rocket,
oui à la place des clignotements et tempos tu affiches tes cellules en rouge et si elles ne sont pas remplies tu interdis la suite de ta macro et là c'est efficace et incontournable, tu es sur que les renseignements seront bien fait, enfin de ce que je me rappelle de ton fichier
a+
papou
bonjour ,
c'est une bonne idée !!! je prend
merci à toi