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 :

recopier une cellule d'un classeur dans un autre classeur [XL-2007]


Sujet :

Macros et VBA Excel

  1. #1
    Membre du Club
    Profil pro
    Ingénieur Support BE
    Inscrit en
    Décembre 2011
    Messages
    79
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur Support BE

    Informations forums :
    Inscription : Décembre 2011
    Messages : 79
    Points : 45
    Points
    45
    Par défaut recopier une cellule d'un classeur dans un autre classeur
    Bonjour à tous,

    J'ai recopié un FichierModele en des FichierCible.
    Je travaille depuis un Fichier nommé Fdt2012.
    Je voudrais remplacer les cellules A1 et C1 de la Feuille NOM du FichierCible
    par les cellules des colonnes A et B de la Feuille Janv2012 du fichier FdT2012,
    sachant que les fichiers ne se trouvent pas sous le même répertoire.
    J'ai réussi à ouvrir le fichier et activer la feuille NOM mais le code suivant me donne une erreur de syntaxe que je n'arrive pas à résoudre.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Workbooks(FichierCible).Worksheets("NOM").Range("A1").Value = _
       Worbooks("D\Fdt_2012\macroFdt2012.xlsm).Worsheets(Janv2012).Range(Ligne,1).Value
    Si quelqu'un pouvait m'aider à lever cette erreur, je pourrai ensuite poursuivre.
    Merci d'avance à tous ceux qui m'aide et me font progresser.
    Véronique

    Code complet actuel :
    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
     
    Option Explicit
    Sub DeploiementFdTJanv2012()
     
    Dim PremLigne As Integer, DerLigne As Integer, Ligne As Integer
    Dim valeur() As Variant
    Dim cel As Object
    Dim Fichier As String, Feuille As String, Prenom_Pers As String
    Dim FichierModele As String, FichierCible As String
     
     
     
     
    'Calcul du nombre de ligne à lire
    Sheets("Janv2012").Activate
    PremLigne = Range("A1").End(xlDown).Row + 1
    DerLigne = Range("A65536").End(xlUp).Row
     
    FichierModele = "D:\FdT_2012\FdT_2012_MODELE.xls"
     
     
    ' Copie du fichier FdT_MODELE.xls vers les FichierCible du type FichierNom en les rangeant dans les repertoires correspondant au service
     
    For Ligne = PremLigne To DerLigne
     
        If Len(Cells(Ligne, 1).Value) > 0 And Len(Cells(Ligne, 4).Value) > 0 Then
     
     FichierCible = Cells(Ligne, 4).Value & "\" & Cells(Ligne, 5).Value
            FileCopy FichierModele, FichierCible
     
    '     ouvrir le classeur cible à modifier
    Application.Workbooks.Open (FichierCible)
    ' activer la feuille NOM
     
    Sheets("NOM").Activate
     
    'Remplacer les  cellules A1 et C1 de la Feuille NOM du  FichierCible
    'par les cellules des colonnes A et B de la Feuille Janv2012 du fichier FdT2012,
    'sachant que les fichiers ne se trouvent pas sous le meme répertore
     
    Workbooks(FichierCible).Worksheets("NOM").Range("A1").Value = _
       Worbooks("D\Fdt_2012\macroFdt2012.xlsm).Worsheets(Janv2012).Range(Ligne,1).Value
     
       Workbooks(FichierCible).Worksheets("NOM").Range("C1").Value = _
       Worbooks("D\Fdt_2012\macroFdt2012.xlsm).Worsheets(Janv2012).Range(Ligne,2).Value
     
     End If
     
    Next Ligne
     
    End Sub

  2. #2
    Expert éminent Avatar de casefayere
    Homme Profil pro
    RETRAITE
    Inscrit en
    Décembre 2006
    Messages
    5 138
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 70
    Localisation : France, Ardennes (Champagne Ardenne)

    Informations professionnelles :
    Activité : RETRAITE
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Décembre 2006
    Messages : 5 138
    Points : 9 548
    Points
    9 548
    Par défaut
    Bonsoir,
    regardes d'abord ta syntaxe :
    Worbooks au lieu de Workbooks

  3. #3
    Membre du Club
    Profil pro
    Ingénieur Support BE
    Inscrit en
    Décembre 2011
    Messages
    79
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur Support BE

    Informations forums :
    Inscription : Décembre 2011
    Messages : 79
    Points : 45
    Points
    45
    Par défaut Et maintenant erreur d'exécution 9 : "l'indice n'appartient pas à la sélection
    Bonjour,

    Il y avait effectivement une grosse erreur de syntaxe mais j'ai maintenant erreur d'exécution 9 : "l'indice n'appartient pas à la sélection avec le code suivant. Je ne vois pas ce qui peux coincer, mais c'est peut être évident pour certains d'entre vous........
    J'avoue ne plus savoir où regarder.....
    Merci pour votre aide.....
    Véronique
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Workbooks(FichierCible).Worksheets("NOM").Range("A1").Value = _
       Workbooks("D\Fdt_2012\macroFdt2012.xlsm").Worksheets("Janv2012").Range(Ligne,1).Value

  4. #4
    Expert éminent Avatar de casefayere
    Homme Profil pro
    RETRAITE
    Inscrit en
    Décembre 2006
    Messages
    5 138
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 70
    Localisation : France, Ardennes (Champagne Ardenne)

    Informations professionnelles :
    Activité : RETRAITE
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Décembre 2006
    Messages : 5 138
    Points : 9 548
    Points
    9 548
    Par défaut
    Déjà, un conseil, habitues-toi à spécifier la dernière ligne comme ça (tu es avec excel2007) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    DerLigne = Range("A" & rows.count).End(xlUp).Row
    as-tu testé la valeur de "FichierCible" ? avec un test comme
    y a-t-il ".xls" ou ".xlsx" ou ".xlsm" à la fin ?

    "macroFdt2012.xlsm" est-il ouvert ?

    quelle est la valeur de ligne ?

    peut-être

  5. #5
    Membre du Club
    Profil pro
    Ingénieur Support BE
    Inscrit en
    Décembre 2011
    Messages
    79
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur Support BE

    Informations forums :
    Inscription : Décembre 2011
    Messages : 79
    Points : 45
    Points
    45
    Par défaut Rien de neuf ....
    Bonsoir,

    Merci pour ta réponse.
    Je testais PremLigne, DerLigne (maintenant modifiée), et Ligne. Tout correspondant à ce que je veux.
    Je teste FichierCible qui est OK et qui s'ouvre bien. J'ai tout mis en xlsm, les macros sont activées à l'ouverture, mais cela ne change rien...

    Rien n'y fait
    La nuit portera peut être conseil....

    Véronique

  6. #6
    Expert éminent Avatar de casefayere
    Homme Profil pro
    RETRAITE
    Inscrit en
    Décembre 2006
    Messages
    5 138
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 70
    Localisation : France, Ardennes (Champagne Ardenne)

    Informations professionnelles :
    Activité : RETRAITE
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Décembre 2006
    Messages : 5 138
    Points : 9 548
    Points
    9 548
    Par défaut
    As-tu regardé ma dernière proposition,
    Si ligne est un chiffre, changes ton code
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Workbooks(FichierCible).Worksheets("NOM").Range("A1").Value = _
       Workbooks("D\Fdt_2012\macroFdt2012.xlsm").Worksheets("Janv2012").cells(Ligne,1).Value
    et non
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Workbooks(FichierCible).Worksheets("NOM").Range("A1").Value = _
       Workbooks("D\Fdt_2012\macroFdt2012.xlsm").Worksheets("Janv2012").Range(Ligne,1).Value
    et attention fichiercible doit être de la forme, par exemple "toto.xlsm" et non "toto"

  7. #7
    Membre du Club
    Profil pro
    Ingénieur Support BE
    Inscrit en
    Décembre 2011
    Messages
    79
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur Support BE

    Informations forums :
    Inscription : Décembre 2011
    Messages : 79
    Points : 45
    Points
    45
    Par défaut
    Bonjour,

    Merci pour ton aide.
    J'ai essayé ce que tu m'as dit et toujours la même erreur.
    J'ai également le même problème lorsque je remplace FichierCible par son nom en dur entre quote...

    Cela doit être la combinaison workbook, worksheet, cells qui pose un problème. Est-ce qu'il y aurait une autre façon de l'écrire....

    Mais là encore, je ne maitrise pas....
    Merci encore pour l'aide apportée par ce forum qui me fait progresser....
    Véronique

    Bonjour,

    J'ai fait un essai de ce que je voulais faire avec une macro manuelle et je pense que j'ai un problème de fenêtre active.....
    Veronique

  8. #8
    Rédacteur
    Avatar de Philippe Tulliez
    Homme Profil pro
    Formateur, développeur et consultant Excel, Access, Word et VBA
    Inscrit en
    Janvier 2010
    Messages
    12 921
    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 : 12 921
    Points : 28 907
    Points
    28 907
    Billets dans le blog
    53
    Par défaut
    Bonjour,
    Il y a, je pense 3 classeurs et feuilles dans ce code
    1 - Le classeur où se trouve le code VBA et la liste des services, nom du répertorie
    2 - Le classeur modèle : "D:\FdT_2012\FdT_2012_MODELE.xls" (Nom + Répertoire)
    3 - Le classeur cible dont le nom et le répertoire varie suivant la valeur des cellule
    Est-ce correct ?
    Dans ce cas est-il possible d'expliquer dans cette ligne de code
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    FichierCible = Cells(Ligne, 4).Value & "\" & Cells(Ligne, 5).Value
    Colonne 4 : Répertoire ?
    Colonne 5 : Un nom de classeur
    Quelle est la valeur de la variable FichierCible

  9. #9
    Rédacteur
    Avatar de Philippe Tulliez
    Homme Profil pro
    Formateur, développeur et consultant Excel, Access, Word et VBA
    Inscrit en
    Janvier 2010
    Messages
    12 921
    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 : 12 921
    Points : 28 907
    Points
    28 907
    Billets dans le blog
    53
    Par défaut
    Bonjour,
    Citation Envoyé par VIPNO Voir le message
    Bonjour,
    J'ai fait un essai de ce que je voulais faire avec une macro manuelle et je pense que j'ai un problème de fenêtre active.....
    Veronique
    Voici un code exemple.
    Un fichier modèle nommé monModele.xls qui est copié 2 fois (voir boucle For row = 2 To 3) dans un même répertoire Z:\Tests\Test Tsf\tsf\ sous des noms différents. Le nom ici est construit avec la combinaison des colonnes 2 & 1
    Avec du VBA nul besoin d'utiliser Activate pour travailler avec des feuilles différentes.
    C'est bien sûr un exemple à adapter
    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
    Option Explicit
    Const wkbTempName As String = "monModele.xls"
    Const FolderFromName As String = "Z:\Tests\Test Tsf\"
    Const FolderDestName As String = "Z:\Tests\Test Tsf\tsf\"
    Dim wkbMaster As Workbook, shtMaster As Worksheet
    Dim wkbTemplate As Workbook
    Dim wkbDestName As String
    Sub Init()
     Set wkbMaster = ThisWorkbook: Set shtMaster = wkbMaster.Worksheets("List")
    End Sub
    Sub Main()
     Init
     Dim row As Long
     With shtMaster
      For row = 2 To 3
       wkbDestName = FolderDestName & "Janvier2012" & " " & .Cells(row, 2) & "_" & .Cells(row, 1) & ".xls"
       FileCopy FolderFromName & wkbTempName, wkbDestName
       '
       '
      Next
     End With
     Ecrit
    End Sub
    Sub Ecrit()
     Dim app As New Excel.Application: app.Visible = False     ' Mettre à TRUE pendant les tests  
     Dim wkbTemp As Excel.Workbook ' WorkBookTemporaire
     Dim row As Long
     For row = 2 To 3
      With shtMaster
       wkbDestName = FolderDestName & "Janvier2012" & " " & .Cells(row, 2) & "_" & .Cells(row, 1) & ".xls"
       Set wkbTemp = app.Workbooks.Open(wkbDestName)
       ' Ecrire dans fichier
       wkbTemp.Worksheets("TS").Range("I2") = .Cells(row, 2) & " " & .Cells(row, 1)
     
       wkbTemp.Close SaveChanges:=True ' , Filename:=wkbDestName
     
      End With
     Next row
     app.Quit: Set app = Nothing
    End Sub

  10. #10
    Membre du Club
    Profil pro
    Ingénieur Support BE
    Inscrit en
    Décembre 2011
    Messages
    79
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur Support BE

    Informations forums :
    Inscription : Décembre 2011
    Messages : 79
    Points : 45
    Points
    45
    Par défaut Des complements d'informations
    Bonjour,

    Il y a effectivement 3 classeurs.

    1 - Le classeur modèle "D:\FdT_2012\FdT_2012_MODELE.xls" (Nom + Répertoire)

    2 - Le classeur où se trouve le code VBA "D:\FdT_2012\macroFdt2012 et la table des personnes avec Prénom, NOM, service (colonnes 1 à 3). Colonnes 4 (répertoire en fonction du service d'appartenance de la personne de type D:\FdT_2012\FdT2012_BE) et 5 (nom du fichier en fonction du nom de la personne de type FdT_2012_MOI.xlsm )

    3 - Le classeur cible dont le nom et le répertoire varie suivant la valeur des cellule des colonnes 4 et 5 du classeur précèdent
    Le nom de ce fichier avec chemin est bien codé par le code suivant.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    FichierCible = Cells(Ligne, 4).Value & "\" & Cells(Ligne, 5).Value

    FichierCible est déclaré en String.
    La partie de code suivant me permet de faire la copie correctement.
    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
    Sub DeploiementFdTJanv2012()
     
    Dim PremLigne As Integer, DerLigne As Integer, Ligne As Integer
    Dim valeur() As Variant
    Dim cel As Object
    Dim Fichier As String, Feuille As String, Prenom_Pers As String
    Dim FichierModele As String, FichierCible As String
     
     
     
     
    'Calcul du nombre de ligne à lire
    Sheets("Janv2012").Activate
    PremLigne = Range("A1").End(xlDown).Row + 1
    DerLigne = Range("A" & Rows.Count).End(xlUp).Row
     
     
    FichierModele = "D:\FdT_2012\FdT_2012_MODELE.xlsm"
     
     
    ' Copie du fichier FdT_MODELE.xls vers les FichierCible du type FichierNom en les rangeant dans les repertoires correspondant au service
     
    For Ligne = PremLigne To DerLigne
     
        If Len(Cells(Ligne, 1).Value) > 0 And Len(Cells(Ligne, 4).Value) > 0 Then
     
     FichierCible = Cells(Ligne, 4).Value & "\" & Cells(Ligne, 5).Value
            FileCopy FichierModele, FichierCible
    .

    Voila tous les détails.
    Je poursuis en regardant le code envoyé.
    Merci beaucoup pour cette aide.
    A bientôt
    Véronique

  11. #11
    Membre du Club
    Profil pro
    Ingénieur Support BE
    Inscrit en
    Décembre 2011
    Messages
    79
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur Support BE

    Informations forums :
    Inscription : Décembre 2011
    Messages : 79
    Points : 45
    Points
    45
    Par défaut Ca roule....
    Bonjour,
    Merci à tous,
    En adaptant le code de corona, J'ai réussi à obtenir ce que je voulais.
    C'EST GRANDIOSE...
    Mille merci.....

    Pour revenir sur le problème de départ je devais avoir un conflit entre un nom de classeur (string) et le classeur lui même (workbook).
    Du basique pour certains, mais le temps que je m'en aperçoive......
    Je vais maintenant continuer sur une autre discussion pour faire progresser ma mise à jour et continuer à progresser

    Véronique


    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
    Option Explicit
    Sub DeploiementFdTJanv2012()
     
    Dim PremLigne As Integer, DerLigne As Integer, Ligne As Integer
    Dim cel As Object
    Dim Fichier As String, Feuille As String
    Dim NomFichierModele As String, NomFichierCible As String
    Dim ClasseurMaitre As Workbook, FeuilleMaitre As Worksheet, ClasseurCible As Workbook
    Dim App As New Excel.Application
     
     
    'Initialisation du classeur Maitre, du Fichier modèle
    Set ClasseurMaitre = ThisWorkbook: Set FeuilleMaitre = ClasseurMaitre.Worksheets("Janv2012")
    NomFichierModele = "D:\FdT_2012\FdT_2012_MODELE.xlsm"
     
     
    'Calcul du nombre de ligne à lire
    With FeuilleMaitre
    PremLigne = Range("A1").End(xlDown).Row + 1
    DerLigne = Range("A" & Rows.Count).End(xlUp).Row
     
     
     
     
    ' Copie du fichier FdT_MODELE.xls vers les FichierCible du type FichierNom en les rangeant dans les repertoires correspondant au service
     
    For Ligne = PremLigne To DerLigne
     
        If Len(Cells(Ligne, 1).Value) > 0 And Len(Cells(Ligne, 4).Value) > 0 Then
     
            NomFichierCible = Cells(Ligne, 4).Value & "\" & Cells(Ligne, 5).Value
                FileCopy NomFichierModele, NomFichierCible
     
            ' Copie des elements de la source à la cible de la forme cible=source
            'remplacer les cellules A1 et C1 de la Feuille NOM du FichierCible
            'par les cellules des colonnes A et B de la Feuille Janv2012 du fichier FdT2012,
     
             App.Visible = False ' Permet de ne pas voir l'ouverture du fichier et la copie des cellules
                            'Changer False en True pour voir
     
                Set ClasseurCible = App.Workbooks.Open(NomFichierCible) ' Lien entre le classeur et le nom de fichier
                ClasseurCible.Worksheets("NOM").Range("A1").Value = .Cells(Ligne, 1).Value
                ClasseurCible.Worksheets("NOM").Range("C1").Value = .Cells(Ligne, 2).Value
     
            ' fermer ficihier en sauvegardant
                ClasseurCible.Close SaveChanges:=True
     
     
     
        End If
    Next Ligne
     
    App.Quit: Set App = Nothing
     
    End With
     
    End Sub

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

Discussions similaires

  1. [XL-2013] Copier cellules en ligne dans une colonne qui se trouve dans un autre classeur
    Par Wushugringo dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 20/02/2015, 08h07
  2. Réponses: 10
    Dernier message: 18/02/2015, 16h48
  3. [XL-2007] Entrée la valeur d'une cellule d'un autre classeur dans une variable
    Par Coco_O dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 27/05/2011, 16h25
  4. recopier une cellule dans tout un champ
    Par sriverxp dans le forum Requêtes et SQL.
    Réponses: 6
    Dernier message: 09/05/2010, 22h15
  5. Exécution d'une procédure qui se trouve dans un autre classeur
    Par enchanté dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 24/07/2007, 09h31

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