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 une plage et la coller dans la dernière plage vide


Sujet :

Macros et VBA Excel

  1. #1
    Futur Membre du Club
    Inscrit en
    Février 2008
    Messages
    8
    Détails du profil
    Informations forums :
    Inscription : Février 2008
    Messages : 8
    Points : 7
    Points
    7
    Par défaut Copier une plage et la coller dans la dernière plage vide
    Bonjour

    Je suis débutant en vba , et j'ai un problème
    S'il vous plaît je veux copier ma plage range(d1:n1) et la coller dans la dernière plage vide range (ai:ki) de ma feuille active.

    Merci à tous !

  2. #2
    Membre averti Avatar de tomy7
    Profil pro
    Étudiant
    Inscrit en
    Janvier 2008
    Messages
    540
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2008
    Messages : 540
    Points : 391
    Points
    391
    Par défaut re
    salut,
    essaye sa:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    worksheet("sheet(numero de ta sheet)").range(D1:N1).copy
    Do while activecell.value <> Empty 
    activecell.offset(ici tu peux mettre la ligne, la colonne).select
    selection.paste
    Loop
    tom

    "Barbar : The rest of the warrior"

    Into the wild....

  3. #3
    Invité
    Invité(e)
    Par défaut
    Bonjour Mosta2010,

    Je viens de répondre à votre message privé d'hier par une question, le nombre de colonnes semblant pouvoir être utilisées sur les 2 plages n'étant pas le même.

    Mais je viens de voir que si l'on tient compte des colonnes vides dans la plage de destination (5 colonnes) et que l'on considère que sur la plage source entre les colonnes F et L il ne faut en prendre qu'une sur 2 alors oui, on obtient le bon compte. Mais il faut vraiment le deviner en voyant la structure du fichier.

    Je modifie le code de votre précédent sujet en conséquence et je vous l'adresse.

  4. #4
    Invité
    Invité(e)
    Par défaut
    Si mon raisonnement est valable sur ma réponse précédente essayez ce code, sinon précisez :

    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
    Sub Open_copy()
    ws = ThisWorkbook.Name
    mf = ActiveSheet.Name
    Set mfl = Workbooks(ws).Sheets(mf)
    mfich = Range("A1").Value
    nfeuil = Range("C1").Value
     
    mpath = "C:\Rep\Rep1"
    Workbooks.Open (mpath & mfich)
    Sheets(nfeuil).Select
    dl =Range("A" & Range("A:A").Rows.Count).End(xlUp).Row + 1
    cdest = 1
        For c = 4 To 14
        d = mfl.Cells(1, c)
        Cells(dl, cdest) = d
        cdest = cdest + 2
        c = c + 1
        Next c
    End Sub

  5. #5
    Invité
    Invité(e)
    Par défaut
    Re,

    une petite modification à faire en ce qui concerne l'affectation de la date (pour que le jour ne soit pas mis à la place du mois et vice-versa si le jour est <= 12) insérer les 3 lignes en rouge entre les lignes en bleu :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    cdest = 1
        For c = 4 To 14
        d = mfl.Cells(1, c)
          If c = 6 Then
         d = DateSerial(Right(d, 4), Mid(d, 4, 2), Left(d, 2))
          End If
        Cells(dl, cdest) = d
        cdest = cdest + 2
    Dernière modification par AlainTech ; 08/02/2008 à 07h04.

  6. #6
    Invité
    Invité(e)
    Par défaut
    Suite à votre message privé pour enregistrer le fichier de destination en fin de traitement il suffit d'ajouter la ligne en rouge entre les 2 lignes en bleu :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Next c
    Workbooks(mfich & ".xls").Close SaveChanges:=True
    End Sub

  7. #7
    Futur Membre du Club
    Inscrit en
    Février 2008
    Messages
    8
    Détails du profil
    Informations forums :
    Inscription : Février 2008
    Messages : 8
    Points : 7
    Points
    7
    Par défaut Appliquer mon code sur toutes les ligne de ma feuille source
    Citation Envoyé par jacques_jean Voir le message
    Suite à votre message privé pour enregistrer le fichier de destination en fin de traitement il suffit d'ajouter la ligne en rouge entre les 2 lignes en bleu :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Next c
    Workbooks(mfich & ".xls").Close SaveChanges:=True
    End Sub
    Monsieur jacques_jean?

    S'il vous plais monsieur jacques_jean est ce qu'il a une possibilite d'appliquer votre code sur toutes les lignes de mon tableau source :

    Voir fichier classeur source ci-joint.il s'appel decharges.xls

    salutations
    mosta2010
    Fichiers attachés Fichiers attachés

  8. #8
    Invité
    Invité(e)
    Par défaut
    Bonjour Mosta2010,

    Le fichier à l'origine se nommait E130-2007.xls

    Ce nom fait supposer qu'il change chaque année ?

    Celui que vous m'adressez maintenant se nomme "Decharges.xls" ?

    Il faudrait me confirmer :

    1) j'utilise le nom actuel ou le précédent ?
    2) vous vous chargez de modifier quand nécessaire le nom dans le code ou vous voulez avoir une fenêtre qui s'affiche avec le choix du fichier à traiter ?

    Amicalement.

  9. #9
    Invité
    Invité(e)
    Par défaut
    Bonjour Mosta2010,

    Le fichier E130-2007 que vous aviez joint à l'origine comprenait une ligne et en colonne "A" un nom de fichier et en "C" un nom de feuille.

    Le fichier "DECHARGES" que vous m'avez adressé par message privé contient sur 17 lignes 6 noms de fichiers différents qui peuvent contenir chacun de 1 à 6 feuilles différentes.

    En fait maintenant le problème n'est plus le nombre de fichiers ou de feuilles (ce ne sera qu'un temps de traitement correspondant) mais si vous m'aviez adressé ce fichier à l'origine on aurait gagné du temps (bien sûr on peut toujours se dire que j'aurais pu y penser, mais !!!).

    Cela dit je n'abandonne pas mais il faut me laisser un peu de temps pour les modifications (il ne suffit pas de les écrire, il faut les tester) et même si je fais partie maintenant des inactifs, je ne travaille plus 10 heures par jour comme avant.

    Compte tenu du fait que le mercredi je suis toujours absent jusqu'à 14 heures je pense pouvoir vous adresser les modifications demain dans la soirée (sauf imprévu).

    Amicalement.

  10. #10
    Invité
    Invité(e)
    Par défaut
    Bonsoir Mosta2010,

    Ci-joint le fichier qui permet de copier toutes les lignes de celui-ci dans chaque fichier et feuille de destination.

    Faites des essais et tenez-moi au courant.

    http://s3.archive-host.com/membres/u...CHARGES_43.xls

  11. #11
    Futur Membre du Club
    Inscrit en
    Février 2008
    Messages
    8
    Détails du profil
    Informations forums :
    Inscription : Février 2008
    Messages : 8
    Points : 7
    Points
    7
    Par défaut attiendre des fichiers de destination par année
    Bonjour Mr JACQUES_JEAN,

    Je vient de recevoir votre réponse et j'ai pas pu vous répondre car j'été très occupé par le travail,
    JACQUES_JEAN, j'ai fait l'essaye toute et à marche maintenant toutes les lignes se distribuent vers leurs feuilles destinations, c'est magnifique et géniale, je vous remercier beaucoup.

    J’ai une petite suggestion sur mon applications, s’il vous plait, j’ai répartie mes classeurs de destination dans plusieurs chemins et par année, câd si tu vois dans le tableur décharge_43
    Tu trouve dans la colonne (A) les classeurs à ouvrir et dans la colonne (B) les date correspondants.

    Exemple,
    Pour ouvrir le classeur (22005259K) de la cellule (A1) votre code doit le chercher dans le chemin suivant N:\Transite\Amor\Situation A.Temporaire\Fiches Admission Temporaire\Documenti\AT EN COURS 2005 parce que la date correspondante appartient à l’année 2005 elle est le18/07/2005,

    Et pour ouvrir le classeur (22003150T ) votre code doit le chercher dans le chemin suivant N:\Transite\Amor\Situation A.Temporaire\Fiches Admission Temporaire\Documenti\AT EN COURS 2006 parce que la date correspondante appartient à l’année 2006 il est 30/05/2006,

    Et pour ouvrir le classeur (22004749F) votre code doit le chercher dans le chemin suivant N:\Transite\Amor\Situation A.Temporaire\Fiches Admission Temporaire\Documenti\AT EN COURS 2007 parce que la date correspondante appartient à l’année 2007 il est 08/08/2007 ....…. Etc…......

    Ci-après les chemins que j’ai.

    N:\Transite\Amor\Situation A.Temporaire\Fiches Admission Temporaire\Documenti\AT EN COURS 2000.
    N:\Transite\Amor\Situation A.Temporaire\Fiches Admission Temporaire\Documenti\AT EN COURS 2001.
    N:\Transite\Amor\Situation A.Temporaire\Fiches Admission Temporaire\Documenti\AT EN COURS 2002.
    N:\Transite\Amor\Situation A.Temporaire\Fiches Admission Temporaire\Documenti\AT EN COURS 2003.
    N:\Transite\Amor\Situation A.Temporaire\Fiches Admission Temporaire\Documenti\AT EN COURS 2004.
    N:\Transite\Amor\Situation A.Temporaire\Fiches Admission Temporaire\Documenti\AT EN COURS 2005.
    N:\Transite\Amor\Situation A.Temporaire\Fiches Admission Temporaire\Documenti\AT EN COURS 2006.
    N:\Transite\Amor\Situation A.Temporaire\Fiches Admission Temporaire\Documenti\AT EN COURS 2007.
    N:\Transite\Amor\Situation A.Temporaire\Fiches Admission Temporaire\Documenti\AT EN COURS 2008.
    N:\Transite\Amor\Situation A.Temporaire\Fiches Admission Temporaire\Documenti\AT EN COURS 2009.
    N:\Transite\Amor\Situation A.Temporaire\Fiches Admission Temporaire\Documenti\AT EN COURS 2010.


    Je sait que c’est pas difficile pour vous Monsieur JACQUES_JEAN ,

    S’il vous plait aidé moi.

    Salutations
    MOSTA2010

  12. #12
    Invité
    Invité(e)
    Par défaut
    Bonjour Mosta2010,

    Copiez ce code dans votre procédure (la ligne en bleu est une modification, les lignes en rouge sont des ajouts) et faites les essais.

    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
    Sub Bouton1_QuandClic()
    ws = ThisWorkbook.Name
    mf = ActiveSheet.Name
    dlsource = Range("A65536").End(xlUp).Row
        Set mfl = Workbooks(ws).Sheets(mf)
    mfich = Range("A1").Value
    mfeuil = Range("C1").Value
    mfichp = ""
    mfeuilp = ""
    mpath1 = "N:\Transite\Amor\Situation A.Temporaire\Fiches Admission Temporaire\Documenti\AT EN COURS "
    
        For n = 1 To dlsource
        mfich = mfl.Cells(n, 1)
        datan = mfl.Cells(n, 2)
        mpath = mpath1 & Right(datan, 4) & "\"
        mfeuil = mfl.Cells(n, 3)
        If mfich <> mfichp Then
            If mfichp <> "" Then
            Workbooks(mfichp & ".xls").Close SaveChanges:=True
            End If
        Workbooks.Open (mpath & mfich)
        Sheets(mfeuil).Select
        dldest = Range("A65536").End(xlUp).Row + 1
          ElseIf mfich = mfichp And mfeuil <> mfeuilp Then
          Sheets(mfeuil).Select
          dldest = Range("A65536").End(xlUp).Row + 1
        Else
        dldest = dldest + 1
        End If
        cdest = 1
        
            For c = 4 To 14
            d = mfl.Cells(n, c)
                If c = 6 Then
                d = DateSerial(Right(d, 4), Mid(d, 4, 2), Left(d, 2))
                End If
            Cells(dldest, cdest) = d
            cdest = cdest + 2
            c = c + 1
            Next c
        mfichp = mfich
        mfeuilp = mfeuil
        Next n
        
    Workbooks(mfich & ".xls").Close SaveChanges:=True
    Set mfl = Nothing
    
    End Sub
    Amicalement

  13. #13
    Futur Membre du Club
    Inscrit en
    Février 2008
    Messages
    8
    Détails du profil
    Informations forums :
    Inscription : Février 2008
    Messages : 8
    Points : 7
    Points
    7
    Par défaut GESTION DES MESSAGES D'ERREURES
    Bonjour monsieur jacques_jean ;

    En réponse de votre dernier message je vous informe que j’ai essayé le code, il est applicable merci beaucoup ; donc mon problème est résolu.


    Je vous demande s’il vous plait de m’aidé pour gérer les alertes d’erreurs en cas ou votre programme n’arrive pas à identifier les classeurs, et les feuilles de destinations càd que le classeur de destination n’existe pas ou son nom est différent de nom de classeur de la base source (range (« Ai »)).
    Ou la feuille de destination n’existe pas ou son nom est différent de nom de la feuille de la base source (range (« ci »)).

    1) Pour les classeurs de destination:

    Monsieur jacques_jean ; pour ce cas je veux q’un message personnel s’affiche et contient les élément suivants :
    1)*** Entête message : « gestion des fiches de décharge ».
    2)*** Message : « Attention la fiche de décharge n° » + « nom de classeur (range (« Ai »)). » est introuvable.

    - Exemple(1) : « Attention la fiche de décharge n° 22005259k est introuvable ».

    - Exemple(2): « Attention la fiche de décharge n° 22010406E est introuvable ».

    3)*** un seule bouton : ok
    Si je clique sur ce bouton ok (la procédure) ou l’opération de transfert des données doit se continuer. Pour les lignes ou il n’y a pas le problème. Et pour les lignes de notre deux exemples ou de notre cas ne doivent pas être traitées.


    2) Pour les feuilles de destination :

    Monsieur jacques_jean ; pour ce cas je veux un message personnel s’affiche et contient les élément suivants :

    1) *** Entête message : « GESTION DES ARTICLES EN AT».
    2) *** Message : « Attention l’article « nom de la feuille de destination » (range (« ci »)) » n’existe pas dans la fiche « nom de classeur (range (« Ai »)). », voulez vous le créer ou la corriger ?

    - Exemple(1) : « Attention l’article ANNEAUX EN ARGENT n’existe pas dans la fiche 22005259k , voulez vous le créer ou le corriger ?


    - Exemple(2) : « Attention l’article BOULES EN LAITON n’existe pas dans la fiche 22010406E , voulez vous le créer ou la corriger ?

    3)*** deus boutons : OUI et NON :
    - Si je clique sur Oui un input box doit s’afficher :
    1) Entête : « correction nom article»
    2) message à l’intérieur de l’input box : « merci de saisir le nom exact de l’article. »
    3) Message Par Défaut : « article »
    4) deux Boutons Ok & Annuler:

    *** Si je clique sur Ok le nom de la feuille doit se corriger après la saisie de ce nom dans l’input box. Et évidement la procédure doit se continuer à traiter les lignes a partie de la ligne ou elle a arrêtée câd a partir de la ligne ou le problème est corrigé.

    *** si je clique sur Annuler un msgbox doit s’afficher en me disant « êtes-vous sur de vouloir Annuler la correction ? » si je clique sur oui l’opération de transfert des données doit se continuer. Par traiter les lignes où il n’y a pas le problème. Et si je clique non je revient a l’input box précité.


    - Si je clique sur Non :
    (La procédure) ou l’opération de transfert des données doit se continuer. Par traiter les lignes où il n’y a pas le problème. Sans traiter la ligne ou il y a le problème.

    Merci de m’aider Monsieur jacques_jean.

    A VOTRE DISPOSITION .

    Salutations
    Mosta2010

  14. #14
    Futur Membre du Club
    Inscrit en
    Février 2008
    Messages
    8
    Détails du profil
    Informations forums :
    Inscription : Février 2008
    Messages : 8
    Points : 7
    Points
    7
    Par défaut
    donc mois je vais séléctionner la 2ème cas,que tu as proposé cad j'ai un autre moyen ( je vais ouvrir un neauvou classeur excel et je vais ouvrir en lecture seule le classeur ou il ya le problème manuellement ,en suite, je copié le nom de la feuille et je le coller dans son cellule (ci) dans le fichier source decharge.xls

    merci de me dire est ce que ca est faisable.

    et j'attendrais votre code pour l'essaye

    et merci beaucoup pour votre soutient

    MOSTA2010

  15. #15
    Invité
    Invité(e)
    Par défaut
    Bonjour Mosta2010,

    Voila ce que je vous propose (et que je suis en train de faire).

    Sur le fichier DECHARGES j'ai ajouté une feuille "Modele" qui correspond aux feuilles présentes dans vos autres fichiers à traiter.

    Lorsque vous choisirez "Créer la feuille" celle-ci sera incorporée dans le fichier de destination.

    J'ai supprimé les données en en-tête dans cette feuille et je n'ai laissé que les formules (il faudra bien sûr que vous complétiez ensuite).

    En ce qui concerne les 3 choix pour les feuilles manquantes, au lieu d'une Msgbox j'ai créé un formulaire qui comprendra les boutons correspondants à ces choix :

    1) Créer la feuille

    2) Modifier le nom de la feuille sur la ligne en cours dans le fichier DECHARGES

    3) Passer à la ligne suivante sans traiter celle en cours

    Si vous choisissez l'option 2 un Combobox s'affichera automatiquent en vous proposant le(s) noms(s) de la (des) feuille(s) présentent dans le fichier.

    Quand vous choisissez l'un d'eux ce nom écrasera automatiquement le nom présent dans la ligne en cours.

    J'espère que mon explication a été assez claire pour vous permettre de me dire si cela semble vous convenir.

    Amicalement.

  16. #16
    Invité
    Invité(e)
    Par défaut
    Bonjour Mosta2000,

    J'ai voulu répondre à votre message privé mais je ne le peux pas car il faut que vous supprimiez d'anciens messages.

    Vous avez atteint le maximum prévu.

    Donc ma réponse :

    J'ai regardé le fichier et je n'ai pas le problème.

    J'approfondis demain, car je ne vois qu'un endroit où ça pourrait arriver mais je ne vois pas comment.

    Je vous tiens au courant.

    Amicalement.

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

Discussions similaires

  1. Réponses: 10
    Dernier message: 15/05/2015, 09h36
  2. [XL-2007] Copier une plage dans une feuille et la coller dans une autre du même classeur.
    Par kedmard dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 23/04/2012, 14h55
  3. Réponses: 19
    Dernier message: 13/04/2012, 08h30
  4. copier une ligne et la coller dans une nouvelle
    Par alexkickstand dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 06/09/2007, 20h10
  5. [MySQL] copier une page html après nettoyage dans une base mysql en php
    Par araoudiou dans le forum PHP & Base de données
    Réponses: 1
    Dernier message: 21/05/2007, 21h49

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