IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Macros et VBA Excel Discussion :

amelioration de code pour eviter select


Sujet :

Macros et VBA Excel

  1. #1
    Membre averti Avatar de bosk1000
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    706
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 706
    Points : 367
    Points
    367
    Par défaut amelioration de code pour eviter select
    bonjour à tous

    j'ai récement appris qu'il fallait éviter les ".select"

    donc je revois mes codes et je bute sur des boucles

    donc dans ce code
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    Dim numdl As String, i As Integer
    numdl = Range("a65536").End(xlUp).Row 'recuper le numero de la dernière ligne du tableau
          For i = 2 To numdl ' pour donner la ligne pour demarer la fonction
          Range("u" & i).Select ' pour activer la formule sur la ligne les une après les autres
          If ActiveCell.Value = "" Then ActiveCell.Value = Date ' pour mettre la date
            Next i
    est-il possible d'eviter le Range("u" & i).Select, car la condition if...then, je n'arrive pas sur une seule ligne

    j'arrive s'il faut mettre tout les lignes avec une date
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    Dim numdl As String, i As Integer
    numdl = Range("a65536").End(xlUp).Row 'recuper le numero de la dernière ligne du tableau
          For i = 2 To numdl ' pour donner la ligne pour demarer la fonction
          Range("u" & i).Value = Date  ' pour mettre la date
            Next i
    mais la condition if...then je bloque

  2. #2
    Inactif  

    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    4 555
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 4 555
    Points : 5 535
    Points
    5 535
    Par défaut
    Bonjour,

    ton
    n'est jamais rien d'autre, lorsque sélectionnée, que ta

  3. #3
    Membre émérite
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    2 130
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 2 130
    Points : 2 443
    Points
    2 443
    Par défaut
    Salut bosk1000 et le forum
    Voilà une idée qu'elle est bonne
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    Dim numdl As String, i As Long
    For i = 2 To Range("a65536").End(xlUp).Row
          If Range("u" & i) = "" Then Range("u" & i) = Date 
    Next i
    Le principe c'est de remplacer
    Cellule.select
    Selection.instruction ou Activecell.instruction
    Par Cellule.instruction.
    Ça marche aussi, en général, pour les objets. Certaines instructions ne peuvent s'exécuter que sur la page active (par exemple).
    Pour nettoyer ton code, s'il fonctionne avec des Select, tu mets les lignes .select et selection en commentaires, et tu les réécris sans. Ça te permet un retour en arrière, ce qui est utile au début. Après, avec l'habitude, tu pourras inscrire directement un code épuré.

    Juste des remarques en passant sur ton code :
    - Déclarer une variable ligne en integer ne me sembme pas adéquat : le jour où tu te retrouves avec un code qui plante peut demander beaucoup de temps avant de percuter que l'erreur vient d'une ligne supérieure à la capacité maximale de la variable. ce que tu fais d'habitude et qui fonctionne ne demande pas à être vérifié. Surtout si c'est une erreur de frappe (comme un espace en ligne 65536) et que ton nombre ne devrait pas dépasser les 100.
    - Les indentations sont là pour t'aider à visualiser où tu en es dans ton code : savoir si tu est dans une boucle, un test, etc... Je sais, ça semble débile de s'occuper de la mise en forme du code, mais quand tu as des macro de plusieurs centaines de lignes, tu sais où tu te trouves en faisant ça. Effectivement, si tu ne fais jamais d'erreur, ce n'est pas très utile, mais "Errare humanum est" et moi, je suis très humain
    A+

  4. #4
    Membre habitué
    Profil pro
    Inscrit en
    Janvier 2008
    Messages
    121
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2008
    Messages : 121
    Points : 127
    Points
    127
    Par défaut
    Le principe c'est de remplacer
    Cellule.select
    Selection.instruction ou Activecell.instruction
    Par Cellule.instruction.
    Ça marche aussi, en général, pour les objets. Certaines instructions ne peuvent s'exécuter que sur la page active (par exemple).
    Pour nettoyer ton code, s'il fonctionne avec des Select, tu mets les lignes .select et selection en commentaires, et tu les réécris sans. Ça te permet un retour en arrière, ce qui est utile au début. Après, avec l'habitude, tu pourras inscrire directement un code épuré.


    Juste des remarques en passant sur ton code :
    - Déclarer une variable ligne en integer ne me sembme pas adéquat : le jour où tu te retrouves avec un code qui plante peut demander beaucoup de temps avant de percuter que l'erreur vient d'une ligne supérieure à la capacité maximale de la variable. ce que tu fais d'habitude et qui fonctionne ne demande pas à être vérifié. Surtout si c'est une erreur de frappe (comme un espace en ligne 65536) et que ton nombre ne devrait pas dépasser les 100.
    - Les indentations sont là pour t'aider à visualiser où tu en es dans ton code : savoir si tu est dans une boucle, un test, etc... Je sais, ça semble débile de s'occuper de la mise en forme du code, mais quand tu as des macro de plusieurs centaines de lignes, tu sais où tu te trouves en faisant ça. Effectivement, si tu ne fais jamais d'erreur, ce n'est pas très utile, mais "Errare humanum est" et moi, je suis très humain
    A+
    Merci Gorfael

    Ce n'est que des bonnes idées astucieuses surtout ce que j'ai souligné en gras.

    Je sais c'est pas mon post mais j'avais envie de le dire.

  5. #5
    Membre averti Avatar de bosk1000
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    706
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 706
    Points : 367
    Points
    367
    Par défaut
    merci
    en fait mon erreur était de mal placé le if

    je vais pouvoir nettoyé un paquet de code que je faisait mal (j'ai appris comme ça avec les select, mais on évolue et ça c'est grâce au forum).

    je retient aussi pour le fait de nommer les lignes en en "long".

    un grand merci

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 0
    Dernier message: 18/03/2011, 16h10
  2. Pb de code pour l'action Select
    Par rch05 dans le forum Requêtes et SQL.
    Réponses: 4
    Dernier message: 01/08/2010, 08h39
  3. plusieurs erreurs de code pour faire 2 totaux après une selection
    Par aprentizorrrr dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 24/06/2010, 22h29
  4. [VBA-E optimisation code] ameliorer la méthode pour cacher des lignes
    Par EvaristeGaloisBis dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 07/07/2008, 09h53
  5. Réponses: 2
    Dernier message: 08/01/2007, 20h26

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo