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 :

erreur 9: With ActiveWorkbook.Worksheets().Sort


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Janvier 2014
    Messages
    32
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2014
    Messages : 32
    Par défaut erreur 9: With ActiveWorkbook.Worksheets().Sort
    Bonjour, je suis nouveau en programmation et je rencontre un problème:

    je souhaiterai, à partir d'une plage de donnée d'un tableau à 1 colonne et n ligne, créer le même tableau mais cette fois ci avec les valeurs inverser.

    1
    2
    3
    4
    5
    6
    .....
    n
    devient:
    n
    ....
    6
    5
    4
    3
    2
    1

    Voici mon 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
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    Sub cop()
     
    ' cop Macro
     
        Range("A3").Select
        Range(Selection, Selection.End(xlDown)).Select
        Selection.Copy
        Range("B3").Select
        ActiveSheet.Paste
        a = Selection.Cells.Count
        Range("H3") = a
        For i = 0 To a - 1
            Range("C" & i + 3) = i + 1
        Next
     
        Dim Maplage As Range
     
        Set Maplage = Range("B2:C" & a + 2)
        Range("C2") = "Final"
        Maplage.Select
     
        With ActiveWorkbook.Worksheets("Final").Sort
            .SetRange Maplage
            .Header = xlYes
            .MatchCase = False
            .Orientation = xlTopToBottom
            .SortMethod = xlPinYin
            .Apply
        End With
        Range("C2").Select
        Selection.Cut Destination:=Range("C1")
     
    End Sub
    Le code fonctionne jusqu'à Maplage.Select.
    Tout ce qui se trouve en dessous n'est plus effectué et la ligne de code With ActiveWorkbook.Worksheets("Final").Sort est soulignée en jaune.

    Merci de vos aides.

  2. #2
    Expert éminent Avatar de Menhir
    Homme Profil pro
    Ingénieur
    Inscrit en
    Juin 2007
    Messages
    16 037
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2007
    Messages : 16 037
    Par défaut
    Pour les cas simples (moins de 3 critères), la méthode Sort de Range est beaucoup plus simple à utiliser que la méthode Sort de Worksheet.
    Lire ceci : https://msdn.microsoft.com/fr-fr/lib...6(v=office.15)

    Un autre détail : même si l'enregistreur de macro mets des Select/Selection partout, ce n'est pas un exemple à suivre. Ca complique le code et ralenti l'exécution.
    J'ai donc aussi retouché le début de ton code.

    Dernier détail : quand tu présentes un code, utilise la balise CODE (le # dans les icones) plutôt que la balise QUOTE qui est destinée aux citations.

    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
    Sub cop()
    Dim Fin As Long, i As Long
     
    Fin = Cells(Rows.Count, "A").End(xlUp).Row
    Range("A3:A" & Fin).Copy Range("B3")
    Range("H3").Value = Fin - 2
    Range("C2").Value = "Final"
    For i = 3 To Fin
       Cells(i, "C").Value = i - 2
    Next i
     
    Range("B3:C" & Fin).Sort  key1:=Range("C3"), order1:=xlAscending, header:=xlNo
     
    Range("C2").Cut Destination:=Range("C1")
    End Sub
    Pas sûr de comprendre à quoi sert le Cut final et la ligne du Range("H3") est sans doute inutile.

  3. #3
    Membre Expert
    Femme Profil pro
    Ingénieur
    Inscrit en
    Octobre 2016
    Messages
    1 703
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 30
    Localisation : France, Indre et Loire (Centre)

    Informations professionnelles :
    Activité : Ingénieur
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2016
    Messages : 1 703
    Par défaut
    Bonjour,

    Je pense qu'il y a un problème dans la façon dont tu utilises la fonction Sort Ne serait-ce pas la plage MaPlage que tu veux trier ?
    Autre remarque : les Select / Activate / Selection et compagnie sont à éviter. Ils peuvent vite entraîner des erreurs qu'on a du mal à identifier. L'enregistreur de macro en met partout, mais c'est à nous de nettoyer derrière

    Voilà ce que me donne l'enregistreur de macro pour trier une plage (A1:A5, dans mon cas)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    ActiveWorkbook.Worksheets("Feuil1").Sort.SortFields.Clear
        ActiveWorkbook.Worksheets("Feuil1").Sort.SortFields.Add2 Key:=Range("A1"), _
            SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal
        With ActiveWorkbook.Worksheets("Feuil1").Sort
            .SetRange Range("A1:A5")
            .Header = xlNo
            .MatchCase = False
            .Orientation = xlTopToBottom
            .SortMethod = xlPinYin
            .Apply
        End With
    Il te manque la partie en rouge

    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
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    Sub cop()
     
    ' cop Macro
    Dim plageACopier As Range
     
    Set plageACopier = Range(Range("A3"), Range("A3").End(xlDown))
    plageACopier.Copy
    Range("B3").PasteSpecial
    a = plageACopier.Cells.Count
    Range("H3") = a
    For i = 0 To a - 1
         Range("C" & i + 3) = i + 1
    Next i
     
    Dim Maplage As Range
     
    Set Maplage = Range("B2:C" & a + 2)
    Range("C2") = "Final"
     
    ActiveWorkbook.Worksheets("Final").Sort.SortFields.Clear
    ActiveWorkbook.Worksheets("Final").Sort.SortFields.Add2 Key:=maPlage, SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal
     
    With ActiveWorkbook.Worksheets("Final").Sort
        .SetRange Maplage
        .Header = xlYes
        .MatchCase = False
        .Orientation = xlTopToBottom
        .SortMethod = xlPinYin
        .Apply
    End With
    Range("C2").Cut Destination:=Range("C1")
     
    End Sub
    Code non testé, à tester

  4. #4
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Janvier 2014
    Messages
    32
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2014
    Messages : 32
    Par défaut
    Bonjour, je viens d'effectuer le code envoyé mais celui là non plus ne fonctionne pas.
    L'erreur 9: l'indice n'appartient pas à la selection apparait toujours et la partie
    ActiveWorkbook.Worksheets("Final").Sort.SortFields.Clear

    apparait en jaune et dans mon tableau seule la colonne B est séléctionnée au lieu des colonnes B et C (Maplage)

    J'ai rajouté

    juste avant

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ActiveWorkbook.Worksheets("Final").Sort.SortFields.Clear
    ce qui a permis de sélectionner la plage ' Maplage' même si ça ne change rien au problème.

  5. #5
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Janvier 2014
    Messages
    32
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2014
    Messages : 32
    Par défaut
    Merci Menhir pour ta réponse, ton code fonctionne sans erreur mais ne sélectionne pas la plage à inverser ni n'inverse la plage.

  6. #6
    Expert éminent Avatar de Menhir
    Homme Profil pro
    Ingénieur
    Inscrit en
    Juin 2007
    Messages
    16 037
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2007
    Messages : 16 037
    Par défaut
    Citation Envoyé par djobadi Voir le message
    Merci Menhir pour ta réponse, ton code fonctionne sans erreur mais ne sélectionne pas la plage à inverser ni n'inverse la plage.
    Tu pourrais peut-être prendre la peine d'être actif dans la résolution de ton problème en analysant le code proposé.
    Je t'ai même donner le lien vers l'aide de cette méthode.

    Change xlAscending en xlDescending.

  7. #7
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Janvier 2014
    Messages
    32
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2014
    Messages : 32
    Par défaut
    Merci Menhir, ça a fonctionné. J'avais essayé justement en modifiant xlAscending par xlTopToBottom et non par xlDescending sans succès.

    Encore merci.

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

Discussions similaires

  1. [AC-2002] Erreur 3251 en utilisant recordset.sort
    Par jaffael dans le forum VBA Access
    Réponses: 3
    Dernier message: 20/05/2009, 20h00
  2. Réponses: 3
    Dernier message: 05/01/2009, 17h06
  3. erreur unblock with 'mysqladmin flush-hosts'
    Par yannthor dans le forum Administration
    Réponses: 0
    Dernier message: 16/05/2008, 21h16
  4. [Erreur] Compiled with a different version
    Par rickblue dans le forum Débuter
    Réponses: 4
    Dernier message: 09/05/2008, 10h55
  5. PB: Erreur bloc with
    Par stan314 dans le forum Access
    Réponses: 2
    Dernier message: 28/05/2006, 02h38

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