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 (et oui une autre)


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Candidat au Club
    Homme Profil pro
    Analyse système
    Inscrit en
    Décembre 2015
    Messages
    2
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 71
    Localisation : France, Aude (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Analyse système
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Décembre 2015
    Messages : 2
    Par défaut Erreur 1004 (et oui une autre)
    Bonjour

    Je suis nouveau dans le domaine du VBA et alors que je codais une macro simple l'erreur 1004 (la méthode range de l'objet Global a échoué) est apparue. J'ai fait pas mal de recherches sur cette erreur mais il semble qu'il s'agisse d'un problème différent pour chaque cas et je n'ai pas trouvé comment résoudre le mien.
    La macro est sensée tirer une valeur aléatoire dans la colonne A, et n'est pas achevée, mais sera sensée le faire aussi dans B C D E F. Ce qui compte c'est l'erreur que j'ai surligné, et que je n'arrive pas à comprendre.

    Voilà 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
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
     
    Sub Tirage_aleatoire()
    '
    ' Tirage_aleatoire Macro
    ' Macro enregistrée le 05/12/2015 par Asimonu
    '
    Sheets("Feuil1").Select
    Dim ligne As Long
    Dim nbobjets As Long
    Dim cellule As String
    Dim colone As String
    colone = "H" 'exemple
    ligne = 2 'Après le nom de la ville
    Dim ligneobjets As Long 'Ligne d'affichage de l'objet dans la liste tirée
    ligneobjets = 8 'après le nom de la ville et les nb d'objets
    Dim coloneobjets As String
    Dim objetchoisi As String
    While ligne <= 7
        cellule = "H" + Trim(Str(ligne)) 'quantité d'un objet
        nbobjets = Range(cellule).Value
        coloneobjets = "A"
        While nbobjets <> 0
            cellule = coloneobjets + Trim(Str((Range(coloneobjets + "1").Value) * Rnd() + 2)) 'objet choisi
            objetchoisi = cellule
    '-------------------------------------------------------------------------------------------------------------------------------
            Range(colone + Str(ligneobjets)) = objetchoisi 'dans la cellule de l'obj en H on met ce dernier
    '-------------------------------------------------------------------------------------------------------------------------------
            ligneobjets = ligneobjets + 1
            nbobjets = nbobjets - 1
            Wend
        ligne = ligne + 1
        ligne = ligne + 1
        Wend
    End Sub
    Merci

  2. #2
    Expert éminent


    Profil pro
    Inscrit en
    Juin 2003
    Messages
    14 008
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 14 008
    Par défaut
    Bonjour,

    déjà une chose il ne faut JAMAIS utiliser un objet Range, Cells , Columns .. sans en préciser le parent ( classeur et feuille ..)

    ensuite essai de débugger ton code pour voir si ton calcul de l'adresse que tu passe à range est bon.... à défaut de savoir utiliser le déboggage (voir le tutoriel Le débogage sous Visual Basic 6 dont les grands principes s'appliquent aussi au VBA d'Excel) ... rajoute un message box avant ta ligne ..:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    msgbox colone + Str(ligneobjets)

  3. #3
    Candidat au Club
    Homme Profil pro
    Analyse système
    Inscrit en
    Décembre 2015
    Messages
    2
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 71
    Localisation : France, Aude (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Analyse système
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Décembre 2015
    Messages : 2
    Par défaut
    Merci pour le conseil effectivement l'adresse de la cellule n'était pas correcte, il y avait un espace entre la colonne et la ligne (H 8 pour la première). Un trim a résolu le problème.

    Mais pour ce qui est de la référence à une feuille de calcul, si on ne change pas de feuille et qu'on en a sélectionné une au début, quel est l'intérêt de préciser cette feuille à chaque range ?

  4. #4
    Invité
    Invité(e)
    Par défaut
    Bonjour,
    Les mauvaises comme les bonnes marnières s'acquière avec l'habitude ! Donc si tu code en respect d'une certaine déontologie tu évitera de multiplier les problèmes!

  5. #5
    Membre chevronné
    Homme Profil pro
    Inscrit en
    Juin 2011
    Messages
    181
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2011
    Messages : 181
    Par défaut
    Bonsoir à tous, l'erreur est là :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    cellule = coloneobjets + Trim(Str((Range(coloneobjets + "1").Value) * Rnd() + 2)) 'objet choisi
    objetchoisi = cellule
    Range(colone + Str(ligneobjets)) = objetchoisi 'dans la cellule de l'obj en H on met ce dernier
    car la valeur obtenue par la fonction, Rnd() est entre 0 et 1, donc multipliée par Str((Range(coloneobjets + "1").Value auquelle on ajoute 2 donnera toujours une valeur non entière.
    ex: dès la 1ère boucle, si Range[A1]=1, cellule pourrait être égal à "A2.702359781"
    Il faut que le Rnd aléatoire soit borné ou enlevé de la partie décimale

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

Discussions similaires

  1. [XL-2002] Erreur 1004 en valorisant une cellule avec une formule
    Par ted the Ors dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 17/06/2014, 12h36
  2. [XL-2007] Erreur 1004, recherche d'une cellule dans un autre fichier excel
    Par bodd984 dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 09/08/2010, 19h12
  3. Réponses: 8
    Dernier message: 25/01/2008, 12h48
  4. Tester si une popup est ouverte si oui en ouvrir une autre
    Par Prue dans le forum Général JavaScript
    Réponses: 9
    Dernier message: 17/08/2005, 10h32

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