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 :

Copier coller dans 2 classeurs ouverts : l'indice n'appartient pas à la selection [XL-2010]


Sujet :

Macros et VBA Excel

  1. #1
    Membre chevronné
    Profil pro
    MOA
    Inscrit en
    Décembre 2002
    Messages
    1 013
    Détails du profil
    Informations personnelles :
    Localisation : France, Eure et Loir (Centre)

    Informations professionnelles :
    Activité : MOA

    Informations forums :
    Inscription : Décembre 2002
    Messages : 1 013
    Points : 1 763
    Points
    1 763
    Par défaut Copier coller dans 2 classeurs ouverts : l'indice n'appartient pas à la selection
    Hello tout le monde,

    J'ai pour projet de me créer une macro VBA me permettant de fusionner 1 ou plusieurs fichiers Excel dans un unique fichier Excel.
    La structure est identique.

    L'algorithme n'est pas du tout optimum mais c'est un début :
    1./ j'active le classeur source
    2./ je sélectionne la première cellule B (paramétrable dans param(0, 0) ) et je fais comme si je fais Ctrl + Touche du Bas
    3./ je copie

    4./ j'active le classeur cible (paramètre fchierCible)
    5./ je sélectionne la première cellule de la colonne B (paramètrable dans param(0, 1) )
    6./ je me rends à la dernière cellule comme si je fais un Ctrl + touche du bas
    7./ je descends d'une cellule
    8./ et je colle

    Ainsi je souhaite mes données les uns à la suite de l'autre dans mon fichier cible, c'est pourquoi je fais fais toute cette manip.
    Quand le fichie cible, était le fichier courant contenant la macro, cela fonctionnait bien.

    Maintenant, je souhaiterais éviter de communiquer des fichiers avec des macros. Je souhaiterais donc que mon fichier copie des données dans un classeur ouvert et les colle dans un autre classeur cible ouvert.



    Voici ce que j'ai fait :

    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
    Sub ConcatBoucleExt()
    '
    ' CopieAutreSheet Macro
    '
     
    '
     
        'Colonne a copier
        Dim colonneSrc As String, colonneCible As String
        'Dim param(1, 2) As String
        Dim param(0, 2) As String
        Dim i As Integer
        param(0, 0) = "B" 'colonne source
        param(0, 1) = "B" 'colonne cible
        param(0, 2) = "source.xlsx" 'fichier source
     
        'param(1, 0) = "C" 'colonne source
        'param(1, 1) = "D" 'colonne cible
        'param(1, 2) = "source.xlsx" 'fichier source
     
        'param(1, 0) = "C" 'colonne source
        'param(1, 1) = "A" 'colonne cible
        'param(1, 2) = "source.xlsx" 'fichier source
     
        Dim fichierCible As String
        fichierCible = "cible.xlsx"
     
        ' Varaible objet d'un classeur
        Dim WB_Principal As Workbook
        ' Instanciation de la variable pour connaître le classeur actif
        Set WB_Principal = ActiveWorkbook
     
     
        ' on boucle jusqua la limite superieur de la dimension 1
        For i = 0 To UBound(param, 1)
     
            colonneSrc = param(i, 0)
            colonneCible = param(i, 1)
            fchierSrc = param(i, 2)
     
     
            Workbooks(fchierSrc).Activate
            Sheets("Sheet1").Select
     
            ' calcul du nombre de ligne à copier en se basant la premiere colonne
            Dim nbLigne As Integer
            nbLigne = Range("A" & Rows.Count).End(xlUp).Row
            ' on selectionne la colonne a copier
            Range(colonneSrc & "1", colonneSrc & nbLigne).Select
            Selection.Copy
     
            ' on reactive le classeur par defaut
             ' AVEC le classeur courant cela marche
             '   WB_Principal.Activate
     
            ' mais avec le classeur DISTANT, non
                Workbooks(fchierCible).Activate
     
     
            'on la colle dans le classeur
             Workbooks(fchierCible).Sheets("Sheet1").Select
            ' mais pas sur la premiere ligne, on va a la derniere
            Range(colonneCible & "1").End(xlDown).Select
            ' et on se positionne a la ligne suivante pour coller
            'ActiveCell.Offset(1, 0).Select
            ActiveSheet.Paste
        Next
    End Sub


    Malheureusement j'ai à chaque fois l'erreur :
    Erreur d'execution '9'
    "L'indice n'appartient pas à la section"


    Lorsque je clique sur Debuggage, je tombe sur la ligne de sourligné avec : Workbooks(fchierCible).Activate

    J’espère avoir été suffisamment claire parce que ce n'est pas souvent aidé de comprendre les différents problèmes.

  2. #2
    Expert confirmé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2013
    Messages
    3 617
    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 617
    Points : 5 912
    Points
    5 912
    Par défaut
    Bonjour,

    Es-tu certain que le fichier cible.xlsx est bien ouvert ?
    MPi²

  3. #3
    Expert éminent

    Homme Profil pro
    Curieux
    Inscrit en
    Juillet 2012
    Messages
    5 073
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Curieux
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Juillet 2012
    Messages : 5 073
    Points : 9 853
    Points
    9 853
    Billets dans le blog
    5
    Par défaut
    Bonjour,

    moi je suis certain que ta variable utilisée dans l'activation du classeur est une chaine vide.

    pourquoi ?

    voici ta déclaration de variable et son affectation de valeur
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Dim fichierCible As String
    fichierCible = "cible.xlsx"
    et ton utilisation
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Workbooks(fchierCible).Activate
    Workbooks(fchierCible).Sheets("Sheet1").Select

    tu vois le problème ?

    Indice : ne pas mettre les "point" sur les "i", c'est courir à sa perte par incompréhension

  4. #4
    Membre habitué
    Homme Profil pro
    Ingénieur commercial
    Inscrit en
    Février 2015
    Messages
    118
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur commercial

    Informations forums :
    Inscription : Février 2015
    Messages : 118
    Points : 178
    Points
    178
    Par défaut
    Bonsoir,

    Personnellement, pour éviter les erreurs de frappes sur mes variables, je les déclare avec une majuscule.
    Ensuite, lors de la frappe, je n'utilise que les minuscules. Si il n'y a pas d'erreur, alors le compilateur place automatiquement la majuscule.
    ça m'a permis d'éviter pas mal de perte de temps.

    A+

  5. #5
    Membre chevronné
    Profil pro
    MOA
    Inscrit en
    Décembre 2002
    Messages
    1 013
    Détails du profil
    Informations personnelles :
    Localisation : France, Eure et Loir (Centre)

    Informations professionnelles :
    Activité : MOA

    Informations forums :
    Inscription : Décembre 2002
    Messages : 1 013
    Points : 1 763
    Points
    1 763
    Par défaut
    C'était bien cela. Grhhh je n'avais pas tout faut dans mon cheminement.

    Merci beaucoup pour ce coup d'oeil. Grhh

    OBO29,e je n'ai pas l'habitude de mettre une majuscule pour une variable, je trouve cela bizzare.
    Pour moi, une variable en minuscule et les constantes en majuscule mais cela dit je vais déroger à cette règle et je vais utiliser cette technique.

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

Discussions similaires

  1. [XL-2007] Copier/coller dans nouveau classeur la ou les feuille(s) sélectionnée avec checkbox
    Par apache84 dans le forum Macros et VBA Excel
    Réponses: 9
    Dernier message: 01/02/2014, 17h19
  2. VBS EXCEL: Copier/Coller dans 2 classeurs differents
    Par bourbe dans le forum VBScript
    Réponses: 0
    Dernier message: 20/09/2013, 20h51
  3. [XL-2003] Erreur '0' : l'indice n'appartient pas à la selection
    Par Benjycool dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 29/04/2010, 15h51
  4. Erreur d'execution '9'. L'indice n'appartient pas à la selection
    Par goby45 dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 26/02/2010, 15h09
  5. L'indice n'appartient pas à la selection (Close)
    Par Elijah37 dans le forum Macros et VBA Excel
    Réponses: 8
    Dernier message: 31/07/2008, 14h37

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