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 '1004', la méthode 'Range' de l'objet'_Global' a échoué [XL-2010]


Sujet :

Macros et VBA Excel

  1. #1
    Membre habitué
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2019
    Messages
    2
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 25
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2019
    Messages : 2
    Par défaut Erreur '1004', la méthode 'Range' de l'objet'_Global' a échoué
    Bonjour le forum !

    Je suis actuellement en train de développer une macro qui permet de lire une valeur numérique d'une cellule. Suite à cela dans la cellule d'a coté, un texte est rentré en fonction de la valeur numérique.
    Lorsque je lance mon code j'ai la fameuse erreur 1004. J'ai cherché de nombreuses heures sur internet et essayé de nombreuses solutions mais rien ne fonctionnent.

    L'erreur survient sur la ligne Range.

    Voici la macro en question:

    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
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
     
     
    Sub nom_objet()
     
    Dim num As Integer
    Dim posY As Integer
    Dim test As Variant
    Dim verite As Variant
     
     
    Sheets("controle").Activate
     
    num = 2
    'posY correspond à la ligne de la feuille excel
    posY = 2
     
     
    Do
        'test prend la valeur numérique de la cellule
        test = Cells(posY, 2)
     
        'regarde les 4 derniers numéro de la variable test
        verite = Right(test, 4)
     
            'écrit dans la colonne à coter le texte correspondant
            If verite = "0033" Then
            Range(Cells(posY, 3)) = ("clavier")
     
            ElseIf verite = "0042" Then
            Range(Cells(posY, 3)) = ("souris")
     
            ElseIf verite = "0050" Then
            Range(Cells(posY, 3)) = ("Ecran")
     
            ElseIf verite = "0085" Then
            Range(Cells(posY, 3)) = ("PC")
     
            ElseIf verite = "0192" Then
            Range(Cells(posY, 3)) = ("Table")
     
            ElseIf verite = "0204" Then
            Range(Cells(posY, 3)) = ("Chaise")
     
            Else
            Range(Cells(posY, 3)) = ("inconnue")
     
     
            End If
     
    num = num + 1
     
    posY = posY + 1
     
    Loop While num <= 10
     
     
    End Sub
    Je suis nouveau donc si vous comprenez mal mon explication ou mon code n'hésitez pas à me le dire, j’essayerais de reformuler.
    Merci d'avance !

  2. #2
    Expert confirmé
    Avatar de MarcelG
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juillet 2009
    Messages
    3 449
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 67
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Finance

    Informations forums :
    Inscription : Juillet 2009
    Messages : 3 449
    Billets dans le blog
    7
    Par défaut
    Bonjour et bienvenu sur ce Forum,

    Bonjour au Forum.

    Sur quelle ligne de code (surlignée en jaune) survient cette erreur?

    Cette précision mise à part, quelques remarques
    - Si plusieurs conditions sont envisagées alors l'instruction Select Case rend un code plus lisible
    - Il est toujours utile de bien rattacher les objets Range à leur feuille parent.
    - Je me demande si une formulation sur toutes les lignes de 1 à 10 ne suffirait pas à ton besoin

    A te lire donc.

  3. #3
    Expert confirmé
    Homme Profil pro
    aucune
    Inscrit en
    Avril 2016
    Messages
    7 563
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 83
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : aucune

    Informations forums :
    Inscription : Avril 2016
    Messages : 7 563
    Par défaut
    Bonjour
    La notation de range est (lire ton aide interne vba) : Range(adresse) où adresse est du type (exemple) "B12:C20"
    ce que tu as écrit, à savoir
    n'a donc de sens que si la cellule Cells(posY,3) contient une chaîne de caractères représentant une adresse.

  4. #4
    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
    Bonjour

    On peut par ailleurs écrire range(cells(x,y),cells(v,w))

  5. #5
    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
    Je vais un peu retoucher ton code.
    Pas sûr que ça solutionne le problème (on ne sait jamais...) mais ça sera toujours ça de gagné.

    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
    Sub nom_objet()
    Dim posY As Long
    Sheets("controle").Activate
     
    posY = 2   'posY correspond à la ligne de la feuille excel
    Do
        Select Case Right(Cells(posY, 2).Value, 4)
        Case "0033"
            Cells(posY, 3).Value = "clavier"
        Case "0042"
            Cells(posY, 3).Value = "souris"
        Case "0050"
            Cells(posY, 3).Value = "Ecran"
        Case "0085"
            Cells(posY, 3).Value = "PC"
        Case "0192"
            Cells(posY, 3).Value = "Table"
        Case "0204"
            Cells(posY, 3).Value = "Chaise"
        Case Else
            Cells(posY, 3).Value = "inconnue"
        End Select
     
        posY = posY + 1
     
    Loop While posY <= 10
     
    End Sub
    Cela dit, à mon avis, pas besoin de VBA pour faire ça : un RECHERCHEV() ou une combinaison EQUIV()+INDEX() ferait ça plus simplement et plus dynamiquement.

  6. #6
    Membre habitué
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2019
    Messages
    2
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 25
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2019
    Messages : 2
    Par défaut
    Merci à tous pour vos propositions !
    Enfaîte mon erreur était vraiment stupide
    Il fallait juste enlever le Range de mon code
    Avant
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    Range(Cells(posY, 3)) = ("souris")
    Après
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    Cells(posY, 3) = ("souris")
    Merci aussi de m'avoir conseiller de faire un select case, mon code sera plus lisible !

    Merci encore et désolé de vous avoir embêter pour mon erreur.

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

Discussions similaires

  1. Réponses: 9
    Dernier message: 29/07/2016, 09h22
  2. [XL-MAC 2011] "Erreur d'exécution « 1004 »: La méthode « Range » de l'objet « _Global » a échoué"
    Par 123-deea dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 14/06/2016, 10h37
  3. Réponses: 3
    Dernier message: 23/04/2014, 09h25
  4. Réponses: 6
    Dernier message: 08/01/2009, 11h06
  5. 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

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