Copier une ligne entière sur une autre feuille Si

Bonjour,

J'ai besoin d'un petit coup de main concernant une formule. J'ai beaucoup chercher sans succès.

Voici:

Si cellule AL5 = Retard Copie la ligne complète dans un fichier Excel différent qui se trouve dans un autre répertoire, vérifier la ligne suivante, Si cellule = AL6 = retard Copie ligne complète sous la précédante et ainsi de suite...

Si la cellule AL5 n'est pas égale à Retard, ne rien faire..

Voilà en gros ce que je dois faire. Malheureusement ,je ne connais pas VB..

MErci pour votre aide, et vos connaissances !!!

Salut,

Dans le Classeur2, j'ai placé un code qui contrôle si une ligne à l'indication "Retard" dans la colonne AL. Si oui, le Classeur1 est ouvert et cette ligne y est reportée. Le code contrôle s'il y a d'autres lignes à traiter et - quand toutes les lignes nécessaires sont reportéees, le Classeur1 est enregistré et refermé.

Tu ne pourras pas utiliser ce code simplement comme celà chez toi. Tu devras au préalable corriger le "chemin" d'accès au fichier "Classeur1" (selon l'arborescence de ton ordinateur) ainsi que - si tu veux l'utiliser avec tes fichiers à toi - tous les noms de référence aux deux fichiers. Sais-tu faire celà ?

A te relire

1'007classeur2.zip (7.83 Ko)
952classeur1.xls (16.00 Ko)

Bonjour,

Tout d,abord merci de me répondre aussi vite!

Bon j'ai fais les modification selon le nom du fichier et le chemin d'accès.

J'ai une erreur qui apparait soit: L'indice n'appartient pas à la sélection.

Si j,ouvre le déboggueur l'erreur se situe à la fin du code soit :

Workbooks("classeur1").Save

Workbooks("classeur1").Close

De plus, j'ai oublié de mentionner que vérification des données au classeur 2 doivent se faire à partir de la ligne 5 car il y à de cellules fusionnés (qui servent d'entête) Est ce que ca pourrais être lié au problème. ?

Si je peux me permettre une autre question, comment est ce que je peux faire l'insertion du bouton de copie que tu as mis au classeur 2 ?

Merci encore et désolé d'abuser!!

-- 09 Avr 2011, 06:04 --

J'ai joint une copie de mon fichier excel, pour donner une idée de ce à quoi il ressemble...

420classeur3.zip (33.64 Ko)

Re,

Pour mon code j'avais pensé que tu avais une première ligne remplie en ligne 5, plusieurs lignes à la suite et aucun vide entre elles. Tu (re)dis avoir des données depuis la ligne 5, mais dans ton fichier, la seule ligne exemple est sur la ligne 7 (ou alors d'autres exemples dès la ligne 10 avec des vides, quelle horreur !!***). Qu'en est-il exactement ? Si ta première ligne est la 7, il faut modifier le code en conséquence (Range("A7").Activate au lieu de Range("A5").Activate au début ?).

(*** si tu as vraiment des lignes vides, ce qu'il faut éviter au maximum avec Excel, il faudra revoir le code).

Lorsque ça bloque, est-ce que le Classeur1 est bien ouvert ? A-t-il été modifié (est-ce que les lignes y sont correctement collées) ?

Pour l'insertion du bouton, je suis embêté pour te répondre. Je suis en week-end au chalet et n'ai qu'un vieux PC à disposition, avec une ancienne version d'Excel ; je ne trouve pas comment insérer un bouton "normal" sur cet outil. Si personne ne t'informe avant, je vais vois ça dès lundi. Pour mon fichier de ce matin, j'ai alors introduit une forme et y ai affecté la macro (Insertion / Images / Formes automatique puis clic droit sur la forme et affecter une macro).

A plus

Bonjour,

Ok apres quelques ajustement pour mes feuilles, Ca fonctionne très bien. Le classeur1 fermé la copie fonctionne losrque j'appuis sur le boton (que j,ai réussit à lié a la macro!!).

Mais , car il y en a toujours un mais !!!

1- C'est que chaque fois que j'appuis sur le bouton de la macro a , il recopie les données. Ce qui serait bien c'est qu,il vérifie si il y a des données identique déjà inscrit , et qu'il ne les recopie pas.

Exemple copier ce qui n,est pas déjà sur la feuille.

Voilà , merci pour ta réponse et ce malgré le fais que tu sois au chalet,,,,,

Très apprécier ton aide.

Merci

Sub a()
Dim k As Integer, DerLig As Integer
Application.ScreenUpdating = False

Range("A7").Activate

Do While ActiveCell <> ""
    If ActiveCell.Offset(0, 37) = "Retard" Then
        k = k + 1
        Range(ActiveCell, ActiveCell.Offset(0, 46)).Copy
            If k = 1 Then
                Workbooks.Open Filename:= _
                "C:\Users\Cathie\Desktop\macro\Classeur1.xls"
            End If
        Workbooks("classeur1").Activate
        DerLig = Workbooks("classeur1").Sheets("Feuil1").Range("A65536").End(xlUp).Row
        With Workbooks("classeur1").Sheets("Feuil1")
                .Range("A" & DerLig + 1).Activate
                .Paste
        End With
        Application.CutCopyMode = False
    End If
    Workbooks("Suivi").Activate
    ActiveCell.Offset(1, 0).Activate
Loop

    Workbooks("classeur1").Save
    Workbooks("classeur1").Close

End Sub

-- 09 Avr 2011, 19:38 --

Et aussi une autre petite chose, est ce posssible de limite la copie au 400 premiere ligne du classeur 2. ?

Je sais pas si ca iderait le petit gèle au début lors de l'ouverture du fichier.

Salut Cathie,

On pourrait très bien ne pas recopier une ligne qui l'a déjà été précédemment. Peut-on faire le contrôle sur la base de la référence dans la colonne A ? Est-ce que cette référence est vraiment exclusive ? Sinon, quelles références exclusives peut-on utiliser (ça peut-être plusieurs colonnes s'il n'y a pas le choix, mais pas trop quand même ) ?

On peut très bien limiter le nombre de lignes contrôlées. Selon les modifications que tu as apportées au code, le premier contrôle s'effectue à la ligne 7. A quelle ligne exactement - selon la numérotation Excel - veux-tu que s'effectue le dernier contrôle ?

Je n'ai pas du tout compris ce passage, peux-tu préciser, s'il te plait, notamment de quel fichier parles-tu ? :

cathie_mck a écrit :

Je sais pas si ca iderait le petit gèle au début lors de l'ouverture du fichier

Cordialement.

Bonjour Yvouille,

Voici un peu de précision:

La colonne A de Excel est bien celle dont les données sont exclusive. Il s'agit de nom de dossier traiter et chacun doit être unique. On pourrais utiliser celle ci pour faire le controle et la vérification.

Pour la limte de ligne Excel à vérifier. Dans ma feuille 1 , il devrait y avoir environ 300 dossiers traiter, donc 300 lignes maximum. Question de limiter la recherche. Le premiere ligne a controler est en ligne 7 et la derniere devrait etre 345 ( en laissant un peu de latitude )

Voilà,

Je te remercie encore une fois pour aide... dison que c'est très pratique pour nous ignorant avec de grande idée!!!

Salut Cathie,

Je trouve ta demande un peu bizarre ; pourquoi veux-tu arrêter les contrôles tout d'abord après 400 lignes et maintenant "autour de la ligne 345" ? Soit il y a une raison bien précise - par exemple parce qu'il y a un deuxième tableau après, parce que tu as des lignes vides, ou je ne sais quoi - soit ça n'a pas de raison d'être.

Je te prierais aussi de bien vouloir me fournir tes deux fichiers afin que j'arrête de travailler à l'aveugle. Si tu ne peux pas placer tes fichiers sur le Forum, envoie-moi un courriel privé et je te fournirai une adresse sur laquelle tu pourras m'envoyer tes fichiers réels.

Pour les lignes copiées plusieurs fois, on pourrait garder le code actuel et supprimer les doublons par la suite dans le fichier récepteur. Il faudrait pour cela probablement trier les données de ce fichier selon les références en colonne A. Y vois-tu un inconvénient ?

Salut Cathie,

J'ai bien reçu tes fichiers en privé et t'en remercie. Tu peux voir sur mon profil où je réside ; effectivement que nous n'avons pas les mêmes fuseaux horaires

Dans ton fichier Suivi Assurance, tu as des inscriptions aux lignes 42, 443, 4444 et 44445 (par contre il n'y a rien à la ligne 444446 ) qui font interférence. Il faut absolument que tu les SUPPRIMES. Tu devrais éventuellement tout d'abord mettre en forme ce fichier en fonction des données qu'il va recevoir.

Ton fichier s'appelle Suivi Assurance, mais tu y fais référence dans ton code avec le nom SuiviAssurance (sans espace) ; ça ne peut pas passer.

Mon code passe en revue toutes les lignes du fichier Suivi de soumissions 2011 depuis la ligne 7 et tant qu'il n'y a pas de cellule vide en dessous. Dans le dernier fichier fourni, ça veut dire jusqu'à la ligne 80. Il n'y a donc pas de raison de modifier ce code - tel que tu le proposais - afin de contrôler "environ 400 lignes". Par contre il faut absolument qu'il n'y ait pas de ligne vide.

Dans le fichier Suivi Assurance, les nouvelles lignes sont rajoutées à la fin, sans être triées (en fait, toutes les lignes marquées "Retard" sont à nouveau copiées dans le fichier Suivi Assurance, à la suite des autres, puis les doublons sont supprimés ; il reste donc, tout à la fin, les nouvelles lignes non triées). Serait-il intéressant de trier ce fichier récepteur ?

Si une ligne n'est plus indiquée comme "en retard" ou si elle est supprimée dans le fichier Suivi de soumissions 2011, elle reste inscrite dans le fichier Suivi Assurance. Est-ce embêtant ? Si oui, la solution serait d'effacer à chaque fois toutes les lignes inscrites dans le fichier Suivi Assurance et de reporter à nouveau toutes les lignes marquées "Retard" dans le fichier de base (donc sans plus de suppression des doublons). A toi de dire.

J'avais créé ce code à la maison et maintenant je le modifie au travail. Bizarement il y a des passages qui coincent. Voici donc le nouveau code proposé (à remplacer dans son entièreté dans ton fichier Suivi de soumissions 2011) :

Option Explicit
Sub a()
Dim k As Integer, DerLig As Integer
Application.ScreenUpdating = False

Range("A7").Activate

Do While ActiveCell <> ""
    If ActiveCell.Offset(0, 37) = "Retard" Then
        k = k + 1
        Range(ActiveCell, ActiveCell.Offset(0, 46)).Copy

            If k = 1 Then
                Workbooks.Open Filename:="C:\Users\Cathie\Desktop\macro\Suivi Assurance.xls"
            Else
                Windows("Suivi Assurance.xls").Activate
            End If

            If Range("A4") = "" Then
                DerLig = 3
            Else
                DerLig = Sheets("Feuil1").Range("A65536").End(xlUp).Row
           End If

        Sheets("Feuil1").Range("A" & DerLig + 1).Activate
        Sheets("Feuil1").Paste
        Application.CutCopyMode = False

    Windows("Suivi de soumissions 2011.xls").Activate
    End If
    ActiveCell.Offset(1, 0).Activate
Loop

Windows("Suivi Assurance.xls").Activate
ActiveSheet.Range("$A$4:$IV$" & Range("A65536").End(xlUp).Row).RemoveDuplicates Columns:=Array(1), Header:=xlNo
ActiveWindow.SmallScroll Down:=-10000
Range("A1").Select
ActiveWorkbook.Close SaveChanges:=True

End Sub

A te relire.

EDIT DE 11:15 heures suissses : Utilise bien l'option "Code: Tout sélectionner" autrement tu risques d'avoir certaines lignes écrite sur deux lignes au lieu d'une seule. Ca concerne les lignes très longues telles que ActiveSheet.Range("$A$4:$IV$" & Range("A65536").End(xlUp).Row).RemoveDuplicates Columns:=Array(1), Header:=xlNo

Bonsoir ,

Je te remercie pour le nouveau code, je vais essayer le tout demain au travail.

Pour ce qui est de trier les lignes du fichier Suivi Assurance, se serait vraiment bien mais je ne veut pas abuser !!!

Déjà que si tout fonctionne bien, on sauvera beaucoup de temps !!!

On pourrait effacer a chaque fois les données du suivi d'assurance et refaire la mise a jour via un bouton .Aucune ligne n'est effacer du fichier suivi de soumissions, l'important est de savoir ce qui est en retard lors de la consultation donc si on efface le tout et remet a jour, on sera toujours a date !!!

Je vais essayer le tout demain au travail , ici il est 21 h00.

Je te donne des nouvelles dès que j'ai essayer le tout !!! J'ai vraiment hate d'essayer ton nouveau code !!!

Merci

a bientot

Salut Cathie,

cathie_mck a écrit :

On pourrait effacer a chaque fois les données du suivi d'assurance et refaire la mise a jour via un bouton

Alors essaye plutôt ce code qui répond exactement à ton indication ci-dessus : les anciennes données du fichier "Suivi Assurance" sont effacées et toutes les lignes marquées à ce moment-là par "Retard" dans le fichier "Suivi de soumissions 2011" sont reportées dans l'ordre dans lequel elles se trouvent dans ce fichier de base.

    Sub a()
    Dim DerLig As Integer
    Application.ScreenUpdating = False

    Workbooks.Open Filename:="C:\Users\Cathie\Desktop\macro\Suivi Assurance.xls"
    Rows("4:" & Sheets("Feuil1").Range("A65536").End(xlUp).Row).Delete Shift:=xlUp

    Windows("Suivi de soumissions 2011.xls").Activate
    Range("A7").Activate

    Do While ActiveCell <> ""
        If ActiveCell.Offset(0, 37) = "Retard" Then
            Range(ActiveCell, ActiveCell.Offset(0, 46)).Copy

            Windows("Suivi Assurance.xls").Activate

            If Range("A4") = "" Then
                DerLig = 3
            Else
                DerLig = Sheets("Feuil1").Range("A65536").End(xlUp).Row
            End If

            Sheets("Feuil1").Range("A" & DerLig + 1).Activate
            Sheets("Feuil1").Paste
            Application.CutCopyMode = False

            Windows("Suivi de soumissions 2011.xls").Activate
        End If

        ActiveCell.Offset(1, 0).Activate
    Loop

    Windows("Suivi Assurance.xls").Activate
    ActiveWindow.SmallScroll Down:=-10000
    Range("A1").Select
    ActiveWorkbook.Close SaveChanges:=True

    End Sub

A te relire

Bonjour,

Le code fonctionne très bien sur mes fichiers.

Vais-je oser?? Et oui , j'abuse, est ce que c'est possible d'effacer les données automatiquement, celle qui sont copier du fichier Suivi soumissions vers celui de suivi assurance ? Par exemple a chaque fois que le bouton a activer , on effece les données de la feuille et re copie les nouvelle données ?

Merci

Salut Cathie,

Je pense que tant que ton code ne te donne pas satisfaction, tu peux "abuser". A condition d'avoir une ligne quand même et de ne pas changer tes souhaits à tout bout de champs. Ce qui n'a pas été le cas jusqu'ici, me semble-t-il. Il y a aussi des possibilités que l'on découvre en cours de route et que l'on peut demander comme complément.

Je ne comprends pas très bien ta dernière demande :

cathie_mck a écrit :

Par exemple a chaque fois que le bouton a activer , on effece les données de la feuille et re copie les nouvelle données ?

Il me semble que j'ai déjà absolument répondu à cette attente, selon le texte ci-dessous :

Yvouille a écrit :

Alors essaye plutôt ce code ......... : les anciennes données du fichier "Suivi Assurance" sont effacées et toutes les lignes marquées à ce moment-là par "Retard" dans le fichier "Suivi de soumissions 2011" sont reportées dans l'ordre dans lequel elles se trouvent dans ce fichier de base.

As-tu vraiment testé ce dernier code ????

Autrement sois plus précise dans ta demande, indique bien de quel fichier, de quelles données, etc. tu parles.

A propos, à la fin de ce code, ton fichier "Suivi Assurance" est pour l'instant refermé automatiquement. Mais comme je pense que tu en as immédiatement besoin, lorsque tu effectues ce relevé des dossier "en retard", tu pourrais remplacer le code :

ActiveWorkbook.Close SaveChanges:=True

par

ActiveWorkbook.Save

A te relire

Bonjour, OK

J'ai eu un petit problème de version dans les code. Maintenant, c'est tester et fonctionnel . Un petit hic, lorsque le fichier Suivi Soumissions n'a aucun Retard, lorsque je procède à la mise à jour , il efface aussi mes ligne de 1 à 3 qui sont l'entête des colones. Est ce qu'il y a un méthodes pour geler celle-ci afin qu'elle ne soient jamais touchés ?

Si non , le code est parfait , et parfaitement fonctionnel.

Un petite question, si je voulais l'ajuster pour que d'autres données soient copier , ex: ce qui ce trouve en colonne G en prenant en considération un autre mot que Retard,en gardant les même paramètres.

Evidemment je l'ajusterais le nom des nouveaux fichiers et leur emplacement . Est ce que je peux seulement changer cette ligne

Do While ActiveCell <> ""
        If ActiveCell.Offset(0, 37) = "Retard" Then

Est ce que logiquement le chiffre 37 deviendrait 7 ?

Merci pour ton aide , c'est vraiment super que ca fonctionne aussi bien.

Salut Cathie,

cathie_mck a écrit :

lorsque le fichier Suivi Soumissions n'a aucun Retard, lorsque je procède à la mise à jour , il efface aussi mes ligne de 1 à 3 qui sont l'entête des colones

Je pense que tu as voulu dire : "... Il efface aussi mes lignes 1 à 3 DU FICHIER "SUIVI ASSURANCE" ....", ou bien je me trompe ?

Si oui, remplace la ligne

        Rows("4:" & Sheets("Feuil1").Range("A65536").End(xlUp).Row).Delete Shift:=xlUp

par

    If Sheets("Feuil1").Range("A65536").End(xlUp).Row > 3 Then
        Rows("4:" & Sheets("Feuil1").Range("A65536").End(xlUp).Row).Delete Shift:=xlUp
    End If
cathie_mck a écrit :

...si je voulais l'ajuster pour que d'autres données soient copier , ex: ce qui ce trouve en colonne G en prenant en considération un autre mot que Retard,.....Est ce que je peux seulement changer cette ligne .......

Euh, il me semble que ce n'est pas si simple

Dans la partie du code

    Do While ActiveCell <> ""
        If ActiveCell.Offset(0, 37) = "Retard" Then
        .........
    Loop

on cherche simplement si le mot retard se trouve dans la colonne AL, ligne après ligne ; si oui, on fait quelque chose de bien précis, si non, on passe à la ligne suivante.

Ce qui est copié est défini ailleurs, dans cette ligne

Range(ActiveCell, ActiveCell.Offset(0, 46)).Copy

c'est d'ailleurs toi-même qui a modifié ce chiffre 46 par rapport à mon premier code afin que la ligne concernée soit copiée de la colonne A à la colonne AU.

Donc, afin de répondre à ton attente .....

cathie_mck a écrit :

.... copier ce qui ce trouve en colonne G en prenant en considération un autre mot que Retard

il faudrait savoir 1) dans quelle colonne se trouve cet autre mot que "Retard", 2) quel est ce mot et 3) ne copier - selon ton souhait - que les données de la colonne G en modifiant la ligne indiquée ci-dessus qui sert à copier le bon texte en fonction de ces nouvelles données.

Et tu vas les coller où ces données ? Si tu n'as pas de bonnes connaissances des codes VBA, je ne sais pas si tu vas t'en sortir aussi facilement. Il faudrait alors à nouveau que tu précises exactement tes souhaits.

A te relire.

NB : Dès demain après-midi (chez nous ), je serais absent quelques jours.

Bonjour,

EN fait, je me suis mal exprimé, ce que je voulais dire était plutôt :

1) dans quelle colonne se trouve cet autre mot que "Retard"= Dans la colonne G

2) quel est ce mot = Ville Génie

3) Copie dans un nouveau fichier nommé --Rapport Mensuel --la ligne complète ( tout comme dans Suivi assurance)

La feuille s'appelle Genie

Je dois créer plusieurs feuilles dans ce nouveau fichier , chacune d'entre elles auront un nom distinct( il y avoir environ 15 feuilles)

Donc je pensais créer la macro et la recopier une a la suite de l'autre pour chacun des mot.

Voilà pourquoi je me disais que je pouvais peut-etre reprendre la même macro...

Suis-je dans la bonne voie ???

Salut Cathie,

cathie_mck a écrit :

lorsque le fichier Suivi Soumissions n'a aucun Retard, lorsque je procède à la mise à jour , il efface aussi mes ligne de 1 à 3 qui sont l'entête des colones

Merci de me dire si ma proposition pour régler ce problème te convient. Suite à ta réponse, je lirai ton dernier message.

Bonnes salutations.

Bonjour,

Tout est fonctionnel , les lignes de 1 a 3 ne s'efface pas lors de l'activation de la macro. Tout fonctionne et très bien.

Mission accomplie !!!! L'autre demande est un nouveau sujet mais a partir de celui ci.!!!

Merci pour ron aide !!!! c'est super !!

Salut Cathie,

Pour ta deuxième demande, tu peux essayer le code inscrit dans le fichier ci-joint, relié au bouton "Transfert" sur ta feuille "Soumission 2011". C'est un peu bricolé, mais ça fonctionne. Je pense que ton idée de reproduire autant de fois que nécessaire le premier code fourni est un peu compliquée.

Sur la feuille "Soumission 2011", il faut placer des références raccourcies correspondant aux textes recherchés. Vois dans le fichier exemple ci-joint (sur lequel j'ai effacé tes données si elles sont confidentielles) ces références placées de CA323 à CA340 et marquées en jaune, en regard de tes données de G323 à G340 marquées en vert.

[b]

Tu ne pourras pas faire d'essai avec le fichier ci-fourni, puisqu'il manque les données de base.[/b] Tranfert le code dans ton fichier à toi.

Ce code devrait faire ceci : Te demander d'enregistrer une copie de ton fichier sous un autre nom et à un endroit que tu dois choisir dans la boîte de dialogue qui s'ouvre, créer autant de feuille que nécessaire en fonction de tes différents critères de recherche (de G323 à G340) et y reporter les données correspondantes.

Si ça te convient, on pourrait encore voir comment indiquer des titres dans la première ligne de chacune des feuilles créées (autre que le titre que j'ai inscrit pour l'instant dans chaque feuille en A1) et travailler la mise en page.

A te relire.

Bonjour Yvouille,

Le code fonctionne très bien dans mes fichiers !!!! C'est vraiment parfait pour la copie des données de chaque service. Effectivement , ce serait super de pouvoir copier sur chaque feuille en A1 , Rapport Mensuel , en ligne A2 le nom du service selon G1 par exemple. Est ce qu'on pourrait définir la police , la couleur et souligné le nom du service (cellule A2) ? Et par la suite copier les lignes de titres des ligne 2, 3 et 4 du fichier suivi soumission à la suite en A3 du fichier Rapport?

Et derniere question,est ce que c'est possible de supprimer certaine colonne lors de la copie dans le fichier rapports, certaines des données n'ont pas besoin d'être connu , par exemple les colonnes X et W,ce n'est pas encore définitif que se sera celle-ci. Mais j'aimerais pouvoir l'adapter une fois la décision prise.

Et c'est tout , le reste est au delà de mes attentes !!!

Merci encore

Rechercher des sujets similaires à "copier ligne entiere feuille"