Aller d’un Sub sur l’étiquette d’un autre Sub
Fermé
winform
Messages postés
66
Date d'inscription
mercredi 19 septembre 2012
Statut
Membre
Dernière intervention
1 juin 2018
-
30 mai 2018 à 20:29
eriiic Messages postés 24603 Date d'inscription mardi 11 septembre 2007 Statut Contributeur Dernière intervention 15 décembre 2024 - 1 juin 2018 à 15:51
eriiic Messages postés 24603 Date d'inscription mardi 11 septembre 2007 Statut Contributeur Dernière intervention 15 décembre 2024 - 1 juin 2018 à 15:51
A voir également:
- Aller d’un Sub sur l’étiquette d’un autre Sub
- Move your sub - Télécharger - Sous-titres
- Télécharger étiquette retour freebox - Forum Freebox
- D sub gestion alim - Forum Ecran
- Étiquette retour free - Forum Freebox
- D sub out of range 67.5 khz 60hz ✓ - Forum Windows
4 réponses
gbinforme
Messages postés
14946
Date d'inscription
lundi 18 octobre 2004
Statut
Contributeur
Dernière intervention
24 juin 2020
4 713
30 mai 2018 à 21:31
30 mai 2018 à 21:31
Bonjour,
Pourquoi compliquer quand l'on peut faire simple ?
Ainsi tu n'as qu'un code qui s'exécute selon le contrôle activé : il suffit de mettre le 'elseif.
Pourquoi compliquer quand l'on peut faire simple ?
Private Sub Worksheet_SelectionChange(ByVal Target As Range) 'Etiq_1 If Not Intersect(Target, Range("CONTROLE_T")) Is Nothing Then : : 'Etiq _2 elseIf Not Intersect(Target, Range("CONTROLE_X")) Is Nothing Then : : End If End Sub
Ainsi tu n'as qu'un code qui s'exécute selon le contrôle activé : il suffit de mettre le 'elseif.
winform
Messages postés
66
Date d'inscription
mercredi 19 septembre 2012
Statut
Membre
Dernière intervention
1 juin 2018
31 mai 2018 à 10:29
31 mai 2018 à 10:29
Bonjour, merci pour la réponse. Oui c'est tt à fait juste, néanmoins j'ai omis de préciser qq chose :
Puisque ma feuille contient bcp trop de calculs, j’ai installé un bouton de bascule :
Calcul Automatique ou Calcul Manuel.
Private Sub AUT_MAN_Click()
If AUT_MAN.Value = True Then
Var_Recalcul = "Automatique"
Else
Var_Recalcul = "Manuel"
End If
End Sub
Quand Private Sub Worksheet_SelectionChange... est appelé, Var_recalcul est détecté et s’il est sur Manuel, Exit sub (dans ce cas des Boutons de contrôles individuels seront lancés, qui iront justement sur l'étiquette concernée).
S’il est sur Automatique, je laisse se dérouler le Private Sub Worksheet_SelectionChange... en fonction de If Not Intersect...
Donc, si on choisi Manuel, je voudrais aller (avec ces boutons de calcul) uniquement sur la procédure qui est concernée, sans descendre tout le Private Sub Worksheet_SelectionChange... avec ces dizaines de If Not Intersect...
Merci encore, Cdlt winform
Puisque ma feuille contient bcp trop de calculs, j’ai installé un bouton de bascule :
Calcul Automatique ou Calcul Manuel.
Private Sub AUT_MAN_Click()
If AUT_MAN.Value = True Then
Var_Recalcul = "Automatique"
Else
Var_Recalcul = "Manuel"
End If
End Sub
Quand Private Sub Worksheet_SelectionChange... est appelé, Var_recalcul est détecté et s’il est sur Manuel, Exit sub (dans ce cas des Boutons de contrôles individuels seront lancés, qui iront justement sur l'étiquette concernée).
S’il est sur Automatique, je laisse se dérouler le Private Sub Worksheet_SelectionChange... en fonction de If Not Intersect...
Donc, si on choisi Manuel, je voudrais aller (avec ces boutons de calcul) uniquement sur la procédure qui est concernée, sans descendre tout le Private Sub Worksheet_SelectionChange... avec ces dizaines de If Not Intersect...
Merci encore, Cdlt winform
gbinforme
Messages postés
14946
Date d'inscription
lundi 18 octobre 2004
Statut
Contributeur
Dernière intervention
24 juin 2020
4 713
31 mai 2018 à 12:02
31 mai 2018 à 12:02
Bonjour,
J'ai nettement l'impression que tu tiens à créer une usine à gaz sans raison.
En quoi le calcul automatique ou manuel peut intervenir ?
J'ai nettement l'impression que tu tiens à créer une usine à gaz sans raison.
En quoi le calcul automatique ou manuel peut intervenir ?
winform
Messages postés
66
Date d'inscription
mercredi 19 septembre 2012
Statut
Membre
Dernière intervention
1 juin 2018
31 mai 2018 à 14:17
31 mai 2018 à 14:17
Bonjour, ...bonne idée le gaz, le carburant commence à être trop cher!
En fait, si à chaque clic le Private Sub Worksheet_SelectionChange(ByVal Target As Range) se déclenche (et ça se déclenche) il y a énormément de contrôle dedans que j'essaye de limiter avec des dizaines de If Not Intersect(Target, Range("CONTROLE_X")) Is Nothing Then...
Je pourrais extraire ces If Not Intersect et les mettre dans des Sub déparés, mais je voudrais donner un choix (Manuel) que soit ce long contrôle via le Sub Worksheet_SelectionChange s'exécute, soit uniquement la partie demandée. Si possible. Sinon tant pis. Ce qui m'intéresserait, peut-on enter à partir d'un Sub sur une étiquette située dans un autre Sub.
Merci, cldt
En fait, si à chaque clic le Private Sub Worksheet_SelectionChange(ByVal Target As Range) se déclenche (et ça se déclenche) il y a énormément de contrôle dedans que j'essaye de limiter avec des dizaines de If Not Intersect(Target, Range("CONTROLE_X")) Is Nothing Then...
Je pourrais extraire ces If Not Intersect et les mettre dans des Sub déparés, mais je voudrais donner un choix (Manuel) que soit ce long contrôle via le Sub Worksheet_SelectionChange s'exécute, soit uniquement la partie demandée. Si possible. Sinon tant pis. Ce qui m'intéresserait, peut-on enter à partir d'un Sub sur une étiquette située dans un autre Sub.
Merci, cldt
winform
Messages postés
66
Date d'inscription
mercredi 19 septembre 2012
Statut
Membre
Dernière intervention
1 juin 2018
31 mai 2018 à 14:18
31 mai 2018 à 14:18
... même si j'ai mis des Exit sub après chaque exécution de If Not Intersect .... c'est trop long
gbinforme
Messages postés
14946
Date d'inscription
lundi 18 octobre 2004
Statut
Contributeur
Dernière intervention
24 juin 2020
4 713
31 mai 2018 à 17:23
31 mai 2018 à 17:23
Bonjour,
Tu n'as pas du tout compris le fonctionnement de If Not Intersect elseIf Not Intersect ...end if
Même si tu en as 20 cela est instantané mais il faut que ce soit bien codé et tu n'as absolument pas besoin des Exit sub qui ne servent strictement à rien car si tu exécutes le code 10 par exemple il se termine à end if end sub.
peut-on enter à partir d'un Sub sur une étiquette située dans un autre Sub.
C'est possible mais je ne te l'expliquerais pas car c'est totalement anachronique, cela date de la programmation des années 1970 lorsque la programmation objet de VBA ou autre n'existait pas.
Tu n'as pas du tout compris le fonctionnement de If Not Intersect elseIf Not Intersect ...end if
Même si tu en as 20 cela est instantané mais il faut que ce soit bien codé et tu n'as absolument pas besoin des Exit sub qui ne servent strictement à rien car si tu exécutes le code 10 par exemple il se termine à end if end sub.
peut-on enter à partir d'un Sub sur une étiquette située dans un autre Sub.
C'est possible mais je ne te l'expliquerais pas car c'est totalement anachronique, cela date de la programmation des années 1970 lorsque la programmation objet de VBA ou autre n'existait pas.
winform
Messages postés
66
Date d'inscription
mercredi 19 septembre 2012
Statut
Membre
Dernière intervention
1 juin 2018
1 juin 2018 à 09:28
1 juin 2018 à 09:28
Bonjour, OK je me rends ... effectivement après l'exécution de If Not Intersect ... puis tt de suite End sub est tt à fait logique.
Donc je ne me complique plus l'existence, merci bcp pour les éclaircissement. Par contre je vais lancer une autre question sur CCM : comment accélérer l'exécution de Private Sub Worksheet_SelectionChange(ByVal Target As Range).
Merci encore, bonne journée, cdlt winform.
Donc je ne me complique plus l'existence, merci bcp pour les éclaircissement. Par contre je vais lancer une autre question sur CCM : comment accélérer l'exécution de Private Sub Worksheet_SelectionChange(ByVal Target As Range).
Merci encore, bonne journée, cdlt winform.
eriiic
Messages postés
24603
Date d'inscription
mardi 11 septembre 2007
Statut
Contributeur
Dernière intervention
15 décembre 2024
7 249
Modifié le 31 mai 2018 à 18:34
Modifié le 31 mai 2018 à 18:34
Bonjour,
fait comme te dit gb. Les goto c'est le mal ;-)
Et tu pourrais faire l'inverse : tes traitements dans les boutons.
Et dans le Change :
eric
fait comme te dit gb. Les goto c'est le mal ;-)
Et tu pourrais faire l'inverse : tes traitements dans les boutons.
Et dans le Change :
If Not Intersect(Target, Range("CONTROLE_T")) Is Nothing Then Bouton_Calc1_Click
ElseIf ....
eric
winform
Messages postés
66
Date d'inscription
mercredi 19 septembre 2012
Statut
Membre
Dernière intervention
1 juin 2018
1 juin 2018 à 09:35
1 juin 2018 à 09:35
Bonjour, effectivement ceci est également un bonne solution, mais ces boutons existent déjà qui lancent directement un seul calcul spécifique, si je ne veux pas entrer dans Sub Worksheet_SelectionChange(ByVal Target As Range) où se trouve l'ensemble de ces calculs. Je vais plutôt m'intéresser (dans une autre question sur CCM) à l'accélération de ce Sub. Si ce n'est pas possible, j'abandonne ce Sub Worksheet_SelectionChange... et resteront uniquement ces boutons que l'on pourra lancer à volonté.
Cdlt winform
Cdlt winform
gbinforme
Messages postés
14946
Date d'inscription
lundi 18 octobre 2004
Statut
Contributeur
Dernière intervention
24 juin 2020
4 713
1 juin 2018 à 09:53
1 juin 2018 à 09:53
Bonjour,
Si tu nous mets le code de ta Sub Worksheet_SelectionChange, avec Éric que je salue, l'on est prêt à t'aider à l'accélération de ce Sub.
Si tu nous mets le code de ta Sub Worksheet_SelectionChange, avec Éric que je salue, l'on est prêt à t'aider à l'accélération de ce Sub.
eriiic
Messages postés
24603
Date d'inscription
mardi 11 septembre 2007
Statut
Contributeur
Dernière intervention
15 décembre 2024
7 249
1 juin 2018 à 12:03
1 juin 2018 à 12:03
Bonjour,
mais ces boutons existent déjà qui lancent directement un seul calcul spécifique, si je ne veux pas entrer dans Sub Worksheet_SelectionChange(ByVal Target As Range) où se trouve l'ensemble de ces calculs
oui. Et ça enlève quoi à ce que je t'ai dit ?
Les boutons font individuellement toutes les action du Change si j'ai bien compris.
Il est inutile de dupliquer le code, tu réutilises celui des boutons plutôt que que ce soit les boutons qui réutilisent celui du Change.
Et si tu veux désactiver le Change par une variable ça reste possible.
eric
mais ces boutons existent déjà qui lancent directement un seul calcul spécifique, si je ne veux pas entrer dans Sub Worksheet_SelectionChange(ByVal Target As Range) où se trouve l'ensemble de ces calculs
oui. Et ça enlève quoi à ce que je t'ai dit ?
Les boutons font individuellement toutes les action du Change si j'ai bien compris.
Il est inutile de dupliquer le code, tu réutilises celui des boutons plutôt que que ce soit les boutons qui réutilisent celui du Change.
Et si tu veux désactiver le Change par une variable ça reste possible.
eric
winform
Messages postés
66
Date d'inscription
mercredi 19 septembre 2012
Statut
Membre
Dernière intervention
1 juin 2018
1 juin 2018 à 14:34
1 juin 2018 à 14:34
Sinon :
avec cette 1ère solution* proposée (If Not Intersect(Target, Range("CONTROLE_T")) Is Nothing Then Bouton_Calc1_Click
ElseIf ....), qui me semble pas mal, je crois quand-même qu'avant d'arriver à la bonne If Not Intersect... la Worksheet_SelectionChange est testé du début jusqu'à y arriver, puis, et comme le dit gbinforme, la procédure Exit tout de suite du ce Sub et rend la main.
La question (car je vais essayer cette solution*) si je lance le BOUTON_Calc1 contenant la procédure concernée, est-ce que Sub Worksheet_SelectionChange me rend la main tt de suite (car sort vers la procédure de ce BOUTON qui va faire son travail) ou je dois attendre là aussi la fin de cette procédure, ce que causera autant de temps d'attente?
Donc j'attaque la modification ... cldt
avec cette 1ère solution* proposée (If Not Intersect(Target, Range("CONTROLE_T")) Is Nothing Then Bouton_Calc1_Click
ElseIf ....), qui me semble pas mal, je crois quand-même qu'avant d'arriver à la bonne If Not Intersect... la Worksheet_SelectionChange est testé du début jusqu'à y arriver, puis, et comme le dit gbinforme, la procédure Exit tout de suite du ce Sub et rend la main.
La question (car je vais essayer cette solution*) si je lance le BOUTON_Calc1 contenant la procédure concernée, est-ce que Sub Worksheet_SelectionChange me rend la main tt de suite (car sort vers la procédure de ce BOUTON qui va faire son travail) ou je dois attendre là aussi la fin de cette procédure, ce que causera autant de temps d'attente?
Donc j'attaque la modification ... cldt
eriiic
Messages postés
24603
Date d'inscription
mardi 11 septembre 2007
Statut
Contributeur
Dernière intervention
15 décembre 2024
7 249
1 juin 2018 à 15:51
1 juin 2018 à 15:51
Sans voir le code exact de tes procédures on ne peut que parler dans le vide.
winform
Messages postés
66
Date d'inscription
mercredi 19 septembre 2012
Statut
Membre
Dernière intervention
1 juin 2018
1 juin 2018 à 14:19
1 juin 2018 à 14:19
Bonjour, oui, avec une variable j'ai mis tt de suite au début un If variable.... Exit du Sub Worksheet_SelectionChange.
Mais en fait c'est ce Sub Worksheet_SelectionChange qui est trop long à traverser tous les If Not Intersect..., c'est à dire qu'à chaque appui n'importe où sur la feuille ça se déclenche et mouline...mouline...
Par contre, déclencher toujours des recalcules avec des boutons est aussi énervant, surtout que les cellules adjacentes utilisent immédiatement la saisie dans une autre cellule (chose que je ne peux pas toujours résoudre avec des SI(...SI(ET(... SI(ET(OU... qui rendent trop complexe la lecture de la feuille).
Merci encore cdlt
Mais en fait c'est ce Sub Worksheet_SelectionChange qui est trop long à traverser tous les If Not Intersect..., c'est à dire qu'à chaque appui n'importe où sur la feuille ça se déclenche et mouline...mouline...
Par contre, déclencher toujours des recalcules avec des boutons est aussi énervant, surtout que les cellules adjacentes utilisent immédiatement la saisie dans une autre cellule (chose que je ne peux pas toujours résoudre avec des SI(...SI(ET(... SI(ET(OU... qui rendent trop complexe la lecture de la feuille).
Merci encore cdlt
31 mai 2018 à 10:35
Private Sub Bouton_Calc1_Click()
Call Etiq_1 ’dans Private Sub Worksheet_SelectionChange(ByVal Target As Range)
End sub
Private Sub Bouton_Calc2_Click()
Call Etiq_2 ’dans Private Sub Worksheet_SelectionChange(ByVal Target As Range)
End sub
Private Sub Bouton_Calc3_Click()
Call Etiq_3 ’dans Private Sub Worksheet_SelectionChange(ByVal Target As Range)
End sub