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 de définition de "Workbooks", copie valeur cellule entre 2 fichiers [XL-2013]


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre du Club
    Homme Profil pro
    Bidouilleur
    Inscrit en
    Septembre 2017
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : Suisse

    Informations professionnelles :
    Activité : Bidouilleur
    Secteur : Bâtiment

    Informations forums :
    Inscription : Septembre 2017
    Messages : 7
    Par défaut Erreur de définition de "Workbooks", copie valeur cellule entre 2 fichiers
    Bonjour,

    Je me permets de vous solliciter car je n'arrive pas à bidouiller mon code correctement:

    Pour faire simple, j'ai une base de données qui doit être informée avec des valeurs situées dans des fichiers excel distincts.

    J'ai bidouillé le code suivant mais j'ai une erreur " Erreur exécution'9': L'indice n'appartient pas à la sélection"

    Je pense que ma définition de la variable "FichierB" n'est pas correcte mais je trouve pas pourquoi et comment je dois la définir.

    Y aurait-il parmi vous une bonne âme pour m'éclairer?

    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
    Sub Copie_valeurs_fiches()
     
    'Déclaration variabée
     
    Dim Nomfichier1 As Variant, Nomclasseur As Variant
     
    Dim wkA As Workbook, wkB As Workbook
     
    Dim FichierA As String, FichierB As String
     
    Dim Numcell As Integer
     
    'Boucle
     
    Numcell = 2
     
    While Numcell <= 524
     
        'Ouverture fichier
     
        Nomfichier1 = Range("L" & Numcell).Value
     
        Workbooks.Open "Y:\TEMPORAIRE\CEDRIC\0_AFFAIRES\TPG\15-xxx TPG_En Chardon\0_BATEC\1_Locaux\2_VERSION_7 - Export info fiches\1_Fiches\" & Nomfichier1 & ".xls"
     
        'Définition des fichiers
     
        FichierA = "Liste Locaux_v6_26.09.16.xlsm"
        FichierB = "& " & Nomfichier1 & ".xls" & ""
     
        Set wkA = Workbooks(FichierA)
        Set wkB = Workbooks(FichierB)
     
        'Copie valeur fiche dans base donnée
     
                With wkA.Sheets("BASE DONNEES")
                .Range("O & numcell & ").Value = wkB.Sheets("Feuil1").Range("c9").Value
                End With
     
    Numcell = Numcell + 1
     
    Wend
     
    End Sub

  2. #2
    Rédacteur/Modérateur


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

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

    Informations forums :
    Inscription : Novembre 2003
    Messages : 19 125
    Billets dans le blog
    131
    Par défaut
    Salut.

    Il est toujours utile de préciser sur quelle ligne tu as le problème. Mais je suppose bien que tu as un souci avec FichierB car un nom de fichier qui commence par &, c'est un peu bizarre.
    "Plus les hommes seront éclairés, plus ils seront libres" (Voltaire)
    ---------------
    Mes billets de blog sur DVP
    Mes remarques et critiques sont purement techniques. Ne les prenez jamais pour des attaques personnelles...
    Pensez à utiliser les tableaux structurés. Ils vous simplifieront la vie, tant en Excel qu'en VBA ==> mon tuto
    Le VBA ne palliera jamais une mauvaise conception de classeur ou un manque de connaissances des outils natifs d'Excel...
    Ce ne sont pas des bonnes pratiques parce que ce sont les miennes, ce sont les miennes parce que ce sont des bonnes pratiques
    VBA pour Excel? Pensez D'ABORD en EXCEL avant de penser en VBA...
    ---------------

  3. #3
    Membre habitué
    Profil pro
    Inscrit en
    Août 2007
    Messages
    12
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2007
    Messages : 12
    Par défaut
    Je pencherais aussi pour un souci de concaténation ici : .Range("O & numcell & ")

    Essaie .Range("O" & numCell)

  4. #4
    Membre du Club
    Homme Profil pro
    Bidouilleur
    Inscrit en
    Septembre 2017
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : Suisse

    Informations professionnelles :
    Activité : Bidouilleur
    Secteur : Bâtiment

    Informations forums :
    Inscription : Septembre 2017
    Messages : 7
    Par défaut
    Pierre Fauconnier

    Oui effectivement. C'est mon premier post, j'ai pas bien l'habitude.

    doctornono

    Je vais essayer

  5. #5
    Membre du Club
    Homme Profil pro
    Bidouilleur
    Inscrit en
    Septembre 2017
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : Suisse

    Informations professionnelles :
    Activité : Bidouilleur
    Secteur : Bâtiment

    Informations forums :
    Inscription : Septembre 2017
    Messages : 7
    Par défaut
    Sinon l'erreur se produit sur la ligne 31

  6. #6
    Membre du Club
    Homme Profil pro
    Bidouilleur
    Inscrit en
    Septembre 2017
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : Suisse

    Informations professionnelles :
    Activité : Bidouilleur
    Secteur : Bâtiment

    Informations forums :
    Inscription : Septembre 2017
    Messages : 7
    Par défaut Solution
    J'ai trouvé , sa marche...

    Mes lignes de code ci-dessous.

    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
    Sub Copie_valeurs_fiches()
     
    'Déclaration variabée
     
    Dim Nomfichier1 As Variant, Nomclasseur As Variant
     
    Dim wkA As Workbook, wkB As Workbook
     
    Dim FichierA As String, FichierB As String
     
    Dim Numcell As Integer
     
    Dim Variable As Variant
     
     
    'Boucle
     
    Numcell = 2
     
    While Numcell <= 524
     
     
        'Définition du nom de fichier a ouvrir
     
        FichierA = "Liste Locaux_v6_26.09.16.xlsm"
     
        Set wkA = Workbooks(FichierA)
     
        With wkA.Sheets("BASE DONNEES")
     
        Nomfichier1 = Range("L" & Numcell).Value
     
        End With
     
        'Définition du fichier de fiche
     
        FichierB = Nomfichier1 & ".xls"
     
        'Ouverture fichier fiche
     
        Workbooks.Open "Y:\TEMPORAIRE\CEDRIC\0_AFFAIRES\TPG\15-xxx TPG_En Chardon\0_BATEC\1_Locaux\2_VERSION_7 - Export info fiches\1_Fiches\" & Nomfichier1 & ".xls"
     
        'Copie valeur fiche dans base donnée
     
           Set wkB = Workbooks(FichierB)
     
           With wkB.Sheets("Feuil1")
           Variable = .Range("c9").Value
           End With
     
           ActiveWorkbook.Close savechanges:=False
     
           With wkA.Sheets("BASE DONNEES")
           .Range("O" & Numcell).Value = Variable
           End With
     
    Numcell = Numcell + 1
     
    Wend
     
    End Sub
    Par contre est-on obligé d'ouvrir les fichiers pour copier une valeur? (ligne 41)

    En tout cas merci pour vos remarques.

  7. #7
    Rédacteur/Modérateur


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

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

    Informations forums :
    Inscription : Novembre 2003
    Messages : 19 125
    Billets dans le blog
    131
    Par défaut
    Pour lire (ou écrire) dans des classeurs fermés, tu peux regarder le tuto de Silkyroad sur le sujet.

    Je ne suis pas un grand fan de la technique sauf dans le cas de tables de données bien structurées. Pour aller chercher une valeur d'une cellule précise, pourquoi pas, mais garde à l'esprit que le classeur est quand même ouvert par l'appel ODBC et que s'il est utilisé, ça risque de toutouiller un peu...
    "Plus les hommes seront éclairés, plus ils seront libres" (Voltaire)
    ---------------
    Mes billets de blog sur DVP
    Mes remarques et critiques sont purement techniques. Ne les prenez jamais pour des attaques personnelles...
    Pensez à utiliser les tableaux structurés. Ils vous simplifieront la vie, tant en Excel qu'en VBA ==> mon tuto
    Le VBA ne palliera jamais une mauvaise conception de classeur ou un manque de connaissances des outils natifs d'Excel...
    Ce ne sont pas des bonnes pratiques parce que ce sont les miennes, ce sont les miennes parce que ce sont des bonnes pratiques
    VBA pour Excel? Pensez D'ABORD en EXCEL avant de penser en VBA...
    ---------------

  8. #8
    Membre du Club
    Homme Profil pro
    Bidouilleur
    Inscrit en
    Septembre 2017
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : Suisse

    Informations professionnelles :
    Activité : Bidouilleur
    Secteur : Bâtiment

    Informations forums :
    Inscription : Septembre 2017
    Messages : 7
    Par défaut
    Citation Envoyé par Pierre Fauconnier Voir le message
    Pour lire (ou écrire) dans des classeurs fermés, tu peux regarder le tuto de Silkyroad sur le sujet.

    Je ne suis pas un grand fan de la technique sauf dans le cas de tables de données bien structurées. Pour aller chercher une valeur d'une cellule précise, pourquoi pas, mais garde à l'esprit que le classeur est quand même ouvert par l'appel ODBC et que s'il est utilisé, ça risque de toutouiller un peu...
    oK merci

  9. #9
    Rédacteur/Modérateur


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

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

    Informations forums :
    Inscription : Novembre 2003
    Messages : 19 125
    Billets dans le blog
    131
    Par défaut
    Cela étant, tu peux aussi importer tes données par d'autres techniques que du code, pour autant que tes données soient structurées comme une table. Tu as alors la liaison à des données externes et MSQuery. Et par VBA, tu peux aller chercher des données en bloc plutôt qu'en itérant avec des boucles.

    Comme souvent, c'est le mélange de la finalité de ton process et des structures à ta disposition que tu choisiras une méthode plutôt qu'une autre.

    Perso, je ne peux que déconseiller les formules qui vont chercher des données dans d'autres classeurs. La conception d'un système d'informations basée sur cette technique est bien trop fragile pour que je la considère comme professionnelle.
    "Plus les hommes seront éclairés, plus ils seront libres" (Voltaire)
    ---------------
    Mes billets de blog sur DVP
    Mes remarques et critiques sont purement techniques. Ne les prenez jamais pour des attaques personnelles...
    Pensez à utiliser les tableaux structurés. Ils vous simplifieront la vie, tant en Excel qu'en VBA ==> mon tuto
    Le VBA ne palliera jamais une mauvaise conception de classeur ou un manque de connaissances des outils natifs d'Excel...
    Ce ne sont pas des bonnes pratiques parce que ce sont les miennes, ce sont les miennes parce que ce sont des bonnes pratiques
    VBA pour Excel? Pensez D'ABORD en EXCEL avant de penser en VBA...
    ---------------

  10. #10
    Expert éminent
    Avatar de Marc-L
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2013
    Messages
    9 468
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2013
    Messages : 9 468
    Par défaut


    Évidemment sa boucle étant évitable même par formule avec une feuille de calculs bien structurée.

    Et même au sein d'une malheureuse boucle cela n'empêche pas de fonctionner …

  11. #11
    Membre du Club
    Homme Profil pro
    Bidouilleur
    Inscrit en
    Septembre 2017
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : Suisse

    Informations professionnelles :
    Activité : Bidouilleur
    Secteur : Bâtiment

    Informations forums :
    Inscription : Septembre 2017
    Messages : 7
    Par défaut
    Hello,

    Merci pour vos réponses.
    La base a été faite par une autre personne qui a remplit des sortes de formulaires sur des fichiers xls distincts (env. 600). Le tout sans vrai structure ou vision de base de donnée.
    Mon code à seulement servi à tout rassembler sur un seul tableau.

    Maintenant j'ai une sorte de base de données saine sur un seul fichier.

  12. #12
    Membre du Club
    Homme Profil pro
    Bidouilleur
    Inscrit en
    Septembre 2017
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : Suisse

    Informations professionnelles :
    Activité : Bidouilleur
    Secteur : Bâtiment

    Informations forums :
    Inscription : Septembre 2017
    Messages : 7
    Par défaut
    Ma question concernant l'ouverture des fichiers m'aurait servi à accélérer le processus de copie des données dans mon tableau, plutôt que d'avoir un écran qui clignote pendant 20min .

  13. #13
    Expert éminent
    Avatar de Marc-L
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2013
    Messages
    9 468
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2013
    Messages : 9 468
    Par défaut
    Citation Envoyé par Oggay Voir le message
    accélérer le processus de copie des données dans mon tableau, plutôt que d'avoir un écran qui clignote pendant 20min .
    Évidemment en désactivant l'affichage cela ne clignote plus et c'est bien plus rapide !

    Voir donc l'aide VBA de la propriété   ScreenUpdating   …

  14. #14
    Rédacteur/Modérateur


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

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

    Informations forums :
    Inscription : Novembre 2003
    Messages : 19 125
    Billets dans le blog
    131
    Par défaut
    Citation Envoyé par Marc-L Voir le message
    [...]
    Je ne dis pas que les formules interclasseurs ne fonctionnent pas, je dis que, à mon estime, c'est une construction de système d'information bien trop fragile que pour que je la qualifie de professionnelle. Je préfère de loin importer (ou lier, quoique) les données dans le classeur de travail. Je trouve que la solution construite ainsi est plus stable.

    Dans les cas que j'ai vu durant ma longue vie de praticien d'Excel (qui n'est pas finie, ), je n'ai eu que des ennuis lorsque je rencontrais chez mes clients des montages foireux à coup de formules interclasseurs, et ces constructions ont toujours été stabilisées en rassemblant les données au sein du classeur de travail...
    "Plus les hommes seront éclairés, plus ils seront libres" (Voltaire)
    ---------------
    Mes billets de blog sur DVP
    Mes remarques et critiques sont purement techniques. Ne les prenez jamais pour des attaques personnelles...
    Pensez à utiliser les tableaux structurés. Ils vous simplifieront la vie, tant en Excel qu'en VBA ==> mon tuto
    Le VBA ne palliera jamais une mauvaise conception de classeur ou un manque de connaissances des outils natifs d'Excel...
    Ce ne sont pas des bonnes pratiques parce que ce sont les miennes, ce sont les miennes parce que ce sont des bonnes pratiques
    VBA pour Excel? Pensez D'ABORD en EXCEL avant de penser en VBA...
    ---------------

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

Discussions similaires

  1. Copie de cellules entre feuilles
    Par unfcool dans le forum Macros et VBA Excel
    Réponses: 11
    Dernier message: 08/06/2007, 09h50
  2. copie de données entre 2 fichiers excel
    Par kalu dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 31/10/2006, 17h31

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