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 :

Message erreur : la méthode range de l'objet_global a échoué "


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Femme Profil pro
    Contrôleur de gestion
    Inscrit en
    Mars 2012
    Messages
    18
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : Contrôleur de gestion
    Secteur : Transports

    Informations forums :
    Inscription : Mars 2012
    Messages : 18
    Par défaut Message erreur : la méthode range de l'objet_global a échoué "
    Bonjour à Tous,

    Je travaille actuellement sur la création d'une matrice budgétaire, j'en suis à la compilation des données et pour cela je souhaite utiliser une macro.

    Mais là je bloque sur un code et j'ai du mal à comprendre pourquoi le code ne fonctionne pas.

    Voici ma problématique, j'ai mon onglet CA qui contient des données dans des colonnes pour les périodes de janvier à décembre. Et je veux mettre ces données en ligne dans un autre onglet.

    Pour cela, j'ai crée des variables " colonne_cours" et "derniereColone". j'ai donc créé une boucle For afin de récupérer les données de la colonne X qui commence à partir de la la ligne 2 jusqu'à la cellule non vide de la colonne en cours.


    j'ai écrit le code : Wk_Origine.Range(Colonne_Cours & "2" & ":" & Range(Colonne_Cours & "2").End(xlDown)).Copy Wk_Destina.Range("F" & Dern_ligneEx3) mais le message suivant s'affiche " la méthode range de l'objet_global a échoué "

    Pouvez - vous m'aider en espérant que mes explications soient claires ?

    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
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
     
     
    Dim I As Variant
    Dim J As Variant
     
    Dim Dern_ligneEx1 As Integer
    Dim Dern_ligneEx2 As Integer
    Dim Dern_ligneEx3 As Integer
    Dim Wk_Origine As Worksheet
    Dim Wk_Destina As Worksheet
    Dim DerniereColonne As Long
    Dim Colonne_Cours As Long
     
     
     
    'onglet pour coller les donnŽes
    Set Wk_Destina = Worksheets("exportAccost")
     
    'onglet  exporter
    Set Wk_Origine = Worksheets("CA (2)")
     
    'suppression des donnees
    Call Supprdonn1
     
     
    'copie des lignes pour les douze mois de la plage de donnee base
    For I = 1 To 12
     
    Dern_ligneEx1 = Wk_Destina.Range("A500000").End(xlUp).Row + 1
     
    Wk_Origine.Range("Base").Copy Wk_Destina.Range("A" & Dern_ligneEx1)
     
     
    Cells(Dern_ligneEx1, 1).Select
     
    Next I
     
     
    'copie de ligne pour le compte comptable
     
    Wk_Destina.Range("E2").Select
     
    For J = 1 To 12
     
    Dern_ligneEx2 = Wk_Destina.Range("E500000").End(xlUp).Row + 1
     
    Wk_Origine.Range("Nature").Copy Wk_Destina.Range("E" & Dern_ligneEx2)
    Cells(Dern_ligneEx2, 5).Select
     
    Next J
     
    Wk_Destina.Range("F2").Select
     
     
     
    ' trouver la derniere colonne du tableau
    DerniereColonne = Wk_Origine.Cells(1, Columns.Count).End(xlToLeft).Column
     
     
    'copie de la période correspondante des lignes
     
    Dern_ligneEx3 = Wk_Destina.Range("F500000").End(xlUp).Row + 1
     
    For Colonne_Cours = 33 To DerniereColonne
     
    'code qui bloque
    Wk_Origine.Range(Colonne_Cours & "2" & ":" & Range(Colonne_Cours & "2").End(xlDown)).Copy Wk_Destina.Range("F" & Dern_ligneEx3)
     
     
    Next

  2. #2
    Rédacteur
    Avatar de Philippe Tulliez
    Homme Profil pro
    Formateur, développeur et consultant Excel, Access, Word et VBA
    Inscrit en
    Janvier 2010
    Messages
    13 171
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur, développeur et consultant Excel, Access, Word et VBA

    Informations forums :
    Inscription : Janvier 2010
    Messages : 13 171
    Billets dans le blog
    53
    Par défaut
    Bonjour,
    Sans avoir analysé le code dans son ensemble, je vois déjà un souci dans la syntaxe Range(Colonne_Cours & "2" & ":" & Range(Colonne_Cours & "2")Colonne_Cours étant une variable de type Long. En supposant que cette variable vaut 4, cela signifierait le renvoi de Range(42.42) ????

    L'utilisation de deux Cells imbriqués dans un Range serait plus adapté

    Petit exemple
    pour définir la plage B3:B8
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    Sub t()
      Dim rng As Range
      Dim sht As Worksheet
      Dim ColumnNumber As Integer
      Dim FirstRow As Long
      Dim LastRow As Long
      Set sht = ThisWorkbook.Worksheets("Feuil1")
      ColumnNumber = 2: FirstRow = 3: LastRow = 8
      With sht
       Set rng = .Range(.Cells(FirstRow, ColumnNumber), .Cells(LastRow, ColumnNumber))
      End With
      MsgBox rng.Address(External:=True)
      Set sht = Nothing: Set rng = Nothing
    End Sub
    Philippe Tulliez
    Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément. (Nicolas Boileau)
    Lorsque vous avez la réponse à votre question, n'oubliez pas de cliquer sur et si celle-ci est pertinente pensez à voter
    Mes tutoriels : Utilisation de l'assistant « Insertion de fonction », Les filtres avancés ou élaborés dans Excel
    Mon dernier billet : Utilisation de la fonction Dir en VBA pour vérifier l'existence d'un fichier

  3. #3
    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 ory14 Voir le message
    Pour cela, j'ai crée des variables " colonne_cours" et "derniereColone". j'ai donc créé une boucle For afin de récupérer les données de la colonne X qui commence à partir de la la ligne 2 jusqu'à la cellule non vide de la colonne en cours.

    j'ai écrit le code : Wk_Origine.Range(Colonne_Cours & "2" & ":" & Range(Colonne_Cours & "2").End(xlDown)).Copy Wk_Destina.Range("F" & Dern_ligneEx3) mais le message suivant s'affiche " la méthode range de l'objet_global a échoué "
    Dans un Range, la référence de colonne est une lettre.
    Pour utiliser des nombres, il faut passer par l'objet Cells.

    Sans compter que le second Range dans le Range ne pourrait pas s'écrire ainsi parce que là, tu demandes à ajouter à l'adresse (après le ":") le CONTENU du second Range.
    Il ne fallait pas mettre ":" mais mettre un séparateur de paramètre "," pour désigner ces deux éléments comme des références de cellule.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    With Wk_Origine
        .Range(.Cells(2, Colonne_Cours), .Cells(2, Colonne_Cours).End(xlDown)).Copy Wk_Destina.Range("F" & Dern_ligneEx3)
    End With
    Reste le problème que cette syntaxe ne transformera pas ta colonne en ligne.
    Pour ça, il faudrait couper ton Copy en deux lignes de code, la première étant le Copy lui-même sans destination, le second un PasteSpecial avec l'option Transpose à True.

    Lire ça : https://msdn.microsoft.com/fr-fr/lib...6(v=office.15)

  4. #4
    Membre averti
    Femme Profil pro
    Contrôleur de gestion
    Inscrit en
    Mars 2012
    Messages
    18
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : Contrôleur de gestion
    Secteur : Transports

    Informations forums :
    Inscription : Mars 2012
    Messages : 18
    Par défaut
    Bonjour,

    Merci à Menhir et Philippe pour vos retours.

    Désolé, je me suis mal exprimée mais mes données doivent être en colonne les une à la suite des autres.

    j'ai utilisé le code de Menhir et cela fonctionne. Mais là, j'ai un second problème les données ne se mettent pas à la suite des autres. Elles sont remplacées à chaque fois.

  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
    Il faut incrémenter ta variable Dern_ligneEx3 à chaque tour de boucle.

    Ou alors, simplement, inverser les ligne Dern_ligneEx3 = ... et la ligne For qui la suit pour que le renseignement de la variable soit à l'intérieur de la boucle et se remette à jour à chaque tour.

  6. #6
    Membre averti
    Femme Profil pro
    Contrôleur de gestion
    Inscrit en
    Mars 2012
    Messages
    18
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : Contrôleur de gestion
    Secteur : Transports

    Informations forums :
    Inscription : Mars 2012
    Messages : 18
    Par défaut
    Menhir merci j'ai fait la correction et tout fonctionne encore merci

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

Discussions similaires

  1. Erreur "La méthode Range de l'objet global a échoué"
    Par Antony1812 dans le forum Macros et VBA Excel
    Réponses: 6
    Dernier message: 20/03/2013, 16h57
  2. [XL-2007] erreur: "la méthode .Range de l'objet worksheet a échoué"
    Par issoram dans le forum Macros et VBA Excel
    Réponses: 22
    Dernier message: 28/10/2010, 09h08
  3. Réponses: 3
    Dernier message: 16/11/2008, 00h30
  4. Message erreur sur méthode Update dans une gridview
    Par zefog dans le forum Général Dotnet
    Réponses: 1
    Dernier message: 22/02/2008, 12h00
  5. 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

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