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 cellule classeur 1 vers classeur 2 (presque arrivé) [XL-2007]


Sujet :

Macros et VBA Excel

  1. #1
    re
    re est déconnecté
    Membre confirmé
    Profil pro
    Inscrit en
    Novembre 2005
    Messages
    116
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2005
    Messages : 116
    Par défaut copier cellule classeur 1 vers classeur 2 (presque arrivé)
    Bonjour,

    je voudrais copier des cellules (A1 et B3) du classeur 1 vers C1 pour la A1 et C2 pour B3 vers un nouveau classeur.
    je me suis inspiré de ce code mais ça ne marche que pour une cellule.
    comme vous voyez je ne suis pas un spécialiste ,-)

    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
    Sub COPIES()
        Dim Sortie As Workbook
        Dim FeuilleOrigine As Worksheet, FeuilleDestination As Worksheet
     
        'Référence la feuille origine des données à copier
        Set FeuilleOrigine = ThisWorkbook.Sheets("feuil1")
     
        NomFichierSortie = Application.GetOpenFilename("Fichier Excel (*.xls;*.xlsx;*.xlsm),*.xls;*.xlsx;*.xlsm")
     
        ' On verifie que l'on a selectionné un nom de classeur
        If NomFichierSortie <> False Then
            ' On ouvre le classeur
            Set Sortie = Workbooks.Open(NomFichierSortie)
              Range("A1").Copy
     
    ' je veux selectionner B3 du classeur d'origne
              ' ???? Set Sortie = Workbooks.Open(NomFichierSortie)
              '???? Range("B3").Copy
     
       ' ActiveSheet.Copy
            'Référence la feuille de destination des cellules copiées
            Set FeuilleDestination = Sortie.Sheets("feuil2")
            ' On copie les cellules de la feuille désirée vers la feuille de sortie
           With FeuilleOrigine
     
        ' nouveau classeur
          Windows("Classeur2.xls").Activate
        Sheets("Feuil2").Select
        ActiveSheet.Paste Range("C1")
     
    ' je veux copier la cellule B3 du classeur d'origine
        '??? ActiveSheet.Paste Range("C2")
     
               'celui ci ne copie rien pourquoi ? => .Range("G10:G125").Copy Destination:=FeuilleDestination.Range("G10")
            End With
     
            ' On ferme le classeur
            'Sortie.Close
        End If
    End Sub
    Merci de votre aide

  2. #2
    Membre Expert Avatar de Fvandermeulen
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juillet 2007
    Messages
    1 869
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Juillet 2007
    Messages : 1 869
    Par défaut
    Salut,
    A moins que tu tiennes vraiment à faire une copie, il y a plus simple, on stocke la valeur de tes sources dans des variables, ça donne (enfin j'espère, j'avoue ne pas avoir testé):

    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
    Sub COPIES()
        Dim Sortie As Workbook
        Dim FeuilleOrigine As Worksheet, FeuilleDestination As Worksheet
        Dim val1 as variant, dim val2 as variant
     
        val1 = ThisWorkbook.Sheets("feuil1").range("A1")
        val2 = ThisWorkbook.Sheets("feuil1").range("B3")
     
        NomFichierSortie = Application.GetOpenFilename("Fichier Excel (*.xls;*.xlsx;*.xlsm),*.xls;*.xlsx;*.xlsm")
     
        ' On verifie que l'on a selectionné un nom de classeur
        If NomFichierSortie <> False Then
            ' On ouvre le classeur
            Set Sortie = Workbooks.Open(NomFichierSortie)
              Range("A1").Copy
     'Par défaut le fichier Sortie est le fichier actif =>
    sheets("feuil2").range("c1")=val1
    sheets("feuil2").range("c2")=val2
     
            ' On ferme le classeur
            'Sortie.Close
        End If
    End Sub
    A+

  3. #3
    re
    re est déconnecté
    Membre confirmé
    Profil pro
    Inscrit en
    Novembre 2005
    Messages
    116
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2005
    Messages : 116
    Par défaut
    Merci pour ta reponse mais ça ne copie pas, tu as une autre idée ?

    j'ai modifié comme ceci (si non c'est en rouge)


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Dim val1 As Variant
        Dim val2 As Variant
    au lieu de :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Dim val1 as variant, dim val2 as variant
    dans d'autre tests j'avais aussi essayé ça:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     ThisWorkbook.Sheets("Feuil2" ).Range("A" & ligne) = Workbooks(nomfichier).Sheets("Nombre" ).Range("F3" ).Value

  4. #4
    Membre Expert Avatar de Fvandermeulen
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juillet 2007
    Messages
    1 869
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Juillet 2007
    Messages : 1 869
    Par défaut
    Désolé pour le dim, en effet à main levée j'ai fait une erreur, ça devait être
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Dim Val1 as variant, val2 as variant
    Sinon, n'as tu jamais essayé ceci?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Workbooks("TonFichierSource.xls").Sheets("Feuil1").Range("a1").Copy Destination:=Sheets("sheet2").Range("c1")
    A mettre après l'ouverture du fichier cible.

    A+

  5. #5
    re
    re est déconnecté
    Membre confirmé
    Profil pro
    Inscrit en
    Novembre 2005
    Messages
    116
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2005
    Messages : 116
    Par défaut
    J'ai fait ça mais sans resultat, "erreur 9, l'indice n'appartient pas à la selction" me dit il...
    Merci encore de ton aide

    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
    Sub COPIES()
        Dim Sortie As Workbook
        Dim FeuilleOrigine As Worksheet, FeuilleDestination As Worksheet
        Dim val1 As Variant, val2 As Variant
     
        val1 = ThisWorkbook.Sheets("feuil1").Range("A1")
        val2 = ThisWorkbook.Sheets("feuil1").Range("B3")
     
        NomFichierSortie = Application.GetOpenFilename("Fichier Excel (*.xls;*.xlsx;*.xlsm),*.xls;*.xlsx;*.xlsm")
     
        ' On verifie que l'on a selectionné un nom de classeur
        If NomFichierSortie <> False Then
            ' On ouvre le classeur
            Set Sortie = Workbooks.Open(NomFichierSortie)
              'Range("A1").Copy
     'Par défaut le fichier Sortie est le fichier actif =>
    'Sheets("feuil2").Range("c1") = val1
    'Sheets("feuil2").Range("c2") = val2
    Workbooks("T1.xls").Sheets("Feuil1").Range("a1").Copy Destination:=Sheets("Feuil2").Range("c1")
        'ThisWorkbook.Sheets("Feuil2").Range("A" & ligne) = Workbooks(nomfichier).Sheets("Nombre").Range("F3").Value
            ' On ferme le classeur
            'Sortie.Close
        End If
    End Sub

  6. #6
    Membre Expert Avatar de Fvandermeulen
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juillet 2007
    Messages
    1 869
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Juillet 2007
    Messages : 1 869
    Par défaut
    Vérifie bien le nom de ton fichier et feuille, j'ai adapté le code comme suit pour faire un test chez moi et tout est OK, tu verras que mes feuilles sont Sheet1 et sheet2 car je suis en version GB

    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
    Sub COPIES()
    Dim Sortie As Workbook
     
    NomFichierSortie = Application.GetOpenFilename("Fichier Excel (*.xls;*.xlsx;*.xlsm),*.xls;*.xlsx;*.xlsm")
     
        ' On verifie que l'on a selectionné un nom de classeur
        If NomFichierSortie <> False Then
            ' On ouvre le classeur
            Set Sortie = Workbooks.Open(NomFichierSortie)
     
                Workbooks("T1.xls").Sheets("sheet1").Range("a1").Copy Destination:=Sheets("Sheet2").Range("c1")
     
            ' On ferme le classeur
            Sortie.Close
        End If
    End Sub
    A+

  7. #7
    re
    re est déconnecté
    Membre confirmé
    Profil pro
    Inscrit en
    Novembre 2005
    Messages
    116
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2005
    Messages : 116
    Par défaut
    c'est vraiment incompréhensible, je n'y arrive pas ! Toujours le même erreur, y aurait 'il un blocage dans un parametrage de ma machine ?

    Tu as simplifie le code je ne vois ou je fais une erreur

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Workbooks("T1.xls").Sheets("Feuil1").Range("a1").Copy Destination:=Sheets("Feuil2").Range("c1")
    Merci

  8. #8
    Membre Expert Avatar de Fvandermeulen
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juillet 2007
    Messages
    1 869
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Juillet 2007
    Messages : 1 869
    Par défaut
    En effet, là ça me dépasse, tout ce qui me vient à l'esprit est de revérifier le nom de ton fichier source ainsi que le nom des feuilles et de veiller à ce que ce soit bien le fichier cible qui soit actif lorsque tu passe sur cette ligne, mais théoriquement c'est le cas.
    Au pire essaie en scindant la ligne, d'abord faire le copy en ayant activé la feuille source et la paste en réactivant le fichier cible.
    Ce revient plus ou moins à ce que tu avais au début mais il faut trouver d'où ça vient.

  9. #9
    Membre habitué
    Profil pro
    Inscrit en
    Août 2009
    Messages
    12
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Août 2009
    Messages : 12
    Par défaut
    utilise worksheets plutot que sheets...


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Workbooks("T1.xls").worksheets(1).Range("a1").Copy Destination:=Workbooks("T1.xls").worksheets(2).Range("c1")

  10. #10
    re
    re est déconnecté
    Membre confirmé
    Profil pro
    Inscrit en
    Novembre 2005
    Messages
    116
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2005
    Messages : 116
    Par défaut
    Merci beaucoup j'y suis enfin arrivé avec une variante en ne copiant que les valeurs (tu avais raison)
    Par contre ça marche sans "Dim val1 As Variant''

    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
    Sub Copies_Valeurs()
    Dim Sortie As Workbook
     
    NomFichierSortie = Application.GetOpenFilename("Fichier Excel (*.xls;*.xlsx;*.xlsm),*.xls;*.xlsx;*.xlsm")
     
        ' On verifie que l'on a selectionné un nom de classeur
        If NomFichierSortie <> False Then
            ' On ouvre le classeur
            Set Sortie = Workbooks.Open(NomFichierSortie)
     
        ' On copie les cellule de ce classeur
            val1 = Sheets("feuil1").Range("A1")
            val2 = Sheets("feuil1").Range("B1")
            val3 = Sheets("feuil1").Range("C1")
     
        'On selectionne le classeur et les cellules de destination pour ne copier que la valeur
                Workbooks("Classeur1.xlsm").Sheets("feuil2").Range("A2") = val1
                Workbooks("Classeur1.xlsm").Sheets("feuil2").Range("B2") = val2
                Workbooks("Classeur1.xlsm").Sheets("feuil2").Range("C2") = val3
     
     
            ' On ferme le classeur
            Sortie.Close
        End If
    End Sub

  11. #11
    Membre Expert Avatar de Fvandermeulen
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juillet 2007
    Messages
    1 869
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Juillet 2007
    Messages : 1 869
    Par défaut
    Citation Envoyé par re Voir le message
    Par contre ça marche sans "Dim val1 As Variant''
    En effet, à moins d'avoir l'option explicit, le dimensionnement n'est pas obligatoire mais fortement conseillé. Je l'avais mis en variant pour le principe ne sachant pas ce que tes cellules contiennent comme valeur.
    A+

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

Discussions similaires

  1. [XL-2010] Copier feuille de classeur A vers classeur B
    Par Mimosa777 dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 20/08/2012, 20h03
  2. Copier/Coller Classeur 1 vers Classeur 2
    Par Charlesraheb dans le forum Macros et VBA Excel
    Réponses: 5
    Dernier message: 03/07/2012, 21h45
  3. [XL-2007] Copie lignes classeur ferme vers classeur de travail (ouvert)
    Par stephadm dans le forum Macros et VBA Excel
    Réponses: 13
    Dernier message: 30/06/2012, 11h50
  4. Copier un module d'un classeur A à un classeur B
    Par sweetdood dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 04/04/2012, 14h49
  5. Copier et coller d"un classeur Excel vers un autre
    Par Anthos59 dans le forum VB.NET
    Réponses: 7
    Dernier message: 28/01/2011, 08h36

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