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 :

La méthode range de l'objet '_worksheet' a échoué


Sujet :

Macros et VBA Excel

  1. #1
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    23
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 23
    Points : 26
    Points
    26
    Par défaut La méthode range de l'objet '_worksheet' a échoué
    Bonsoir tout le monde,

    J'ai un problème que je ne comprends pas pourquoi ça bloque. J'ai pourtant fait des tests avec des sujets similaires, j'ai consulté le site msdn sur l'utilisation de match mais l'écriture de mon code me renvoie l'erreur "La méthode range de l'objet '_worksheet' a échoué" sur l'argument "Range(Colonne)".

    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
     
    Sub ValeursMinMax()
        Dim ValeurMin As Single, ValeurMax As Single
        Dim Colonne As Range, Cellule As Range
        Dim Ligne As Long
     
        Application.ScreenUpdating = False
     
        With ThisWorkbook.Worksheets("Controles")
            For Each Colonne In Range("A5:K40").Columns
                Debug.Print "Adresse de colonne : " & Colonne.Address
                ValeurMin = WorksheetFunction.Min(Range(Colonne.Address))
                Debug.Print "Valeur minimale : " & ValeurMin
                'Debug.Print "Valeurmin type : " & TypeName(ValeurMin)
                If Not IsError(Application.WorksheetFunction.Match(ValeurMin, Range(Colonne)) > 0) Then
                    'Ligne = Application.WorksheetFunction.Match(ValeurMin, Colonne, 0)
                    'Cellule = Colonne.Cells(Ligne, 1)
                    'Cellule.Select
                    'With Selection
                    '    .Interior.Color = RGB(255, 255, 0)
                    'End With
                End If
                ValeurMax = WorksheetFunction.Max(Range(Colonne.Address))
                Debug.Print "Valeur max : " & ValeurMax
            Next
        End With
     
        Application.ScreenUpdating = True
    End Sub

  2. #2
    Membre extrêmement actif
    Homme Profil pro
    aucune
    Inscrit en
    Avril 2016
    Messages
    7 563
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 82
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : aucune

    Informations forums :
    Inscription : Avril 2016
    Messages : 7 563
    Points : 12 422
    Points
    12 422
    Par défaut
    Bonjour
    A quelle feuille appartient l'objet Range invoqué dans
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     For Each Colonne In Range("A5:K40").Columns
    ?
    Si à la feuille "Controles", il devrait être précédé d'un point (.) partout où invoqué dans ton bloc with ...
    Je n'accepte pas de demande d' "amitié" individuelle. Tout développeur est pour moi un ami.
    Je n'ouvre AUCUN classeur tiers (avec ou sans macro ******). Ne m'en proposez donc pas .

    ****** : Non, non ... un classeur .xlsx ne "peut" par exemple et entre autres pas contenir un activex (de surcroît invisible) , "bien sûr" ...

    Il est illusoire de penser que l'on saurait exprimer valablement et précisément en un langage (rigide) de développement ce que l'on peine à exprimer dans le langage naturel, bien plus souple.

  3. #3
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    23
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 23
    Points : 26
    Points
    26
    Par défaut
    J'ai rajouté les . aux range() mais j'ai l'erreur 1004 "Erreur d'execution 1004 : Erreur définie par l'application ou par l'objet"

  4. #4
    Membre extrêmement actif
    Homme Profil pro
    aucune
    Inscrit en
    Avril 2016
    Messages
    7 563
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 82
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : aucune

    Informations forums :
    Inscription : Avril 2016
    Messages : 7 563
    Points : 12 422
    Points
    12 422
    Par défaut
    Mon autre nom étant Saint-Thomas, montre ton code modifié.
    Je n'accepte pas de demande d' "amitié" individuelle. Tout développeur est pour moi un ami.
    Je n'ouvre AUCUN classeur tiers (avec ou sans macro ******). Ne m'en proposez donc pas .

    ****** : Non, non ... un classeur .xlsx ne "peut" par exemple et entre autres pas contenir un activex (de surcroît invisible) , "bien sûr" ...

    Il est illusoire de penser que l'on saurait exprimer valablement et précisément en un langage (rigide) de développement ce que l'on peine à exprimer dans le langage naturel, bien plus souple.

  5. #5
    Expert éminent sénior 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
    Points : 32 866
    Points
    32 866
    Par défaut
    Citation Envoyé par jerem488 Voir le message
    J'ai un problème que je ne comprends pas pourquoi ça bloque. J'ai pourtant fait des tests avec des sujets similaires, j'ai consulté le site msdn sur l'utilisation de match mais l'écriture de mon code me renvoie l'erreur "La méthode range de l'objet '_worksheet' a échoué" sur l'argument "Range(Colonne)".
    Le Range est inutile.
    L'objet Colonne est déjà un Range en lui-même.

    De plus, Colonne, en tant que variable objet, contient sa référence complète (workbook, worksheet, etc.) transmises par les paramètre du For Each.
    En revanche, le Range qui le contient n'est relié à aucune feuille (même pas celle du With puisqu'il n'a pas de point devant) donc il est relié à l'onglet actif à cet instant.
    Si les deux ne sont pas en accord, VBA ne pourra pas comprendre cette dichotomie.

    Il y a aussi un truc bizarre dans ton code : tu mets un With qui englobe tout mais tu ne l'utilises pour aucun des objets du code.
    Merci de cliquer sur pour chaque message ayant aidé puis sur pour clore cette discussion.

  6. #6
    Expert éminent sénior
    Avatar de Marc-L
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2013
    Messages
    9 468
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2013
    Messages : 9 468
    Points : 18 677
    Points
    18 677
    Par défaut
    Bonjour,

    WorksheetFunction étant inutile et source d'erreur lorsque la fonction de feuille de calculs EQUIV renvoie une erreur,

    conserver uniquement   Application.Match   comme déjà indiqué dans de nombreuses discussions de ce forum …

    ___________________________________________________________________________________________________________
    Je suis Paris, New-York, Mogadicio, Barcelone, London, Manchester, Egypte, Stockholm, Istanbul, Berlin, Nice, Bruxelles, Charlie, …
    C'est parce que la vitesse de la lumière est plus rapide que celle du son que tant de gens paressent brillants avant d'avoir l'air con ! (Thomas Boishardy)

  7. #7
    Membre extrêmement actif
    Homme Profil pro
    aucune
    Inscrit en
    Avril 2016
    Messages
    7 563
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 82
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : aucune

    Informations forums :
    Inscription : Avril 2016
    Messages : 7 563
    Points : 12 422
    Points
    12 422
    Par défaut
    Je ne comprends pas non plus ce genre de code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    If Not IsError(Application.WorksheetFunction.Match(une_valeur,une_matrice) > 0) Then
    IsError devrait concerner quoi, là-dedans ? le résultat de Match seul et non l'ensemble match > 0
    A décomposer.
    Je n'accepte pas de demande d' "amitié" individuelle. Tout développeur est pour moi un ami.
    Je n'ouvre AUCUN classeur tiers (avec ou sans macro ******). Ne m'en proposez donc pas .

    ****** : Non, non ... un classeur .xlsx ne "peut" par exemple et entre autres pas contenir un activex (de surcroît invisible) , "bien sûr" ...

    Il est illusoire de penser que l'on saurait exprimer valablement et précisément en un langage (rigide) de développement ce que l'on peine à exprimer dans le langage naturel, bien plus souple.

  8. #8
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    23
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 23
    Points : 26
    Points
    26
    Par défaut
    Citation Envoyé par unparia Voir le message
    Mon autre nom étant Saint-Thomas, montre ton code modifié.
    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
     
    Sub ValeursMinMax()
        Dim ValeurMin As Single, ValeurMax As Single
        Dim Colonne As Range, Cellule As Range
        Dim Ligne As Long
     
        Application.ScreenUpdating = False
     
        With ThisWorkbook.Worksheets("Controles")
            For Each Colonne In .Range("A5:K40").Columns
                ValeurMin = WorksheetFunction.Min(Range(Colonne.Address))
                If Application.WorksheetFunction.Match(ValeurMin, Colonne) > 0 Then
                    Ligne = Application.WorksheetFunction.Match(ValeurMin, Colonne, 0)
                    Cellule = Colonne.Cells(Ligne, 1)
                    Cellule.Select
                    With Selection
                        .Interior.Color = RGB(255, 255, 0)
                    End With
                End If
                ValeurMax = WorksheetFunction.Max(Range(Colonne.Address))
            Next
        End With
     
        Application.ScreenUpdating = True
    End Sub

  9. #9
    Membre extrêmement actif
    Homme Profil pro
    aucune
    Inscrit en
    Avril 2016
    Messages
    7 563
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 82
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : aucune

    Informations forums :
    Inscription : Avril 2016
    Messages : 7 563
    Points : 12 422
    Points
    12 422
    Par défaut
    Toi :
    J'ai rajouté les . aux range()
    Moi :
    Mon autre nom étant Saint-Thomas
    Sans commentaires (outre la remarque qui t'a été faite à juste titre en ce qui concerne Colonne, qui est déjà un objet).

    PS : Ajoutons que ton premier message présentait un code dont certaines lignes étaient en commentaires et que je les ai donc ignorées.
    Les voilà maintenant actives avec leur propre "petit lot".
    Je n'accepte pas de demande d' "amitié" individuelle. Tout développeur est pour moi un ami.
    Je n'ouvre AUCUN classeur tiers (avec ou sans macro ******). Ne m'en proposez donc pas .

    ****** : Non, non ... un classeur .xlsx ne "peut" par exemple et entre autres pas contenir un activex (de surcroît invisible) , "bien sûr" ...

    Il est illusoire de penser que l'on saurait exprimer valablement et précisément en un langage (rigide) de développement ce que l'on peine à exprimer dans le langage naturel, bien plus souple.

  10. #10
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    23
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 23
    Points : 26
    Points
    26
    Par défaut
    Bonsoir tout le monde,

    Je tiens à partager mon code mis à jour et qui fonctionne parfaitement

    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
     
    Sub ValeursMinMax()
        Dim ValeurMin As Double, ValeurMax As Double
        Dim Colonne As Range, Cellule As Range
        Dim LigneMin As Long, LigneMax As Long
     
        Application.ScreenUpdating = False
     
        With ThisWorkbook.Worksheets("Controles")
            For Each Colonne In .Range("A5:F40").Columns
                ValeurMin = Application.WorksheetFunction.Min(Range(Colonne.Address))
                If ValeurMin <> 0 Then
                    LigneMin = Application.WorksheetFunction.Match(ValeurMin, Range(Colonne.Address), 0)
                    Colonne.Cells(LigneMin, 1).Interior.Color = RGB(255, 255, 0)
                End If
                ValeurMax = Application.WorksheetFunction.Max(Range(Colonne.Address))
                If ValeurMax <> 0 Then
                   LigneMax = Application.WorksheetFunction.Match(ValeurMax, Range(Colonne.Address), 0)
                   Colonne.Cells(LigneMax, 1).Interior.Color = RGB(76, 255, 0)
                End If
            Next
        End With
     
        Application.ScreenUpdating = True
    End Sub
    Merci

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

Discussions similaires

  1. Réponses: 3
    Dernier message: 23/04/2014, 09h25
  2. Réponses: 6
    Dernier message: 08/01/2009, 11h06
  3. Erreur 1004: La méthode "Range" de l'objet "_global" a échoué
    Par Froggy007 dans le forum Macros et VBA Excel
    Réponses: 15
    Dernier message: 18/09/2008, 23h05
  4. erreur La méthode 'Range' de l'objet '_Global' a échoué
    Par mahboub dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 17/11/2006, 20h46
  5. [VBA-E]La méthode 'Range' de l'objet '_Global' a échoué
    Par repié dans le forum Macros et VBA Excel
    Réponses: 5
    Dernier message: 22/02/2006, 16h00

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