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 :

Copie de colonnes non consécutives vers la première ligne vide d'un autre fichier [XL-2013]


Sujet :

Macros et VBA Excel

  1. #1
    Membre du Club
    Homme Profil pro
    Technicien réseau
    Inscrit en
    Février 2015
    Messages
    78
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Technicien réseau

    Informations forums :
    Inscription : Février 2015
    Messages : 78
    Points : 55
    Points
    55
    Par défaut Copie de colonnes non consécutives vers la première ligne vide d'un autre fichier
    Bonjour,

    Après plusieurs recherches sur le forum, j'ai fait cette macro:
    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 import()
    Dim classeurSource As Workbook, classeurDestination As Workbook
    Dim lignecible As Long
    Dim colsource
     
     
    Set classeurSource = Application.Workbooks.Open("U:\Eléments linéaires de structure (poutres 15x15, longrines ...)\Classeur1.xlsx", , True)
    Set classeurDestination = ThisWorkbook
    Set colsource = classeurSource.Sheets("Feuille 1").Range(Columns(1), Columns(8), Columns(9), Columns(10))
     
    lignecible = Range("A" & Rows.Count).End(xlUp).Row + 1
    classeurDestination.Sheets("Feuil1").Range("A" & lignecible) = colsource.Value
     
    classeurSource.Close False
     
    End Sub
    Mais elle ne fonctionne pas.

    Ce que j'aimerais, c'est copier les colonnes A, H, I, J du classeur1, de la cellule 7 à la dernière non vide(j'ai pas encore fait des recherches pour ça) et sans la mise en forme, à la suite d'un autre classeur (première cellule vide de la colonne A).

  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,

    Tu ne peux pas copier une colonne complète et la coller ailleurs qu'en ligne 1.
    Il te faudrait déterminer le nombre de lignes à copier et sélectionner les plages nécessaires.

    ex:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
        Range("A1:A12,C1:C12,E1:E12").Copy
        Range("A13").PasteSpecial Paste:=xlPasteValues
    Dans ce cas-ci, les plages non contigües (A, C et E) seront copiées, mais collées une à côté de l'autre (A à C).
    Je ne sais pas si c'est ce que tu veux comme résultat, par contre
    MPi²

  3. #3
    Membre du Club
    Homme Profil pro
    Technicien réseau
    Inscrit en
    Février 2015
    Messages
    78
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Technicien réseau

    Informations forums :
    Inscription : Février 2015
    Messages : 78
    Points : 55
    Points
    55
    Par défaut
    J'ai essayé mais je bloque toujours à la ligne des ranges:
    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
    Sub import()
    Dim classeurSource As Workbook, classeurDestination As Workbook
    Dim lignecible As Long
    
    
    Set classeurSource = Application.Workbooks.Open("U:\Eléments linéaires de structure (poutres 15x15, longrines ...)\Classeur1.xlsx", , True)
    
    classeurSource.Sheets("Feuille 1").Range("A7:A100,H7:H100,I7:I100,J7:J100").Copy
    
    Set classeurDestination = ThisWorkbook
    
    lignecible = Range("A" & Rows.Count).End(xlUp).Row + 1
    classeurDestination.Sheets("Feuil1").Range("A" & lignecible).PasteSpecial Paste:=xlPasteValues
    
    classeurSource.Close False
    
    End Sub

  4. #4
    Expert éminent sénior
    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
    Points : 18 674
    Points
    18 674
    Par défaut

    Bonjour,

    la règle de base est le respect de la hiérarchie objet d'Excel …

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    Sub Demo()
        Application.ScreenUpdating = False
                                L& = Feuil1.Cells(Rows.Count, 1).End(xlUp).Row + 1
        Workbooks.Open "U:\Eléments linéaires de structure (poutres 15x15, longrines ...)\Classeur1.xlsx", , True
     
        With ActiveWorkbook.Worksheets("Feuille 1")
                                               R& = .Cells(.Rows.Count, 1).End(xlUp).Row - 6
               Feuil1.Cells(L, 1).Resize(R).Value = .[A7].Resize(R).Value
            Feuil1.Cells(L, 2).Resize(R, 3).Value = .[H7].Resize(R, 3).Value
            .Parent.Close False
        End With
    End Sub
    _____________________________________________________________________________________________________

    Merci de cliquer sur pour chaque message ayant aidé puis sur pour clore cette discussion …

    _____________________________________________________________________________________________________
    Je suis Charlie - Je suis Bardo
    C'est parce que la vitesse de la lumière est plus rapide que celle du son que tant de gens paressent brillants avant d'avoir l'air con ! (Thomas Boishardy)

  5. #5
    Membre du Club
    Homme Profil pro
    Technicien réseau
    Inscrit en
    Février 2015
    Messages
    78
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Technicien réseau

    Informations forums :
    Inscription : Février 2015
    Messages : 78
    Points : 55
    Points
    55
    Par défaut
    J'ai trouvé pourquoi la ligne copy bloquait.
    A la fin du classeur1 (fichier exporté depuis un logiciel donc non modifiable), Il y a du texte
    Nom : CaEtt5U.png
Affichages : 495
Taille : 8,3 Ko

    Quand je supprime les lignes (que le texte ne suffit pas), je n'ai plus l'erreur.
    Il y a-t-il un moyen de contourner ça alors qu'on ne peut pas modifier le classeur1?

  6. #6
    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
    Si tu copies seulement la partie du haut avec les données, est-ce que ça fonctionne ?
    Si oui, tu pourrais juste changer la méthode pour trouver le nombre de lignes à copier.
    Autrement, je ne vois pas pourquoi ces 2 lignes t'empêcheraient de copier les données..(?)
    MPi²

  7. #7
    Membre du Club
    Homme Profil pro
    Technicien réseau
    Inscrit en
    Février 2015
    Messages
    78
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Technicien réseau

    Informations forums :
    Inscription : Février 2015
    Messages : 78
    Points : 55
    Points
    55
    Par défaut
    Oui ça fonctionne.

    Sinon je peux aussi exporter depuis le logiciel en .csv. Quand j'ouvre le fichier csv, il y a bien les colonnes et il n'y a pas de texte à la fin.

    Nom : kkXhn7L.png
Affichages : 530
Taille : 10,0 Ko

    Mais lorsque je l'ouvre pour faire la copy (en lecture seule), il se remet en forme avec les virgules donc toute les information sont sur une colonne.

    Nom : FGdWhfO.png
Affichages : 462
Taille : 18,0 Ko

  8. #8
    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
    En fait, de la façon dont tu procèdes, tu lis de la dernière ligne vers la première pour trouver le nombre de lignes.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    nbLignes = Cells(Rows.Count, "A").End(xlUp).row
    Comme il y a ce texte, ça s'arrête inévitablement à ces lignes. Soit tu décales de 2 lignes plus haut (Offset(-2,0)), soit tu fais l'inverse et tu pars d'en haut vers le bas ou encore utiliser
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    nbLignes = Range("A2").CurrentRegion.Rows.Count
    Comme il y a des espaces avant les 2 lignes en question, celles-ci ne devraient pas être incluses
    MPi²

  9. #9
    Expert éminent sénior
    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
    Points : 18 674
    Points
    18 674
    Par défaut

    Franchement bizzzousnours si tu présentais clairement …

    En reprenant mon code, le problème de lignes parasites, c'est dans quel classeur ?

    Car si les données à copier sont contigües, utiliser soit la propriété CurrentRegion soit End(xlDown)

    Edit : parmi a été le plus rapide !
    C'est parce que la vitesse de la lumière est plus rapide que celle du son que tant de gens paressent brillants avant d'avoir l'air con ! (Thomas Boishardy)

  10. #10
    Membre du Club
    Homme Profil pro
    Technicien réseau
    Inscrit en
    Février 2015
    Messages
    78
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Technicien réseau

    Informations forums :
    Inscription : Février 2015
    Messages : 78
    Points : 55
    Points
    55
    Par défaut
    Marc, ça bloquait avec l'ancienne macro pas la tienne.
    J'ai essayé la tienne et ça fonctionne parfaitement. J'ai juste rajouté
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    PremiereLigneVide = Range("C65535").End(xlUp).Row + 1
    DerniereLigne = Range("A1").SpecialCells(xlCellTypeLastCell).Row
    Range("A" & PremiereLigneVide & ":" & "A" & DerniereLigne).EntireRow.Delete
    Pour supprimer les lignes qui me génait.

    Merci, c'est résolu.

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

Discussions similaires

  1. [XL-2003] copier plusieurs colonnes non consécutive avec .Columns()
    Par hantran dans le forum Macros et VBA Excel
    Réponses: 14
    Dernier message: 11/06/2018, 12h42
  2. [XL-2013] Copier colonnes non consécutives et les collées avec un écart de colonnes voulu
    Par namora dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 27/04/2015, 19h10
  3. [XL-2003] Taille de colonnes et première ligne vide.
    Par rsuinux dans le forum Excel
    Réponses: 3
    Dernier message: 17/09/2014, 15h27
  4. [XL-2007] récapitulatif avec colonnes non consécutives
    Par stephadm dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 23/05/2012, 07h38
  5. [XL-2007] copier/coller des cellules vers une première ligne vide
    Par aminee1666 dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 30/06/2011, 23h35

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