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 :

Déplacer des lignes dans une autre feuille


Sujet :

Macros et VBA Excel

  1. #1
    Membre confirmé Avatar de dj-julio
    Profil pro
    Inscrit en
    Décembre 2005
    Messages
    745
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France, Finistère (Bretagne)

    Informations forums :
    Inscription : Décembre 2005
    Messages : 745
    Points : 625
    Points
    625
    Par défaut Déplacer des lignes dans une autre feuille
    Bonjour,

    J'ai 2 feuilles dans le même document Excel (Feuille : "ARCHIVES" et "DETRUIT2")
    ces 2 feuilles sont du même format : la ligne 1 comporte les en-tête (Nom, prénom, adversaire, N° de sinistre, date sinistre, date destruction, nom de la chemise et N° de la chemise).
    Il faut que je déplace les lignes dont la date de destruction (Date destruction) et égale à année actuelle -1 an (soit 2006).
    j'arrive à isoler la ligne que je souhaite (dans la feuille "ARCHIVES", mais je ne sais pas comment la coller dans la 1ère ligne vide de la feuille "DETRUIT2").
    Cette action est faite au click sur un bouton et va agire sur de nombreux enregistrements (sur une feuille : ARCHIVES qui fait dans les 50 000 lignes).

    Merci de votre aide.

  2. #2
    Membre confirmé

    Profil pro
    Inscrit en
    Octobre 2004
    Messages
    453
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2004
    Messages : 453
    Points : 520
    Points
    520
    Par défaut
    Essaies :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    Worksheets.("DETRUIT2").Cells((Worksheets("DETRUIT2").UsedRange.Rows.Count + 1), 1).Paste

  3. #3
    Membre confirmé Avatar de dj-julio
    Profil pro
    Inscrit en
    Décembre 2005
    Messages
    745
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France, Finistère (Bretagne)

    Informations forums :
    Inscription : Décembre 2005
    Messages : 745
    Points : 625
    Points
    625
    Par défaut
    Merci, je vais essayer ça dès demain !!
    maintenant pour supprimer une ligne entière (en la supprimant vraiment, pas seulement son contenu), je n'y arrive pas non plus

    si par exemple dans la ligne 5 j'efface ce qu'elle contient, je veux que toutes les lignes qui se situent en dessous de la ligne 5 remontent d'1 cran.

    Merci encore !!

  4. #4
    Membre confirmé

    Profil pro
    Inscrit en
    Octobre 2004
    Messages
    453
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2004
    Messages : 453
    Points : 520
    Points
    520
    Par défaut
    Quelque chose comme ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    Worksheets("ARCHIVES").Cells(5,1).EntireRow.Delete xlShiftUp
    A+

  5. #5
    Membre confirmé Avatar de dj-julio
    Profil pro
    Inscrit en
    Décembre 2005
    Messages
    745
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France, Finistère (Bretagne)

    Informations forums :
    Inscription : Décembre 2005
    Messages : 745
    Points : 625
    Points
    625
    Par défaut
    Super !!!
    La suppression marche
    Merci beaucoup !

    Je suis une grosse m**** en vba ^^ je préfère le php quand même.

  6. #6
    Membre confirmé Avatar de dj-julio
    Profil pro
    Inscrit en
    Décembre 2005
    Messages
    745
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France, Finistère (Bretagne)

    Informations forums :
    Inscription : Décembre 2005
    Messages : 745
    Points : 625
    Points
    625
    Par défaut
    Par contre j'essaie de copier coller une ligne
    je fais ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    Private Sub CommandButton1_Click()
       Worksheets("Feuil1").Rows(5).EntireRow.Copy
       Worksheets("Feuil2").Cells((Worksheets("Feuil2").UsedRange.Rows.Count + 1), 1).Paste
     
    End Sub
    Le nom des feuilles c'est juste pendant mes tests l'erreur n'est pas là.

    Il me renvoie une erreur 438
    "Propriété ou méthode non gérée par cet objet".

    désolé et merci encore pour cettd aide !

  7. #7
    Membre confirmé

    Profil pro
    Inscrit en
    Octobre 2004
    Messages
    453
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2004
    Messages : 453
    Points : 520
    Points
    520
    Par défaut
    À quelle ligne envoit-il l'erreur?

  8. #8
    Membre confirmé Avatar de dj-julio
    Profil pro
    Inscrit en
    Décembre 2005
    Messages
    745
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France, Finistère (Bretagne)

    Informations forums :
    Inscription : Décembre 2005
    Messages : 745
    Points : 625
    Points
    625
    Par défaut
    Sur la ligne où l'on colle
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
       Worksheets("Feuil2").Cells((Worksheets("Feuil2").UsedRange.Rows.Count + 1), 1).Paste
    la copie se déroule très bien

  9. #9
    Membre confirmé

    Profil pro
    Inscrit en
    Octobre 2004
    Messages
    453
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2004
    Messages : 453
    Points : 520
    Points
    520
    Par défaut
    Quand il n'y a rien sur une feuille, l'utilisation de la propriété UsedRange provoque une erreur. Si c'est le problème, il faut ajouter qqe chose comme :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    Set rng as Range
     
    On Error Resume Next
    set rng = Worksheets("Feuil2").UsedRange
    If Err.Number = 0 then
      Worksheets("Feuil2").Cells(rng.Rows.Count + 1), 1).Paste
    Else
      Worksheets("Feuil2").Cells(1).Paste
      Err.Clear
    End If
    On Error Goto 0

  10. #10
    Membre confirmé Avatar de dj-julio
    Profil pro
    Inscrit en
    Décembre 2005
    Messages
    745
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France, Finistère (Bretagne)

    Informations forums :
    Inscription : Décembre 2005
    Messages : 745
    Points : 625
    Points
    625
    Par défaut
    ReBonjour

    je viens d'essayer tout ça et ça ne fonctionne toujours pas pour la copie, il y a la même erreur que chez moi.

    LA 2nde feuille n'est pas vide, je fais ça :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Worksheets("Feuil2").UsedRange.Rows.Count + 1), 1).SpecialPaste xlPasteAll
    Ou alors

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Worksheets("Feuil2").Cells((Worksheets("Feuil2").UsedRange.Rows.Count + 1), 1).Paste
    Il me met toujours cette erreur :
    Il me renvoie une erreur 438
    "Propriété ou méthode non gérée par cet objet".


    Il copie bien la ligne voulue (je peux la coller manuellement après).

    Merci

  11. #11
    Inactif  
    Avatar de ouskel'n'or
    Profil pro
    Inscrit en
    Février 2005
    Messages
    12 464
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 12 464
    Points : 15 546
    Points
    15 546
    Par défaut
    Une idée, oui. Tu ne peux avoir d'instruction entre la copie et le collage
    Déjà, pour avoir la première ligne vide de la colonne A, j'utiliserais une autre syntaxe, ensuite, pour copier, et en instanciant Feuil1 et Feuil2 pour simplifier le code
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    Dim NoLigne as integer
    Dim FL1 as worksheet
    Dim FL2 as worksheet
        NoLigne = Worksheets("Feuil2").Cells(Worksheets("Feuil2").Cells(Columns(1).Cells.Count, 1).End(xlUp).Row,1)
        Set FL1 = worksheets("Feuil1")
        Set FL2 = worksheets("Feuil2")
        FL1.Rows(5).EntireRow.Copy FL2.Rows(NoLigne)
    Si tu as une recherche à effectuer afin de trouver le N° de ligne à copier (ici la ligne 5) tu la fais avant ce code.
    A+

  12. #12
    Membre confirmé Avatar de dj-julio
    Profil pro
    Inscrit en
    Décembre 2005
    Messages
    745
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France, Finistère (Bretagne)

    Informations forums :
    Inscription : Décembre 2005
    Messages : 745
    Points : 625
    Points
    625
    Par défaut
    C'est presque bon, cependant si j'utilise :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    NoLigne = (FL2.UsedRange.Rows.Count + 1) 'Renvoi la bonne ligne si il n'y a rien eu d'écris dedans avant.
    NoLigne = FL2.Cells(Columns(1).Cells.Count, 1).End(xlUp).Row 'Renvoi que si la 1ere colonne est vide
    En fait il faut que ça me renvoit le N° de la 1ère ligne vide qu'il croise, même si il y a déjà eu des inscriptions dedans et qu'elles ont été effacées et même si il y a des lignes remplies après.

  13. #13
    Inactif  
    Avatar de ouskel'n'or
    Profil pro
    Inscrit en
    Février 2005
    Messages
    12 464
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 12 464
    Points : 15 546
    Points
    15 546
    Par défaut
    Alors utilise
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
        NoLigne = Range("A1").SpecialCells(xlCellTypeLastCell).Row +1
    A+

  14. #14
    Membre confirmé Avatar de dj-julio
    Profil pro
    Inscrit en
    Décembre 2005
    Messages
    745
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France, Finistère (Bretagne)

    Informations forums :
    Inscription : Décembre 2005
    Messages : 745
    Points : 625
    Points
    625
    Par défaut
    Je suis vraiment trop nul :'(
    le code que tu m'as donné me renvois à la 1ère ligne vide qu'il rencontre mais qui n'a jamais été remplie.

    Donc au lieu de me renvoyer la ligne 2 (qui est vide également), il me renvoie la 6500 :s

  15. #15
    Membre confirmé Avatar de dj-julio
    Profil pro
    Inscrit en
    Décembre 2005
    Messages
    745
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France, Finistère (Bretagne)

    Informations forums :
    Inscription : Décembre 2005
    Messages : 745
    Points : 625
    Points
    625
    Par défaut
    Personne ne connait une fonction qui permet de savoir si une ligne toute entière est vide ?
    ou tout du moins vide sur les colonnes allants de A à H ?

    Sinon peut-être faut-il que je regarde dans une boucle chaque case pour savoir si il est vide, mais à mon avis ça va prendre un temps fou :s

  16. #16
    Membre confirmé

    Profil pro
    Inscrit en
    Octobre 2004
    Messages
    453
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2004
    Messages : 453
    Points : 520
    Points
    520
    Par défaut
    Essayes ça :

    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
     
    Function LigneVide(ByRef Plage As Range) As Boolean
        Dim rng As Range
     
        On Error Resume Next
        Set rng = Plage.SpecialCells(xlCellTypeConstants)
        If Not Err.Number = 0 Then
            Err.Clear
            Set rng = Plage.SpecialCells(xlCellTypeFormulas)
            If Not Err.Number = 0 Then
                Err.Clear
                LigneVide = True
            End If
        End If
        On Error GoTo 0
        Set rng = Nothing
    End Function
     
    Sub TestLigneVide()
        MsgBox CStr(LigneVide(Range("A1:H1")))
    End Sub

  17. #17
    Inactif  
    Avatar de ouskel'n'or
    Profil pro
    Inscrit en
    Février 2005
    Messages
    12 464
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 12 464
    Points : 15 546
    Points
    15 546
    Par défaut
    Pour savoir si une ligne est vide, tu as
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
        Lignevide = Range("IV" & NoLigne).End(xlToLeft).Column = 1 _
                    and Range("A" & NoLigne) = ""
    Pour savoir si tu as une ligne vide dans une plage allant de la ligne 1 à la dernière ligne renseignée, tu as donc :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    Sub test()
    Dim FL1 As Worksheet, LigneVide As Boolean
        Set FL1 = Worksheets("Feuil1")
        DerLig = FL1.Range("A1").SpecialCells(xlCellTypeLastCell).Row
        Set Plage = FL1.Range(Cells(1, 1), Cells(DerLig, 1).Address)
        For Each Cell In Plage
             LigneVide = FL1.Range("IV" & Cell.Row).End(xlToLeft).Column = 1 _
                         And FL1.Range("A" & Cell.Row) = ""
             MsgBox "Ligne " & Cell.Row & " est-elle vide ? : " & LigneVide
        Next
    End Sub
    Bonne journée

Discussions similaires

  1. Copier des lignes dans une autre feuille sous condition
    Par Maya06 dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 24/05/2014, 20h57
  2. [XL-2007] Déplacer des lignes dans un autre onglet selon valeur d'une cellule
    Par Accessifiante dans le forum Macros et VBA Excel
    Réponses: 13
    Dernier message: 06/05/2014, 16h45
  3. Déplacer une ligne dans une autre feuille en fonction d'un critère
    Par moi244 dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 08/10/2011, 15h30
  4. Réponses: 82
    Dernier message: 05/02/2011, 14h34
  5. [XL-2003] Copier des lignes dans une autre feuille à la première ligne vide
    Par PasDan dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 30/09/2010, 13h34

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