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 :

Aide avec if [XL-2007]


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Inscrit en
    Janvier 2010
    Messages
    252
    Détails du profil
    Informations forums :
    Inscription : Janvier 2010
    Messages : 252
    Par défaut Aide avec if
    Bonjour a tous,
    Je suis tombé sur ce code qui supprime les graphiques du classeur.
    Le code marche bien mais j’ai un peu de mal a apprehender la condition
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    If wb.Charts.Count Then
    Moi j’aurais plutot mis
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     1ere Approche :If wb.Charts.Count > 0 Then ...
    Ou encore
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     2nde Approche : If CBool(wb.ChartObjects.Count) = True
    Y a t-il une correspondence/equivalence entre ces differentes ecritures ?
    Merci de me repondre.

    Le code:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    Sub Graphs_Delete()
    'But: Supprimer tous les graphiques.
     
        Dim wb As Workbook
        Set wb = Application.ThisWorkbook
     
     
        If wb.Charts.Count Then
            wb.Charts.Delete
        Else
            Debug.Print "Il n y a pas de graphs"
        End If
     
        'Ce que j'aurais utilisé est :
        '1ere approche : _
        If wb.Charts.Count > 0 Then ... _
        '2nd approche : _
        If CBool(wb.ChartObjects.Count) = True Then....
     
    End Sub

  2. #2
    Expert éminent Avatar de mercatog
    Homme Profil pro
    Inscrit en
    Juillet 2008
    Messages
    9 435
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Autre

    Informations forums :
    Inscription : Juillet 2008
    Messages : 9 435
    Par défaut
    En principe ta première approche
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    If wb.Charts.Count > 0 Then
    est la bonne (pour enlever toute ambiguïté)

    Mais, on a aussi la valeur de False est 0, la logique suivante est suivie pour expliquer l’écriture:
    Etape1:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    If wb.Charts.Count Then
    Équivalent à
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    If wb.Charts.Count=True Then
    C'est à dire:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    If wb.Charts.Count<>False Then
    Ou encore:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    If wb.Charts.Count<>0 Then
    Enfin (puisque le comptage est toujours positif)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    If wb.Charts.Count>0 Then
    La logique inverse peut être aussi suivie.

    PS: Chart désigne une feuille graphique alors que ChartObject désigne un objet graphique inséré dans une feuille qui contient le graphique lui même.

  3. #3
    Expert confirmé
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    6 814
    Détails du profil
    Informations personnelles :
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations forums :
    Inscription : Décembre 2007
    Messages : 6 814
    Par défaut
    +1. Mercatog a toujours raison.

    Ton exemple douteux se sert de la représentation binaire des données pour s'épargner de frapper 4 caractères(un espace, un supérieur, un espace, un zéro).

    Un booléen, c'est, binairement, un nombre qui peut prendre les valeurs 0 ou autre - que l'on traduit de manière abstraite par True et False. Donc, on peut s'abstenir d'écrire " > 0", si c'est ce qu'on a à tester. C'est informatiquement parfaitement juste.

    En même temps, c'est à éviter, à mon sens. Ce genre d'astuces obscurcit le code. Ta confusion est un classique, parfaitement évitable. L'écriture
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    If wb.Charts.Count Then
    est le produit d'un programmeur qui s'amuse, mais qui mélange plusieurs niveaux d'abstraction différents(le binaire, et le code VB, qui est assez haut niveau abstraction). Ce qui donne un code moins lisible.

  4. #4
    Membre éclairé
    Inscrit en
    Janvier 2010
    Messages
    252
    Détails du profil
    Informations forums :
    Inscription : Janvier 2010
    Messages : 252
    Par défaut
    grand merci mercatog et el_slapper pour vos explications on ne peut plus clair.
    Pour des apprentis progammeurs comme moi, ces astuces sont loin d'etre evidentes.
    j'ai egalemt remarque ces genres de raccourcis sont trop souvent utilisees dans la programmation ADO comme le temoigne le code ci-dessous:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
         If Not (oRS.EOF And oRS.BOF) Then         '<===ILLUSTRATION
     
                oRS.MoveLast
                oRS.MoveFirst
     
                For i = 0 To oRS.Fields.Count - 1
                      Do While Not oRS.EOF                    '<===ILLUSTRATION
                            Debug.Print oRS.Fields(i)
                            oRS.MoveNext
                      Loop
                      oRS.MoveFirst
                Next i
          Else
                MsgBox " there is no records"
          End If

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

Discussions similaires

  1. Besoin d'aide avec Regexp::Assemble
    Par mobscene dans le forum Modules
    Réponses: 5
    Dernier message: 11/04/2007, 12h39
  2. [ASA] J'ai besoin d'aide avec sybase et vb6 svp !!
    Par tibo830 dans le forum SQL Anywhere
    Réponses: 7
    Dernier message: 12/05/2006, 10h09
  3. Besoin d'aide avec TinyXML
    Par Clad3 dans le forum Bibliothèques
    Réponses: 5
    Dernier message: 15/08/2005, 18h20
  4. Réponses: 2
    Dernier message: 29/08/2003, 17h52
  5. Besoin d'aide avec postgresql sous windows NT
    Par Chihuahua dans le forum PostgreSQL
    Réponses: 3
    Dernier message: 18/07/2003, 08h29

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