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' vba Excel [XL-2010]


Sujet :

Macros et VBA Excel

  1. #1
    Candidat au Club
    Homme Profil pro
    Chef de projet en SSII
    Inscrit en
    Mars 2015
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Chef de projet en SSII
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Mars 2015
    Messages : 3
    Points : 3
    Points
    3
    Par défaut erreur '1004' vba Excel
    "Bonjour"
    C'est encore une erreur '1004' : La méthode 'Range' de l'objet'_Global' a échoué. J'ai tourné en rond sur cette erreur . J'ai déjà commencer regardé plusieurs cas précédent donc je me dis que cela doit être spécifique à mon code.

    Je voudrait recopier certaine cellule d'un classeur que j'ouvre vers mon classeur principal.
    je vous pris d’être indulgent je commence à penne et mon code est surement très brouillon

    Le classeur de données est le PA-Test

    Je ne c'est plus mais il y a peut etre un MDP : ytmh52 sur la visu de macro

    "Merci"
    Images attachées Images attachées  

  2. #2
    Expert confirmé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2013
    Messages
    3 609
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

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

    Informations forums :
    Inscription : Mai 2013
    Messages : 3 609
    Points : 5 901
    Points
    5 901
    Par défaut
    Bonjour,

    Et si tu inscrivais le bout de code qui cause l'erreur en spécifiant sur quelle ligne elle survient, ça éviterait de devoir ouvrir un fichier avec macros sans savoir ce qu'elles font...

  3. #3
    Membre expérimenté
    Homme Profil pro
    Ingénieur
    Inscrit en
    Août 2010
    Messages
    667
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Août 2010
    Messages : 667
    Points : 1 432
    Points
    1 432
    Par défaut
    Bonjour,

    Si je puis me permettre et sans vouloir t'offenser, ton code pique un peu les yeux...
    Voici quelques conseils:
    - Il faut indenter si tu veux que ce soit lisible (i.e introduire des tabulations à chaque fois que tu rentres dans un While, un If, etc).
    - Utilise des noms de paramètres plus explicites (h, x, y, z... ).
    - Evite les select.
    - Liste = Liste ne sert à rien.

    Enfin, copie ton code avec les balises [CODE] plutôt qu'une copie d'écran et précise exactement ton besoin car ton code est peu lisible.

  4. #4
    Responsable
    Office & Excel


    Homme Profil pro
    Formateur et développeur chez EXCELLEZ.net
    Inscrit en
    Novembre 2003
    Messages
    19 124
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 57
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur et développeur chez EXCELLEZ.net
    Secteur : Enseignement

    Informations forums :
    Inscription : Novembre 2003
    Messages : 19 124
    Points : 55 919
    Points
    55 919
    Billets dans le blog
    131

  5. #5
    Expert confirmé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2013
    Messages
    3 609
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

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

    Informations forums :
    Inscription : Mai 2013
    Messages : 3 609
    Points : 5 901
    Points
    5 901
    Par défaut
    En début de boucle, tu écris Plage = Liste
    Mais Liste n'est pas initialisée.
    Elle est déclarée (Dim) mais aucune valeur ne lui a été donnée...

    peut-être que tu as déclaré un autre Liste en Public, alors il y a conflit entre les deux...

    Aussi
    Liste = Plage & z
    Est-ce que ce ne serait pas plutôt
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Liste = Liste & Plage & z

  6. #6
    Membre éclairé Avatar de Nico Chg
    Homme Profil pro
    Apprenti ingénieur Business Development
    Inscrit en
    Juillet 2014
    Messages
    352
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Apprenti ingénieur Business Development
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Juillet 2014
    Messages : 352
    Points : 758
    Points
    758
    Par défaut


    Bonjour,

    Juste par précaution, tu devrais préciser à quelle feuille appartient ton "range", c'est bête, mais on y pense pas assez, et beaucoup d'erreur viennent de là :
    Par défaut, si tu ne le précise pas, ton range est attaché à "ActiveSheet", qui n'est pas forcément la feuille sur laquelle tu veux travailler. Il faut plutôt écrire

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    worksheets("maFeuille").range(...)

  7. #7
    Candidat au Club
    Homme Profil pro
    Chef de projet en SSII
    Inscrit en
    Mars 2015
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Chef de projet en SSII
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Mars 2015
    Messages : 3
    Points : 3
    Points
    3
    Par défaut Précision
    Déjà merci pour tous les conseils que j'ai déjà commencer à mettre en place !!

    Bon alors comme je ne suivais pas trop les règle du forum je vais essayé de les suivre maintenant.

    Donc pour faire simple j'ai un classeur Maître ou il y a la macro. Depuis celui là je vais ouvrir un autre classeur pour récupérer des données

    Les données sont dans la colonne A de la feuille "positionnement-étude", je choisi certaines données par rapport au remplissage de la colonne L
    Et pour finir je copie colle les donné dans le Classeur Maître.

    Mon problème se situ au niveau de la sélection des données. J'ai fait des test et en faite la fonction Range ne peux avoir que 65 adresse de cellule.
    et je sais pas quoi utiliser d'autre.
    En espérant que tous ça soit plus en acore avec les règle de Développez.

    PS: ne pas utiliser ".select" mais quoi Alors ? Désolé pour ces questions qui peuvent vous paraître évidente mais j'ai commencé depuis deux semaines seulement

    Merci encore pour tous le temps que vous y consacrez



    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
        Dim Classeur_PA As Workbook
        Dim Classeur_Nom As String
        Dim CodeInsee As String
        Dim inseeNLettre As String
        Dim inseeNum As String
        Dim inseeNumTemp As String
        
            ' Réstriction du genre et nom du fichier
            Set fd = Application.FileDialog(msoFileDialogFilePicker)
            With fd
                    .Filters.Add "*", "*.xls"
                    .Title = "*"
                    .InitialFileName = "PA-*.xls"
            End With
                If fd.Show = -1 Then Nom_Fichier2 = fd.SelectedItems(1)
                Set fd = Nothing
            
        ' Ouverture du classeur base de donnée et de la feuille
        Workbooks.Open Filename:=Nom_Fichier2
        Set Classeur_PA = ActiveWorkbook
        Classeur_Nom = ActiveWorkbook.Name
        Sheets("positionnement-etude").Select
                    
                    
                    
                    
        Dim LigneD As Integer
        Dim XYcellule As String
        Dim Liste As String
        Dim Imb As Range
            
        LigneD = 5
        z = ""
        XYcéllule = ""
               
       ' création de la liste des valeurs à récupérer et en faire une liste
        While Not IsEmpty(Cells(LigneD, 1))
            
            If Cells(LigneD, 12).Value <> "" Then
              
                XYcellule = Cells(LigneD, 1).Address(0, 0) & ","
                Liste = Liste & XYcellule
                LigneD = LigneD + 1
            Else
                LigneD = LigneD + 1
            End If
        Wend
            
        Liste = Left(Liste, Len(Liste) - 1)
            
        ' Séléction de toute les valeurs à récupérer
        Sheets("positionnement-etude").Range(Liste).Activate
            
        ' Copie des valeurs
        Selection.Copy
        Application.DisplayAlerts = False

  8. #8
    Membre éclairé Avatar de Nico Chg
    Homme Profil pro
    Apprenti ingénieur Business Development
    Inscrit en
    Juillet 2014
    Messages
    352
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Apprenti ingénieur Business Development
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Juillet 2014
    Messages : 352
    Points : 758
    Points
    758
    Par défaut

    Pour les Select, que veux tu faire avec ? Exemple simple :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    Worksheets("Feuil1").Select
    Selection.range("A1") = "toto"
     
    'se transforme en 
    Worksheets("Feuil1").range("A1") = "toto"
    Plus de select !

    Mais quelle est cette sombre histoire de range avec 65 adresse de cellule ?

    Quelques remarques en vrac :
    - En VBA, on déclare toutes les variables en tête de module, c'est pas du javascript ici !
    - Lorsque l'on travail avec deux classeurs, autant déclarer deux variables Workbook, et les assigner au deux classeurs, afin de ne pas se perdre
    - Il est inutile de faire des copy/paste (bouffeur de mémoire maximum après la maladie d’Alzheimer), quand de simples égalités suffisent

  9. #9
    Expert éminent sénior 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
    Points : 31 877
    Points
    31 877
    Par défaut
    Tu construit les arguments à mettre dans Range par une boucle, mais il y a une limite à ne pas dépasser dans l'écriture Range(x1,x2.....) : 66 arguments pour XL 2010

    Pour pallier à ça, utilise une variable Range avec Union

    Exemple
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    Dim c As Range, v As Range
     
    For Each c In Feuil1.Range("A1:A1000")
        If c > 10 Then
            If v Is Nothing Then
                Set v = c
            Else
                Set v = Union(c, v)
            End If
        End If
    Next c
     
    If Not v Is Nothing Then MsgBox v.Address

  10. #10
    Candidat au Club
    Homme Profil pro
    Chef de projet en SSII
    Inscrit en
    Mars 2015
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Chef de projet en SSII
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Mars 2015
    Messages : 3
    Points : 3
    Points
    3
    Par défaut
    Merci "mercatog" je connaissais pas Union. sa ma débloqué et merci aussi "Nico chg" j'ai épuré et rendu moins lourd mon code et oui j'ai fais du C++ et java avant

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

Discussions similaires

  1. [XL-2007] erreur d'execution 1004 VBA excel
    Par leheryboriziny dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 29/11/2012, 19h24
  2. [XL-2003] Erreur '1004' : feuille excel
    Par Benjycool dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 29/04/2010, 16h27
  3. [E-07] erreur '1004' vba Excel (suite)
    Par mrah1 dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 27/02/2009, 17h48
  4. erreur '1004' vba Excel
    Par mrah1 dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 22/02/2009, 16h56
  5. erreur 1004 macro excel
    Par lerab51 dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 04/05/2007, 21h27

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