Copier les lignes d'un tableau d'une feuille à une autre selon une condition

claire05407

XLDnaute Nouveau
Bonjour à tous,

C'est la première fois que je poste une question sur ce forum car normalement je trouve toujours une réponse en cherchant dans les sujets passés, mais là je suis un peu perdue.

Je vais être simple : j'ai une feuille qui s'apelle "données" : chaque ligne de ce tableau correspond à 1 saisie (saisie faite grace à un formulaire en VBA).

Sur la feuille "Dashboard", j'aimerai que s'affichent toutes les saisies du tableau "données" dont la date de traitement (première colonne) se trouve dans le mois en cours (et seulement celles qui correspondent à cette condition, sans lignes blanches)

J'ai mis mon document de travail en pièce jointe pour plus de clarté.

J'espère que quelqu'un pourra m'aider.

Merci beaucoup

Claire
 

Pièces jointes

  • Dashboard Com v2.xlsm
    65.1 KB · Affichages: 505

ConsultantJP

XLDnaute Occasionnel
Re : Copier les lignes d'un tableau d'une feuille à une autre selon une condition

Bonjour,

Sans avoir ouvert ton docs, je peux te proposer de faire une boucle du type
Code:
Sub CopieColle_siMois()
For i = 2 To Range("A65536").End(xlUp).Row 'Ta derniere ligne
If Month(Range("A" & i).Value) = Month(Date) Then
Rows(i).Copy
ActiveSheet.Paste Destination:=Worksheets("Feuil2").Rows(Sheets("Feuil2").Range("A65536").End(xlUp).Row + 1)
Application.CutCopyMode = False
End If
Next
End Sub

Dis moi si c'est ok
@+
 

claire05407

XLDnaute Nouveau
Re : Copier les lignes d'un tableau d'une feuille à une autre selon une condition

Merci JP pour cette réponse si rapide, il semble y avoir un bug sur ta formule dans la ligne ci-dessous :

If Month(range("A" & I).Value) = Month(Date) Then

Peut-être que je devrais remplacer Date par une valeur (de type "Now") ? ...
 

KenDev

XLDnaute Impliqué
Re : Copier les lignes d'un tableau d'une feuille à une autre selon une condition

Bonjour Claire, JP,

Une proposition testée.

VB:
Option Explicit

Sub Test()
Dim i&, w As Worksheet
    Application.ScreenUpdating = False
    Worksheets("données").Cells.Copy
    Sheets.Add After:=Sheets(Sheets.Count)
    Set w = ActiveSheet
    w.Paste
    For i = w.Cells(Rows.Count, 1).End(xlUp).Row To 3 Step -1
        If Month(w.Cells(i, 1)) <> Month(Date) Or Year(w.Cells(i, 1)) <> Year(Date) Then w.Cells(i, 1).EntireRow.Delete
    Next i
    i = w.Cells(Rows.Count, 1).End(xlUp).Row + 1
    Do
        If w.Cells(i, 1).Interior.Color = Worksheets("données").Cells(3, 1).Interior.Color Then Cells(i, 1).EntireRow.Delete
    Loop Until w.Cells(i, 1).Interior.Color <> Worksheets("données").Cells(3, 1).Interior.Color
    i = w.Cells(Rows.Count, 1).End(xlUp).Row
    w.Rows("1:" & i).Copy Destination:=Worksheets("Dashboard").Cells(10, 1)
    Application.DisplayAlerts = False
    w.Delete
    Application.DisplayAlerts = True
    Worksheets("données").Cells.Copy
    Sheets("Dashboard").Activate
    Cells.PasteSpecial Paste:=xlPasteColumnWidths
    Application.ScreenUpdating = True
End Sub

Cordialement

KD
 

claire05407

XLDnaute Nouveau
Re : Copier les lignes d'un tableau d'une feuille à une autre selon une condition

Merci ça marche parfaitement :)

derniere petite question : est-ce que tu saurais faire en sorte que le tableau se copie sans mise en forme (ça fait buguer mes bouttons sur ma premiere page sinon)
 

KenDev

XLDnaute Impliqué
Re : Copier les lignes d'un tableau d'une feuille à une autre selon une condition

Re,

Juste retirer les lignes

Code:
Worksheets("données").Cells.Copy
(La deuxième, celle de la fin)

et

Code:
Cells.PasteSpecial Paste:=xlPasteColumnWidths

La mise en forme est conservée, sauf la largeur des colonnes (ce qui devait déplaire à tes boutons). Cordialement

KD
 

claire05407

XLDnaute Nouveau
Re : Copier les lignes d'un tableau d'une feuille à une autre selon une condition

Merci beaucoup de ton aide précieuse, j'espere ne pas abuser en posant une autre question .... serait-il d'adapter le code pour qu'il sorte les lignes du mois prochain et non pas du mois en cours ?

J'ai essayé de mon côté mais ce code est vraiment loin de ce que j'ai l'habitude de faire.

:)
 

KenDev

XLDnaute Impliqué
Re : Copier les lignes d'un tableau d'une feuille à une autre selon une condition

Bonjour Claire,

Remplacer
Code:
If Month(w.Cells(i, 1)) <> Month(Date) Or Year(w.Cells(i, 1)) <> Year(Date) Then w.Cells(i, 1).EntireRow.Delete
par
Code:
If Month(Date) <> 12 Then
            If Month(w.Cells(i, 1)) <> Month(Date) Or Year(w.Cells(i, 1)) <> Year(Date) Then w.Cells(i, 1).EntireRow.Delete
        Else
            If Month(w.Cells(i, 1)) <> 1 Or Year(w.Cells(i, 1)) <> Year(Date) + 1 Then w.Cells(i, 1).EntireRow.Delete
        End If

Cordialement

KD
 

AnneMa

XLDnaute Nouveau
Re : Copier les lignes d'un tableau d'une feuille à une autre selon une condition

Bonjour,

Je suis novice en VBA et je souhaite votre aide sur une macro que je voudrais réaliser et qui me permettra d'ouvrir 2 fichiers ( FichierA et FichierB ) et d'extraire la différence entre les 2 fichiers dans un fichier C

Pour vous mettre n peu dans le bain
Le fichierA contient des données relatives par exemple au 27/07
Le fichier B contient des données relatives par exemple au 27/07, 28/07 et 29/07
et moi je voudrais extraire le surplus du fichier B cad les données du 28 et 29 seulement et supprimer les données du 27
 

KenDev

XLDnaute Impliqué
Re : Copier les lignes d'un tableau d'une feuille à une autre selon une condition

bonjour Claire, Annema,

Oups oui il menquait un +1 :)

Code:
If Month(Date) <> 12 Then
            If Month(w.Cells(i, 1)) <> Month(Date) +1 Or Year(w.Cells(i, 1)) <> Year(Date) Then w.Cells(i, 1).EntireRow.Delete
        Else
            If Month(w.Cells(i, 1)) <> 1 Or Year(w.Cells(i, 1)) <> Year(Date) + 1 Then w.Cells(i, 1).EntireRow.Delete
        End If

Cordialement

KD
 

claire05407

XLDnaute Nouveau
Re : Copier les lignes d'un tableau d'une feuille à une autre selon une condition

Finalement, je me suis apperçue que ce n'est pas le mois de la date de saisie (colonne 1) qui m'importe mais la date de traitement (colonne 9), j'ai réussi à modifier le premier code parfaitement, mais le deuxième bug :
Code:
Sub Testmoispeochain()

Dim i&, w As Worksheet
    Application.ScreenUpdating = False
    Worksheets("données").range("A2:I6000").Copy
    Sheets.Add After:=Sheets(Sheets.Count)
    Set w = ActiveSheet
    w.Paste
    For i = w.Cells(Rows.Count, 1).End(xlUp).Row To 3 Step -1

    If Month(Date) <> 12 Then
            If Month(w.Cells(i, 9)) <> Month(Date) + 1 Or Year(w.Cells(i, 9)) <> Year(Date) Then w.Cells(i, 1).EntireRow.Delete
        Else
            If Month(w.Cells(i, 9)) <> 1 Or Year(w.Cells(i, 9)) <> Year(Date) + 1 Then w.Cells(i, 1).EntireRow.Delete
        End If
    Next i
    i = w.Cells(Rows.Count, 1).End(xlUp).Row + 1
    Do
        If w.Cells(i, 9).Interior.Color = Worksheets("données").Cells(3, 1).Interior.Color Then Cells(i, 1).EntireRow.Delete
    Loop Until w.Cells(i, 9).Interior.Color <> Worksheets("données").Cells(3, 1).Interior.Color
    i = w.Cells(Rows.Count, 1).End(xlUp).Row
    w.Rows("1:" & i).Copy Destination:=Worksheets("Dashboard").Cells(10, 1)
    Application.DisplayAlerts = False
    w.Delete
    Application.DisplayAlerts = True
    Worksheets("données").Cells.Copy
    Sheets("Dashboard").Activate
    Cells.PasteSpecial Paste:=xlPasteColumnWidths
    Application.ScreenUpdating = True
range("A3").Select

End Sub
 

AnneMa

XLDnaute Nouveau
Re : Copier les lignes d'un tableau d'une feuille à une autre selon une condition

Merci KenDev,

Cependant, la comparaison que je veux faire ne dépend pas de la date c t juste un exemple

Fichier A

titi 437 Active N O51PS5W 130 109 Y SWI JPY toto toto 03-sept-02
tata 8199 Active N B7UHPND 0020120 Y LOR EUR tete tete 14-janv-08

Fichier B

titi 437 Active N O51PS5W 130 109 Y SWI JPY toto toto 03-sept-02
tata 8199 Active N B7UHPND 0020120 Y LOR EUR tete tete 14-janv-08
mimi 4372 Active N O51PS5W 130 109 Y SWI JPY momo momo 03-sept-02
mama 8192 Active N B7UHPND 0020123 Y LOR EUR meme meme 14-janv-08
momo 1313 Active N S5CGMJK 3401994 Y TGT EUR mimi mimi 31-mars-03
 

AnneMa

XLDnaute Nouveau
Re : Copier les lignes d'un tableau d'une feuille à une autre selon une condition

Voilà les fichiers en pièces jointes
 

Pièces jointes

  • FichierA.xls
    28 KB · Affichages: 78
  • FichierB.xls
    32 KB · Affichages: 79
  • FichierA.xls
    28 KB · Affichages: 80
  • FichierB.xls
    32 KB · Affichages: 83
  • FichierA.xls
    28 KB · Affichages: 85
  • FichierB.xls
    32 KB · Affichages: 83

KenDev

XLDnaute Impliqué
Re : Copier les lignes d'un tableau d'une feuille à une autre selon une condition

Finalement, je me suis apperçue que ce n'est pas le mois de la date de saisie (colonne 1) qui m'importe mais la date de traitement (colonne 9), j'ai réussi à modifier le premier code parfaitement, mais le deuxième bug :

Re,

@Claire : C'est un peu vague. Que cherches tu à faire ? La macro bugue à quelle ligne ? quel est le message d'erreur ?

@Annema : Tu devrais créer un nouveau fil pour ton problème. Pas sur d'avoir le temps là..

Cordialement

KD
 

Discussions similaires

Statistiques des forums

Discussions
312 493
Messages
2 088 952
Membres
103 989
dernier inscrit
jralonso