Macro pour copie de lignes dans un onglet (sous condition)

Bonjour à tous,

Je viens à vous car je suis bloqué depuis plusieurs heures sur un problème que je n'arrive pas à résoudre.

En effet, je me rends compte que celui-ci est difficilement réalisable sans passer par le VBA.

Je vous présente donc mon problème :

J'ai un fichier sur lequel je désire copier de façon automatique, des informations sous certaines conditions (exemple : " échec resp SFR " ) dans un autre onglet "Claims".

De façon plus précise, j'ai donc un fichier avec un onglet "Datas BITOOL":

1) Je veux copier dans l'onglet Claims, à partir de la colonne C4, puis C5, C6 etc

2) Le contenu que je veux copier est le n° de "projet spider" ( colonne J )de l'onglet " Datas BITOOL"

3) La condition : avoir dans l'onglet " Datas BITOOL" en colonne C " échec resp SFR ", sinon pas de copie.

J'espère que vous saurez m'aider à résoudre ce problème car je n'avance plus ...

Par ailleurs, j'ai pu voir différents post sur des problèmes du même type mais mon niveau en VBA qui est vraiment moyen ne me permet pas de les adapter à mon besoin, ou ne vain ..

Je vous remercie d'avance si vous pouvez me venir en aide ou alors me donner des conseils.

Bien cordialement,

Bonjour

raphael94310 a écrit :

Le contenu que je veux copier est le n° de "projet spider" ( colonne J )de l'onglet " Datas BITOOL"

On copie où dans la feuille CLAIMS ??

dans la feuille Datas BITOOL en colonne J, la cellule est parfois vide. Important ou pas ?

Autre chose, evite de mettre tes cellules en couleur Blanche. Utilise plutot l'option "aucun remplissage" De même de ne mettre en couleur que les cellule utilisées. Cela t'évitera d'augmenter le poids de ton fichier inutilement

Crdlt

Bonjour Dan,

Il me faut copier dans la cellule C4 et ainsi de suite, C5, C6, C7 etc .. les unes à la suite des autres.

J'ai commencé à essayer de faire quelque chose qui pour l'instant ne fonctionne pas :

Private Sub Worksheet_SelectionChange(ByVal Target As Range)

If Target.Count > 1 Then Exit Sub

Dim dl1 As Long ' dernière ligne

With Sheets(Target.Worksheet.Name)

dl1 = .Range("c65536").End(xlUp).Row

If Not Intersect(Target, Range("c2:c" & dl1)) Is Nothing Then

If Target.Value = "échec resp SFR" Then

Call ajoutlig("Claims", "c5", Target.Worksheet.Name, Target.Row)

Exit Sub

End If

End If

End With

End Sub

Private Sub ajoutlig(£nomdest As String, £col As String, £nomorigine As String, £ligacop As Long)

With Sheets(£nomdest)

Sheets(£nomorigine).Rows(£ligacop).Copy _

Destination:=.Rows(.Range(£col & "65536").End(xlUp).Row + 1)

End With

End Sub

Merci pour ta réponse mais également pour tes conseils !

Cordialement,

re

Autre question, la copie automatique doit se faire dès que tu mets une donnée en colonne J de la feuille Datas ?

Bonjour,

Déjà ça ne pourra pas fonctionner parce que je n'ai pas préciser à ma macro que la donnée que je désire exporter et celle en colonne J " Projet spider". La colonne C n'est qu'une condition.

De même je ne veux pas recopier toute la ligne mais seulement le numéro de la colonne J. Pour le reste je fonctionne à la main.

Cordialement,


Dan,

Oui si possible.

Cdt,

re,

  • Clique droite sur le nom de l'onglet DATAS
  • choisis "visualiser le code"
  • colle le code ci-dessous
Private Sub Worksheet_Change(ByVal Target As Range)
'Macro Dan
Dim dlg As Integer
If Not Intersect(Target, Range("J2:J" & Range("j" & Rows.Count).End(xlUp).Row)) Is Nothing Then
    If Range("C" & Target.Row) = "échec resp MOE" Then
    dlg = Sheets("Claims").Range("C" & Sheets("Claims").Rows.Count).End(xlUp).Row
    Sheets("Claims").Range("C" & dlg + 1) = Cells(Target.Row, Target.Column).Value
    End If
End If
End Sub

Dès que tu changeras une valeur en colonne J de la feuille DATAS, la valeur de cette colonne J sera copiee en colonne C de la feuille CLAIMS selon la condition souhaitée

Si ok, clique sur le V ert à coté du bouton EDITER pour cloturer le fil

Crdlt

re,

Visiblement ça ne fonctionne pas :/ J'essaye de mon côté aussi de comprendre pourquoi.

Cordialement,

re Dan,

Il s'agit des "échec resp SFR" en condition et non "échec resp MOE" mais visiblement l'erreur ne vient pas de là :/


re,

Lorsque je fais des tests j'obtiens parfois " Erreur d'exécution '6' : Dépassement de capacité " et d'après le mot déboggage, l'erreur vient de :

dlg = Sheets("Claims").Range("C" & Sheets("Claims").Rows.Count).End(xlUp).Row

cordialement,

Bonsoir,

J'ai tenté cela :

Sub Test()

Dim dlg As Integer

If Range("C" & Target.Row) = "échec resp SFR" Then

RowSel = Target.Row

Range(Cells(RowSel, 17)).Copy

Sheets("Claims").Select

Range("C65536").Select

Selection.End(xlUp).Select

RowFin = Selection.Row + 1

Cells(RowFin, 1).Select

ActiveSheet.Paste

End If

End Sub

Mais encore une fois en vain ... Quelqu'un peut-il m'aider, je désespère là ..

Bien cordialement,

Ré,

Ta feuille contient beaucoup de lignes ? Plus de 32000 à mon avis

En début de code change

Dim dlg as integer par Dim dlg as long

Crdlt

Bonsoir Dan,

Cela a l'air de fonctionner désormais. Mais le seul "hic" c'est que dès que j'interviens sur une cellule de la colonne J elle est copiée dans l'onglet " Claims" mais si je fais cela 2fois, la même cellule est copiée une 2eme fois. Cependant je ne pense pas que cela constituera un réel problème.

Ainsi, je vais valider ta solution et te remercier pour ton aide et pour ton amabilité également ! merci !

Passes une très bonne soirée.

Cordialement,

Rechercher des sujets similaires à "macro copie lignes onglet condition"