Macro copier contenu de certains onglets

edi

XLDnaute Nouveau
Bonjour à tous,
J'ai un fichier excel avec 5 feuilles et la première est nommée « IG ».
L’objectif de la macro est que si les lignes des différentes feuilles remplissent certaines conditions, alors on doit copier certaines cellules de ces lignes dans la feuille « Alertes_recos ».
J’ai deux soucis avec ma macro:

1. La fonction if devrait remplir les trois conditions (Range("l" & i) = "Échéance proche" Or Range("l" & i) = "En retard" And Range("g" & i) = "DPO") et la cela ne fonctionne pas tel qu’écrit. La première condition à remplir est Range("l" & i) = "Échéance proche" Or Range("l" & i) = "En retard" et ensuite la dernière doit être remplie également.

2. Le deuxième souci est que je souhaite qu’à l’ajout d’une nouvelle ligne qui remplit les conditions dans l’une des feuilles, l’exécution de la macro puisse ajouter cette ligne et non pas dupliquer les autres résultats déjà affichés. (Actuellement lorsque j’exécute la macro deux fois, les lignes qui remplissent les conditions sont dupliquées dans l’onglet « Alertes_recos ».

La macro est en pièce jointe.
Merci de votre aide... je suis coincé.

Crdlt
Edi
 

Pièces jointes

  • Macro1.docx
    15 KB · Affichages: 36

Pierrot93

XLDnaute Barbatruc
Re : Macro copier contenu de certains onglets

Bonjour,

essaye peut être ceci :
Code:
If (Range("l" & i) = "Échéance proche" Or Range("l" & i) = "En retard") And Range("g" & i) = "DPO" Then

il eut été préférable de nous joindre un fichier excel avec le code à l'interieur plutôt qu'un word... plus facile pour tester..

bonne journée
@+
 

Pierrot93

XLDnaute Barbatruc
Re : Macro copier contenu de certains onglets

Re,

regarde ceci :
Code:
Sub MAJ()
Dim ws As Worksheet, x As Range, i As Long
For Each ws In Worksheets
    With ws
        For i = 2 To .Cells(.Rows.Count, 1).End(xlUp).Row
            If (.Cells(i, 6) = "Échéance proche" Or .Cells(i, 8) = "En retard") And .Cells(i, 4) = "DPO" Then
                Set x = Sheets("Alertes_Recos").Columns(1).Find(.Cells(i, 1), , xlValues, xlWhole, , , False)
                If Not x Is Nothing Then
                    .Range("a" & i & ":b" & i & ",e" & i & ",g" & i & ":h" & ",j" & i & ":l" & i).Copy Sheets("Alertes_Recos").Cells(Rows.Count, 1).End(xlUp)(2).Resize(, 8)
                End If
            End If
        Next i
    End With
Next ws
End Sub

verifie bien les numéros de colonnes.... il faut que tous les onglets aient la même construction...
 

edi

XLDnaute Nouveau
Re : Macro copier contenu de certains onglets

Re, J'ai essayé en adaptant les numéros de colonne mais la macro ne donne aucun résultat.
Pourtant les onglets ont les mêmes colonnes.

Sub MAJ()
Dim ws As Worksheet, x As Range, i As Long
For Each ws In Worksheets
With ws
For i = 2 To .Cells(.Rows.Count, 1).End(xlUp).Row
If (.Cells(i, 12) = "Échéance proche" Or .Cells(i, 12) = "En retard") And .Cells(i, 7) = "DPO" Then
Set x = Sheets("Alertes_Recos").Columns(1).Find(.Cells(i, 1), , xlValues, xlWhole, , , False)
If Not x Is Nothing Then
.Range("a" & i & ":b" & i & ",e" & i & ",g" & i & ":h" & ",j" & i & ":l" & i).Copy Sheets("Alertes_Recos").Cells(Rows.Count, 1).End(xlUp)(2).Resize(, 8)
End If
End If
Next i
End With
Next ws
End Sub
 

edi

XLDnaute Nouveau
Re : Macro copier contenu de certains onglets

Bonjour Pierrot,
Tu peux STP joindre le fichier avec la macro qui fonctionne... je ne sais pas qu'est-ce qui ne fait que ça ne fonctionne pas chez moi.
Encore merci pour ton aide.

Edi.
 

Pierrot93

XLDnaute Barbatruc
Re : Macro copier contenu de certains onglets

Re,

attention manquait un numéro de ligne :

Code:
Option Explicit
Sub MAJ()
 Dim ws As Worksheet, x As Range, i As Long
 For Each ws In Worksheets
     With ws
         For i = 2 To .Cells(.Rows.Count, 1).End(xlUp).Row
             If (.Cells(i, 6) = "Échéance proche" Or .Cells(i, 8) = "En retard") And .Cells(i, 4) = "DPO" Then
                 Set x = Sheets("Alertes_Recos").Columns(1).Find(.Cells(i, 1), , xlValues, xlWhole, , , False)
                 If Not x Is Nothing Then
                     .Range("a" & i & ":b" & i & ",e" & i & ",g" & i & ":h" & i & ",j" & i & ":l" & i).Copy Sheets("Alertes_Recos").Cells(Rows.Count, 1).End(xlUp)(2).Resize(, 8)
                 End If
             End If
         Next i
     End With
 Next ws
 End Sub
 

Discussions similaires

Réponses
7
Affichages
316
Réponses
7
Affichages
338

Statistiques des forums

Discussions
312 164
Messages
2 085 877
Membres
103 008
dernier inscrit
Ichaka