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 :

comprendre le pourquoi du 2ème with, son absence déclenche une erreur [XL-2007]


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Homme Profil pro
    retraité
    Inscrit en
    Août 2013
    Messages
    55
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 75
    Localisation : France, Orne (Basse Normandie)

    Informations professionnelles :
    Activité : retraité

    Informations forums :
    Inscription : Août 2013
    Messages : 55
    Par défaut comprendre le pourquoi du 2ème with, son absence déclenche une erreur
    bonjour le forum

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    With ActiveWorkbook.Sheets(2).Sort                              'tri C & D
            .SetRange Range("B2:R" & nbL)
            .SortFields.Clear
            .SortFields.Add Key:=Range("C2:C" & nbL), SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal
            .SortFields.Add Key:=Range("D2:D" & nbL), SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal
        End With
        With ActiveWorkbook.Sheets(2).Sort                              'tri
            .SetRange Range("B2:R" & nbL)
            .Header = xlGuess
            .MatchCase = False
            .Orientation = xlTopToBottom
            .SortMethod = xlPinYin
            .Apply                                                      'erreur 1004 : référence de tri non valide en supprimant le 2ème with et setrange
        End With
    merci d'avance de satisfaire ma curiosité

  2. #2
    Membre très actif
    Homme Profil pro
    Analyste programmeur
    Inscrit en
    Mai 2014
    Messages
    393
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations professionnelles :
    Activité : Analyste programmeur
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2014
    Messages : 393
    Par défaut
    Bonjour,

    Peux-tu mettre également le code sans le 2ème with, et nous dire qu'elle est l'erreur retournée?

  3. #3
    Membre confirmé
    Homme Profil pro
    retraité
    Inscrit en
    Août 2013
    Messages
    55
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 75
    Localisation : France, Orne (Basse Normandie)

    Informations professionnelles :
    Activité : retraité

    Informations forums :
    Inscription : Août 2013
    Messages : 55
    Par défaut
    merci pour ta réponse
    voici 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
     
    With ActiveWorkbook.Sheets(2).Sort                              'tri C & D
            .SetRange Range("B2:R" & nbL)
            .SortFields.Clear
            .SortFields.Add Key:=Range("C2:C" & nbL), SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal
            .SortFields.Add Key:=Range("D2:D" & nbL), SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal
     
            .Header = xlGuess
            .MatchCase = False
            .Orientation = xlTopToBottom
            .SortMethod = xlPinYin
            .Apply                                                      'erreur 1004 : référence de tri non valide en supprimant le 1er end with, le 2ème with et le 2ème setrange
        End With
    c'est le même que le 1er, excepté les 3 lignes suivantes qui étaient insérées au niveau du saut de ligne
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
        End With
        With ActiveWorkbook.Sheets(2).Sort                              'tri
            .SetRange Range("B2:R" & nbL)
    mon 1er code fonctionne correctement, mais je voudrai comprendre l'obligation de cette redondance

  4. #4
    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
    à vu de nez, l'objet pointé par ton with est un filtre, et tu fais des actions sur ledit filtre. Sans être sur de mon coup, j'imagine que la cible ayant changé, la cible réelle de ton With change entre les 2 occurrences ou tu l'écris. Ca pointe certes vers le même objet, mais il a changé. D'ou l'utilité de pointé sur le filtre corrigé.

    (c'est juste une hypothèse, mais un objet qui est à la fois conteneur et sujet de l'action, c'est souvent dangereux - quel que soit le langage).

  5. #5
    Membre confirmé
    Homme Profil pro
    retraité
    Inscrit en
    Août 2013
    Messages
    55
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 75
    Localisation : France, Orne (Basse Normandie)

    Informations professionnelles :
    Activité : retraité

    Informations forums :
    Inscription : Août 2013
    Messages : 55
    Par défaut
    merci
    mon neurone m'incline à penser qu'effectivement c'est la bonne piste
    je vais passer en résolu
    merci à vous 3 d'avoir répondu

  6. #6
    Membre Expert Avatar de antonysansh
    Homme Profil pro
    Chargé d'études RH
    Inscrit en
    Mai 2014
    Messages
    1 115
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Chargé d'études RH
    Secteur : Finance

    Informations forums :
    Inscription : Mai 2014
    Messages : 1 115
    Par défaut
    Bonjour leronce,

    Regarde dans l'explorateur d'objet VBA (F2 dans les fenêtres VBA).

    Tu pourras voir par exemple que SetRange est un méthode de la classe Sort donc inutilisable sans être utilisée après un Sort.
    Header peut lui faire référence à plusieurs classes différentes donc tu dois obligatoirement préciser la classe concernée.

    Le With permet uniquement de ne pas réécrire ActiveWorkbook.Sheets(2).Sort à chaque ligne.

    Idem pour le reste.

  7. #7
    Membre confirmé
    Homme Profil pro
    retraité
    Inscrit en
    Août 2013
    Messages
    55
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 75
    Localisation : France, Orne (Basse Normandie)

    Informations professionnelles :
    Activité : retraité

    Informations forums :
    Inscription : Août 2013
    Messages : 55
    Par défaut
    Citation Envoyé par antonysansh Voir le message
    Bonjour leronce,

    Regarde dans l'explorateur d'objet VBA (F2 dans les fenêtres VBA).

    Tu pourras voir par exemple que SetRange est un méthode de la classe Sort donc inutilisable sans être utilisée après un Sort.
    Header peut lui faire référence à plusieurs classes différentes donc tu dois obligatoirement préciser la classe concernée.

    Le With permet uniquement de ne pas réécrire ActiveWorkbook.Sheets(2).Sort à chaque ligne.

    Idem pour le reste.
    merci pour ta réponse
    je comprend très bien tes propos, mais pourquoi la redondance est obligatoire puisque déjà déclarée en 1ère et 2 ème ligne

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

Discussions similaires

  1. J'aimerais comprendre pourquoi ça ne fonctionne pas
    Par JamesBond002 dans le forum Débuter avec Java
    Réponses: 13
    Dernier message: 28/05/2013, 15h49
  2. j'arrive pas à comprendre pourquoi !
    Par minerva dans le forum Langage SQL
    Réponses: 8
    Dernier message: 24/04/2011, 18h50
  3. Réponses: 5
    Dernier message: 28/08/2010, 13h23
  4. Programmer encore en VB 6 c'est pas bien ? Pourquoi ?
    Par Nektanebos dans le forum Débats sur le développement - Le Best Of
    Réponses: 85
    Dernier message: 10/03/2009, 14h43
  5. Réponses: 25
    Dernier message: 02/08/2008, 17h11

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