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 :

VBA je cherche comment copier des lignes d'un classeur excel dans une feuille d'un autre classeur


Sujet :

Macros et VBA Excel

  1. #1
    Membre du Club
    Homme Profil pro
    Consultant en sécurité
    Inscrit en
    Juillet 2011
    Messages
    82
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : Consultant en sécurité
    Secteur : Santé

    Informations forums :
    Inscription : Juillet 2011
    Messages : 82
    Points : 68
    Points
    68
    Par défaut
    Bonjour,

    Question:


    Comment copier des lignes d'un classeur excel dans une feuille d'un autre classeur??

    Merci

    en fait je voudrais copier une ligne avec ma fonction IF et la coller dans une ligne d'une feuille d'un autre classeur et aussi comme j'ai établi une boucle il y aura plusieur lignes à copier coller une aprés l'autre et il faudrait les copier aussi une à la suite de l'autre sur la nouvelle feuille....

  2. #2
    Expert éminent Avatar de jfontaine
    Homme Profil pro
    Contrôleur de Gestion
    Inscrit en
    Juin 2006
    Messages
    4 754
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Contrôleur de Gestion

    Informations forums :
    Inscription : Juin 2006
    Messages : 4 754
    Points : 9 396
    Points
    9 396
    Par défaut
    Bonjour,

    Une méthode (code non 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
     
    dim i as long
    dim idest as long
     
    idest=1
     
    for i = 2 to RAnge("A:A").End(Xldown).Row
     
       If Range("A" & i).value = "montest" then
     
            range("A" & i & ":C" & i).copy sheets("Feuil2").Range("A" & idest)
            idest=idest +1
     
       end if
     
    next i
    Jérôme

  3. #3
    Membre du Club
    Homme Profil pro
    Consultant en sécurité
    Inscrit en
    Juillet 2011
    Messages
    82
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : Consultant en sécurité
    Secteur : Santé

    Informations forums :
    Inscription : Juillet 2011
    Messages : 82
    Points : 68
    Points
    68
    Par défaut
    Merci,

    C'est trés bon jusqu'ici, mais lorsque je choisi e copier sur un autre classeur ça ne marche pas...

    voici l'essaie:

    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
    Sub j()
     
     
    Dim i As Long
    Dim idest As Long
     
    idest = 1
     
    For i = 2 To Range("A:A").End(xlDown).Row
     
       If Range("A" & i).Value = "montest" Then
     
            Range("A" & i & ":z" & i).Copy Workbooks("JGH2.xlsm").Sheets("Feuil3").Range("A" & idest)
            idest = idest + 1
     
       End If
     
    Next i
     
    End Sub

  4. #4
    Membre du Club
    Homme Profil pro
    Consultant en sécurité
    Inscrit en
    Juillet 2011
    Messages
    82
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : Consultant en sécurité
    Secteur : Santé

    Informations forums :
    Inscription : Juillet 2011
    Messages : 82
    Points : 68
    Points
    68
    Par défaut Y a qq un?
    Voici ce que j'ai trouvé mais marche pas non plu.....


    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 j()
     
     
    Dim i As Long
    Dim idest As Long
     
    idest = 1
     
    For i = 2 To Range("A:A").End(xlDown).Row
     
       If Range("A" & i).Value = "montest" Then
     
            Range("A" & i & ":z" & i).Copy
     
                   Workbooks("JGH2.xlsm").Sheets("feuil3").Activate
     
                    ActiveSheet.Paste
     
            idest = idest + 1
     
       End If
     
    Next i
     
    End Sub
    Merci de m'aider.

  5. #5
    Expert éminent sénior


    Profil pro
    Inscrit en
    Juin 2003
    Messages
    14 008
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 14 008
    Points : 20 040
    Points
    20 040
    Par défaut
    Citation Envoyé par mikeactuaire Voir le message
    Merci,

    C'est trés bon jusqu'ici, mais lorsque je choisi e copier sur un autre classeur ça ne marche pas...
    ...
    sans jambes le code n'est pas censé marcher ... , dis nous en plus sur ton problème ..
    est tu sur que la colonne A de la feuille source ( qui avec ce code doit être active au moment du lancement de la macro) contient bien la valeur "montest" sur une ou plusieurs lignes?

    If Range("A" & i).Value = "montest" Then

    N'utilise pas les fonctions et propriétés du genre Activate, Select , ActiveSheet., dans la pluspart des codes ce ne sont que des sources de problèmes...


    pour désigner ta feuilles source et ta feuille destination utilise une variable worksheet...




    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
     
    Dim fSource as WorkSheet
    Dim fDest as WorkSheet
    (...)
    set fSource=ThisWorbooks.Worksheets("Feuil1") ' définit la feuille 1 en feuille source
    set fDest = Workbooks("JGH2.xlsm").Sheets("feuil3") ' défini la feuille 3 du classeur JGH2.Xml en feuille destination ! ATTENTION Ce code implique que le classeur JGH2.xml soit ouvert avant le lancement de la macro !
     
    'Modifie ton code en rajoutant Fsource et Fdest pour le principe :
    (..)
    For i = 2 To fSource.Range("A:A").End(xlDown).Row
     
       If fSource.Range("A" & i).Value = "montest" Then
     
            Fsource.Range("A" & i & ":z" & i).Copy fDest.Range("A" & idest)
           (...)

  6. #6
    Membre du Club
    Homme Profil pro
    Consultant en sécurité
    Inscrit en
    Juillet 2011
    Messages
    82
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : Consultant en sécurité
    Secteur : Santé

    Informations forums :
    Inscription : Juillet 2011
    Messages : 82
    Points : 68
    Points
    68
    Par défaut TOUT MON CODE
    Voici mon programme:

    sur la Feuil2 :
    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
     Sub RapportsMensuels()
     
        Dim zone As Range, docteur As String
        Dim i As Integer
     
        Sheets("liste").Activate
        Set zone = Range("nom")
     
        i = 0
        docteur = Range("nom").Cells(i)
     
    While docteur <> ""
     
        i = i + 1
     
        docteur = Range("nom").Cells(i)
       ' MsgBox (Range("nom").Cells(i))
      If docteur <> "" Then Call Feuil1.sel(docteur) Else MsgBox ("Terminé!")
     
    Wend
     
    End Sub
    Sur la feuil1 = masterliste


    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
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    Sub sel(m As String)
    Dim zone2 As Range, doc As String
    Dim n As Integer
    
    
    Sheets("masterliste").Activate
    'Set zone2 = Range("noms")
    n = 0
    doc = Range("noms").Cells(n)
    
    While doc <> ""
     
       n = n + 1
    doc = Range("noms").Cells(n)
        If doc = m Then Call creation(m)
        
    Wend
    
    End Sub
    
    
    Sub creation(n As String)
    
      Dim xlApp As Excel.Application
      Dim xlBook As Excel.Workbook
      Dim xlSheet As Excel.Worksheet
      
     NomFich = Dir("C:\Users\Owner\Desktop\DossierDocteur\Docteur\" & n & ".xlsx")
    If NomFich = "" Then
    
               'on modifie la destination, nouvelle destination:
                 Application.DefaultFilePath = "C:\Users\Owner\Desktop\DossierDocteur\Docteur"
              'On créer l'objet Excel
                  Set xlApp = CreateObject("Excel.Application")
              'On défini le nombre d'onglets (ici 2)
                   xlApp.SheetsInNewWorkbook = 2
              'On ajoute un classeur
                   Set xlBook = xlApp.Workbooks.Add
             'On donne un nom au classeur
                   xlBook.SaveAs (n & ".xlsx")
             'On rend le classeur visible
                 ' xlApp.Visible = True
             'On créer l'objet onglet dans le nouveau classeur créé
                  Set xlSheet = xlBook.Worksheets(1)
            'On affecte un nom aux l'onglets
                 xlSheet.Name = "Janvier2011"
                 
                Call copiercoller(n)  'tout fonctionne jusqu'ici, c'est lorsque j'appelle copiercoller que ca bugg....             
            'on libère l'objet onglet pour pouvoir en créer un nouveau ... etc
                Set xlSheet = Nothing
       xlBook.Close SaveChanges:=True
       xlApp.Quit
    End If
    End Sub
    
    
    
    Sub copiercoller(u As String)
    
    
    Dim fSource As Worksheet
    Dim fDest As Worksheet
    Dim i As Long
    Dim idest As Long
     
    idest = 1
    
    Set fSource = Worbooks("JGH22.xlsm").Sheets("masterliste")  
     
    For i = 2 To fSource.Range("A:A").End(xlDown).Row
     
       If fSource.Range("A" & i).Value = u Then
       
     'Workbooks.Open Filename:="C:\Users\Owner\Desktop\JGH2.xlsm"
     Set fDest = Workbooks(u & ".xlsx").Sheets("feuil2")
          fSource.Range("A" & i & ":z" & i).Copy fDest.Range("A" & idest)
             idest = idest + 1
             'Workbooks("JGH2.xlsm").Close SaveChanges:=True
            End If
     
    Next i
    End Sub
    Voila, tout ce code me permet de crer un classeur avec chaque nom XXX contenu dans la liste de la feuil2, ensuite je verifie si ce nom XXX se trouve ds la liste de masterliste si c est le cas, je cree un classeur a son nom XXX.
    Pour la derniere partie, ce que je voudrais c'est copier toute les lignes de la feuille masterliste qui on le meme nom XXX, et ce dans le classeur nouvellement creer potant le nom XXX .

    Vous savez tout,

    Merci de m'aider....

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

Discussions similaires

  1. Réponses: 12
    Dernier message: 27/07/2014, 10h51
  2. Réponses: 4
    Dernier message: 09/06/2014, 19h25
  3. recopie des donnees d'un onglet excel dans une feuille d'un autre fichier
    Par anaylane dans le forum Macros et VBA Excel
    Réponses: 18
    Dernier message: 06/05/2010, 16h12
  4. Réponses: 2
    Dernier message: 19/01/2010, 11h08
  5. Réponses: 5
    Dernier message: 07/01/2006, 16h55

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