Ceci est une page optimisée pour les mobiles. Cliquez sur ce texte pour afficher la vraie page.

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

Dan

XLDnaute Barbatruc
Bonjour,

Voici une appli que j'avais réalisée pour MARC et qui fait ce que tu demandes. A adapter bien sûr.

le lien : Lien supprimé.

Vois si cela t'intéresse et si pb n'hésite pas.

A bientôt

 

Marsu23

XLDnaute Nouveau
Bonjour Dan,

Merci de m'avoir répondu, j'ai bien été voir mais pour l'instant je débute dans le VBA et là je nage... Peux-tu essayer de voir à peu prés comment faire sur mon fichier et je finirai si j'y arrive.
Merci d'avance,
Marsu23.
 

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

 

Marsu23

XLDnaute Nouveau
Salut Dan et Porcinet82,

Merci pour les macro que vous avait effectuées, mais mon souhait est de 'couper' les actions 'traiter' de la feuille données et les 'coller' dans la feuille archive. Est ce possible ?

A+ Marsu23.
 

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,

@+
 

Marsu23

XLDnaute Nouveau
Salut Porcinet,

Il y a une erreur de compilation sur la macro de Dan que tu as modifié.

&n bsp; Rows(i).Delete
Je ne comprend pas la phrase que tu as rajouter. Peux-tu m'éclaircir ?
Merci d'avance,

Marsu23.
 

Celeda

XLDnaute Barbatruc
Bonsoir,


VBA permet d'ajouter un caractère au nom d'une variable pour indiquer son type

Type de données :

Integer = % caractère de déclaration type
Long = &
Single = !
Double =#
Currency = @
String = $

Celeda
 

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

Les cookies sont requis pour utiliser ce site. Vous devez les accepter pour continuer à utiliser le site. En savoir plus…