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 :

A éviter en VBA


Sujet :

Macros et VBA Excel

  1. #1
    Membre habitué
    Inscrit en
    Février 2010
    Messages
    11
    Détails du profil
    Informations forums :
    Inscription : Février 2010
    Messages : 11
    Par défaut A éviter en VBA
    Salut les gars,
    j'essaye de faire un point sur les macros en Vba Excel et je voulais avoir votre avis par rapport au faute et méthode à éviter lors de l'écriture d'une macro.
    j'espere bien que chacun pourra écrire 2 ligne par rapport à son expérience.

    Je vous remercie infiniment pour votre aide.

  2. #2
    Membre éclairé
    Inscrit en
    Janvier 2010
    Messages
    49
    Détails du profil
    Informations forums :
    Inscription : Janvier 2010
    Messages : 49
    Par défaut
    Bonjour ,

    Commence par lire tout les tutoriels , à chaque explication ses écueils détaillés la plupart du temps.

    Bonne découverte

  3. #3
    Membre habitué
    Inscrit en
    Février 2010
    Messages
    11
    Détails du profil
    Informations forums :
    Inscription : Février 2010
    Messages : 11
    Par défaut
    j'ai déjà lu pas mal de tutoriaux mais ce que je voulais c'était plus ce que vous faites comme erreurs fréquentes lors de l'écriture de la Macro, ou bien les méthodes qui sont pas efficace que vous avez déjà utiliser et les différentes solutions...
    Ben voilà c'est ça ce que je voulais savoir par rapport à tout le monde.

    Allez y participez tous svp ça peut bien être intéressant

  4. #4
    Membre Expert Avatar de aalex_38
    Inscrit en
    Septembre 2007
    Messages
    1 631
    Détails du profil
    Informations forums :
    Inscription : Septembre 2007
    Messages : 1 631
    Par défaut
    Bonjour,

    A tous.

    Quand on utilises la recorder VBA, il y a beaucoup de select et d'activate intuiles, il est bon de les remplacer, il y a beaucoup de discussion la-dessus.

    Déclarer toutes ses variables, évite les erreurs bêtes pour cela, cocher "declarer les variables obligatoires" dans option ou bien mettre en début de module :

    Personellement quand j'utilise une variable je la définnie avec une majuscule et je tape tout ensuite en minuscule => la variable est alors reconnue et la majuscule apparait.

    De plus il faut essayé de déclarer les variables au plus proche possible, mieux vaut par exemple déclarer une chaine de cararctère en string plutot qu'en variant.

    Des sites :
    http://silkyroad.developpez.com/VBA/DebuterMacros/

    http://mhubiche.developpez.com/Access/variables/

    http://bidou.developpez.com/article/VBA/


    Edit : pour apprendre rien ne vaut l'exemple, montre par exemple un bout de code et nombreux sont ceux sur ce forum a pouvoir indiquer des optimisations.

    Edit2 : c'est d'ailleurs le conseil qui t'es donné par Zenpbb dans le post que tu as ouverts sur la recherche ici

  5. #5
    Membre habitué
    Inscrit en
    Février 2010
    Messages
    11
    Détails du profil
    Informations forums :
    Inscription : Février 2010
    Messages : 11
    Par défaut
    Merci bien pour ta réponse aalex
    par rapport au déclarations des variables j'avais un grand problèmes avec les majiscules et les miniscules pas mal d'erreurs en ça, ce qui a pu résoudre se problème était

    au début du code et ça évite ce type d'erreurs

  6. #6
    Membre Expert Avatar de aalex_38
    Inscrit en
    Septembre 2007
    Messages
    1 631
    Détails du profil
    Informations forums :
    Inscription : Septembre 2007
    Messages : 1 631
    Par défaut
    bonjour,

    On ne parle pas de la même chose, toi tu parles de comparaison de texte, mois je parle de la déclaration des variables.

    Moi je n'utilise pas cette option car il m'arrive de vouloir comparer avec la casse, sinon j'utilise UCASE ou LCASE

    Toi tu parles de ça :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    Sub essai()
    Dim s1 As String, S2 As String
    s1 = "a"
    S2 = "A"
    If s1 = S2 Then
        MsgBox "Option Compare Text"
    Else
        MsgBox "Pas Option Compare Text"
        If UCase(s1) = UCase(S2) Then
            MsgBox "egaux mais avec casse différente"
        End If
    End If
    End Sub

  7. #7
    Membre Expert Avatar de Fvandermeulen
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juillet 2007
    Messages
    1 869
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Juillet 2007
    Messages : 1 869
    Par défaut
    Salut,
    Erreur fréquente quand on défini une plage avec Cells.
    Imagine, tu lance ta macro alors que tu es sur la feuille 2 et tu définis une plage de la feuille 1
    La bonne syntaxe sera (si on ne déclare pas les feuilles en Objets)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Set MaPlage = sheets("Feuil1").range(sheets("Feuil1").cells(1,1),sheets("Feuil1").cells(3,3))
    Car
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Set MaPlage = sheets("Feuil1").range(cells(1,1),cells(3,3))
    Va induire les Cells de la feuille 2 malgré le fait qu'on indique la feuille avant le range...

    A+

  8. #8
    Membre Expert
    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
    Par défaut
    Salut pierre008 et le forum
    ce que je voulais c'était plus ce que vous faites comme erreurs fréquentes lors de l'écriture de la Macro, ou bien les méthodes qui sont pas efficace que vous avez déjà utiliser et les différentes solutions...
    Ben voilà c'est ça ce que je voulais savoir par rapport à tout le monde.
    Trop vaste sujet : tout le monde commet des erreurs.
    Pour éviter les erreurs de frappe, je rends obligatoire la déclaration des variables, je fais commencer leurs noms par une majuscule, et j'évite d'utiliser O et I, trop facilement confondus avec 0 et l (surtout en fin de journée). J'utilise le type adapté au contenu prévu, en évitant, autant que possible, les types génériques (Variant, Objet).
    Je déclare toutes mes variables en en-tête de la macro

    J'utilise les indentations, fais un code le plus lisible possible et le renseigne. Je le "segmente" et teste ces segments le plus rapidement possible.
    Pour les codes complexes, je me fais un fichier de tests, renseigné avec les limites des valeurs (juste avant, limite, juste après).

    Je lis les solutions proposés sur les forum et demande des explications, jusqu'à ce que je comprenne le fonctionnement du code.

    Mais sutout, j'utilise le morceau de fromage blanc qui me sert à maintenir l'écartement entre mes oreilles.
    Un code excellant sur un algorithme nul ne vaut pas plus qu'un code merdique sur un algo excellent

    Je fais souvent tourner une macro "à la main" avant de chercher le bon code. Ce qui fait défaut à Excel, ce n'est pas le nombre de codes différents pour aboutir à une solution. C'est les idées.

    On ne peut pas éliminer tous les risques d'erreur : c'est forcément involontaire. Mais on apprend beaucoup de ses erreurs.
    A+

  9. #9
    Membre habitué
    Inscrit en
    Février 2010
    Messages
    11
    Détails du profil
    Informations forums :
    Inscription : Février 2010
    Messages : 11
    Par défaut
    Non c'est pas ça aalex Option Compare Text tu le met juste audessus ou audessous de Option Explicite au début du module et ça permet d'écrire:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    Option Compare Text
    Sub essai()
    Dim s1 As String, s2 As String
    S1 = "a"             'même si c'est défini en majuscule audessus Option Compare 
    S2 = "A"             'Text permet davoir une équivalence entre les variables 
                            's1 et S1, s2 et S2
     
    'Donc là t'aura surement s1=s2 car a=A
     
    End Sub
    Enfin je crois que c'est ça

  10. #10
    Membre Expert Avatar de aalex_38
    Inscrit en
    Septembre 2007
    Messages
    1 631
    Détails du profil
    Informations forums :
    Inscription : Septembre 2007
    Messages : 1 631
    Par défaut
    Bonjour à tous,


    Quelle etrangeté, je me demande même comment tu as pu ecrire ton code
    en faisant Entréé tu aurai eu

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Dim s1 As String, s2 As String
    s1 = "a" 
    s2 = "A"
    et pas de majuscule.

    Apparemment tu n'as pas du tout compris ce que j'ecrivais, sans doute n'ai-je pas été assez clair.

    L'aide VBA :
    comparaison de chaînes
    Comparaison de deux séquences de caractères. Utilisez Option Compare pour choisir entre comparaison binaire et comparaison de texte. Avec le paramètre Français (France), les comparaisons binaires distinguent les majuscules des minuscules, ce qui n'est pas le cas des comparaisons de texte.

Discussions similaires

  1. [XL-2010] vba éviter les cases non vides d'un tableau
    Par patoupartout dans le forum Excel
    Réponses: 2
    Dernier message: 09/12/2013, 17h23
  2. Réponses: 8
    Dernier message: 05/03/2013, 09h49
  3. Réponses: 12
    Dernier message: 27/04/2011, 20h59
  4. [VBA-E]GetOpenFilename : éviter valeur "FAUX"
    Par repié dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 09/02/2006, 10h21
  5. problème avec VBA
    Par Delph dans le forum Langage
    Réponses: 2
    Dernier message: 19/08/2002, 13h15

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