Eviter le select et le activate possible ? Le sujet est résolu

Y compris Power BI, Power Query et toute autre question en lien avec Excel
Répondre
Avatar du membre
muratime
Membre fidèle
Membre fidèle
Messages : 306
Appréciations reçues : 3
Inscrit le : 16 janvier 2008
Version d'Excel : 2007 FR

Message par muratime » 15 août 2019, 21:22

Bonsoir forum,

Ma question est simple y a t'il une autre solution que d'utiliser ceci ?
Range("A1").Activate
Range("A1").Select
Merci a tous
Avatar du membre
78chris
Passionné d'Excel
Passionné d'Excel
Messages : 5'536
Appréciations reçues : 416
Inscrit le : 9 juillet 2017
Version d'Excel : 2010 à 2019 + 365

Message par 78chris » 15 août 2019, 21:35

Bonjour

Dans 99% des cas on peut agir sur une cellule sans l'activer ou la sélectionner.
Chris
Quand un homme a faim, mieux vaut lui apprendre à pêcher que de lui donner un poisson.
Confucius
Avatar du membre
muratime
Membre fidèle
Membre fidèle
Messages : 306
Appréciations reçues : 3
Inscrit le : 16 janvier 2008
Version d'Excel : 2007 FR

Message par muratime » 15 août 2019, 21:37

et dans ce cas ci c'est quoi la formule de remplacement la mieux ? :mrgreen: L'idée c'est d'éviter le select.
Range("A1").Select
Avatar du membre
galopin01
Passionné d'Excel
Passionné d'Excel
Messages : 6'552
Appréciations reçues : 174
Inscrit le : 18 septembre 2008
Version d'Excel : 2016
Téléchargements : Mes applications

Message par galopin01 » 15 août 2019, 21:39

Bonjour,
Oui à éviter absoluement sauf si c'est la dernière ligne de la macro pour rendre la main à l'utilisateur et qu'il ait une vue optimale sur ta feuille.
Dans le courant de la macro, il y a différentes méthodes... Tout dépend du contexte (ce qui précède et ce qui suit...)
A+
Question portant sur VBA : Je ne répond pas si la question ne comporte pas le classeur KIVABIEN avec.
Avatar du membre
muratime
Membre fidèle
Membre fidèle
Messages : 306
Appréciations reçues : 3
Inscrit le : 16 janvier 2008
Version d'Excel : 2007 FR

Message par muratime » 15 août 2019, 21:49

Je vais mettre un exemple concret est ce que ça peu être amélioré ?
If Sheets("Feuil1").Range("E4").Value = "" Then Range("E4").Select
Avatar du membre
galopin01
Passionné d'Excel
Passionné d'Excel
Messages : 6'552
Appréciations reçues : 174
Inscrit le : 18 septembre 2008
Version d'Excel : 2016
Téléchargements : Mes applications

Message par galopin01 » 15 août 2019, 22:12

Ce n'est pas suffisant : Si c'est la dernière ligne de ta macro et que tu souhaites rendre la main sur cette cellule pour faire compléter la cellule, ben tu n'as qu'à le laisser... Mais s'il y a d'autres instruction qui suivent, il faut les citer.

De manière générale une macro est toujours tributaire du contexte : Du module dans la quelle elle est implantée (parfois même des autres modules, d'un tas d'autres paramètres...) Ne pas hésiter à fournir toute la macro.
Pour ta macro il y a des dizaines de réponses différentes possibles selon ce que tu veux faire après.
Si on veux décrire une manière courante de contourner pour faire un copier /coller par exemple
Au lieu de dire
Range("A1").Activate
Range("A1").Select
Range("A1").Copy
Range("D1").Activate
Range("D1").Select
Range("D1").Paste
on écrira :
Range("A1").Copy Range("D1")
Mais encore une fois tout dépend de la finalité de ta macro.

Il ne faut pas avoir peur de fournir la totalité d'une macro voire même tout ton classeur c'est comme ça que tu progresseras !

En gros la philosophie générale, c'est comme pour une voiture : Tu ne dis jamais je prends mon trousseau de clef je sélectionne ma clef, je l'insère dans le trou, je tourne ma clef... J'ouvre la porte est bien suffisant ! L'enregistreur de macro fonctionne différemment lui il décrit et décompose toutes tes actions en opérations élémentaires, il te faut donc ensuite garder l'essentiel pour en optimiser le code.
A+
Modifié en dernier par galopin01 le 15 août 2019, 22:23, modifié 1 fois.
Question portant sur VBA : Je ne répond pas si la question ne comporte pas le classeur KIVABIEN avec.
Avatar du membre
muratime
Membre fidèle
Membre fidèle
Messages : 306
Appréciations reçues : 3
Inscrit le : 16 janvier 2008
Version d'Excel : 2007 FR

Message par muratime » 15 août 2019, 22:18

Ok merci pour la réponse

C''est juste pour une histoire de bouton (style activex) qui clignote a chaque fois que la macro est lancé, donc j'essai de déterminer si cela vient de là.
Avatar du membre
galopin01
Passionné d'Excel
Passionné d'Excel
Messages : 6'552
Appréciations reçues : 174
Inscrit le : 18 septembre 2008
Version d'Excel : 2016
Téléchargements : Mes applications

Message par galopin01 » 15 août 2019, 22:32

Tu dégaines trop vite j'ai un peu modifiée ma réponse mais l'essentiel était dit.

Là encore c'est un peu radin comme explication, il eut été bien plus rapide de joindre le classeur.
Non ça ne vient pas de là.
Le seul inconvénient des Activate et autres Select est d'alourdir le code et de générer des pertes de telmps dans le déroulement des macros.

Je pense plutôt qu'une instrucrtion
Application.ScreenUpdating = True 
... placé au début de ta macro résoudra le problème.
Ce type de bouton possède une propriété TakeFocsOnClicK par défaut = True Tu devrais la mettre à False.

Mais il ne faut pas que ça t'empêche de chercher à optimiser ton code !

A+
Question portant sur VBA : Je ne répond pas si la question ne comporte pas le classeur KIVABIEN avec.
Répondre
  • Sujets similaires
    Réponses
    Vues
    Dernier message