Archive

Marsu23

XLDnaute Nouveau
Bonjour,

Voilà, j'aimerai archive dans une autre feuille des lignes avec la condition suivante : si l'action est 'traité et soldé' envoyer la ligne vers la feuille d'archive.

Merci d'avance,
Marsu23

[file name=ESSAI_20060218145238.zip size=14111]http://www.excel-downloads.com/components/com_simpleboard/uploaded/files/ESSAI_20060218145238.zip[/file]
 

Pièces jointes

  • ESSAI_20060218145238.zip
    13.8 KB · Affichages: 22

porcinet82

XLDnaute Barbatruc
Salut Marsu23, Dan,

Avec la macro suivante, ca devrait fonctionner :
Code:
Sub archive()
Dim i As Integer
Dim lig As Integer

Application.ScreenUpdating = False
Application.Goto Sheets('Données').Range('A3')
For i = 3 To Range('A65536').End(xlUp).Row
    If Cells(i, 5).Value = 'Traité et soldé' Then
        Rows(i).Copy
        Application.Goto Sheets('ARCHIVE').Range('A65536')
        Selection.End(xlUp).Offset(1, 0).Select
        lig = ActiveCell.Row
        Rows(lig).Select
        ActiveSheet.Paste
        Sheets('Données').Select
    End If
Next i
End Sub


Tiens nous au courant.

@+
 

Dan

XLDnaute Barbatruc
Bonjour à tous,

En relation avec le lien que je t'ai donné voici une macro qui fera ce que tu demandes.

Code:
Sub archive()
Dim i%
Dim ligne%
Application.ScreenUpdating = False
Sheets('Données').Range('A3').Activate
For i = 3 To Range('A65536').End(xlUp).Row
If Cells(i, 5).Value = 'Traité et soldé' Then
With Sheets('ARCHIVE')
 ligne = .Range('A65536').End(xlUp).Row + 1
    .Cells(ligne, 1) = Sheets('Données').Cells(i, 1).Value
    .Cells(ligne, 2) = Sheets('Données').Cells(i, 2).Value
    .Cells(ligne, 3) = Sheets('Données').Cells(i, 3).Value
    .Cells(ligne, 4) = Sheets('Données').Cells(i, 4).Value
    .Cells(ligne, 5) = Sheets('Données').Cells(i, 5).Value
    .Cells(ligne, 6) = Sheets('Données').Cells(i, 6).Value
    .Cells(ligne, 7) = Sheets('Données').Cells(i, 7).Value
End With
End If
Next i
Application.ScreenUpdating = False
End Sub

Les données seront copiées dans la feuille ARCHIVE et reste dans ta feuille données bien sûr.

Si pb n'hésite pas

;)
 

porcinet82

XLDnaute Barbatruc
Salut Marsu23, Dan,

Pour la macro que je t'avais proposée hier, voici la macro modifiée :

Code:
Sub archive()
Dim i As Integer
Dim lig As Integer

Application.ScreenUpdating = False
Application.Goto Sheets('Données').Range('A1')
For i = Range('A65536').End(xlUp).Row To 3 Step -1
    If Cells(i, 5).Value = 'Traité et soldé' Then
        Rows(i).Copy
        Application.Goto Sheets('ARCHIVE').Range('A65536')
        Selection.End(xlUp).Offset(1, 0).Select
        lig = ActiveCell.Row
        Rows(lig).Select
        ActiveSheet.Paste
        Sheets('Données').Select
        Rows(i).Delete
    End If
Next i
End Sub

Au cas ou tu prefererai la macro de Dan, je me suis aussi permis d'apporter la modification pour faire ce que tu souhaites :
Code:
Sub archive_v2()
Dim i%
Dim ligne%

Application.ScreenUpdating = False
Sheets('Données').Range('A3').Activate
For i = Range('A65536').End(xlUp).Row To 3 Step -1
    If Cells(i, 5).Value = 'Traité et soldé' Then
        With Sheets('ARCHIVE')
            ligne = .Range('A65536').End(xlUp).Row + 1
            .Cells(ligne, 1) = Sheets('Données').Cells(i, 1).Value
            .Cells(ligne, 2) = Sheets('Données').Cells(i, 2).Value
            .Cells(ligne, 3) = Sheets('Données').Cells(i, 3).Value
            .Cells(ligne, 4) = Sheets('Données').Cells(i, 4).Value
            .Cells(ligne, 5) = Sheets('Données').Cells(i, 5).Value
            .Cells(ligne, 6) = Sheets('Données').Cells(i, 6).Value
            .Cells(ligne, 7) = Sheets('Données').Cells(i, 7).Value
        End With
        Rows(i).Delete
    End If
Next i
Application.ScreenUpdating = True
End Sub


D'ailleurs une petite question a Dan qui je pense repassera par la, que veut dire la declaration Dim i%, et plus précisement le %?

Bon dimanche a tous,

@+
 

Dan

XLDnaute Barbatruc
Bonsoir,

Porcinet, ben voilà Celeda te l'a donné.

Comme tu le vois, '%' remplace 'as integer' dans une macro. Une découverte de Ti je crois. En tout cas c'est lui qui me l'a expliquée.

Une chose sur ta macro, je pense que tu omis l'instruction Application.ScreenUpdating = True à la fin de ton code.

Bon dimanche.


;)

Message édité par: dan, à: 19/02/2006 18:01
 

Discussions similaires

Statistiques des forums

Discussions
312 331
Messages
2 087 355
Membres
103 528
dernier inscrit
hplus