Boucle copier coller ligne vers une feuille si condition valeur [Fermé]

Signaler
Messages postés
5
Date d'inscription
samedi 16 novembre 2013
Statut
Membre
Dernière intervention
25 novembre 2013
-
Messages postés
6917
Date d'inscription
mardi 25 septembre 2007
Statut
Membre
Dernière intervention
1 novembre 2016
-
bonjour,
je suis novice en vba et je suis entrain de faire une macro qui me permettra de reaffecter les données dans chaque feuille selon une condition.
par exemple mon fichier s'appelle "implant" et il se presente dans un tableau tel que celui-ci

colonne A colonne b colonne c
CODE INTERNE LIBELLE PRODUIT CODE GEO
3675201 DONORMYL 1101105
3611738 PREDNISOLONE 4101110
3939775 TEMERIT 1101115
3194631 CORRECTOL 2101120
3780808 RILMENIDINE 1101125
3290381 RULID 1101130
3592254 ARIXTRA 1101135
3447463 HUMEX RHUME 21101140

je souhaiterais copier sur la feuille 2 toutes les lignes dont la valeur de la colonne C est >= 1101105 et inferieur ou egale à 1122750
et je souhaiterais copier sur la feuille 3 toutes les lignes dont la valeur de la colonne C est >= 2101105 et inferieur ou egale à 4124750
et je souhaiterais copier sur la feuille 4 toutes les lignes dont la valeur de la colonne C est >= 21101105 et inferieur ou egale à 28001100
svp quelqu'un pourrait -il m'aider ?
j'ai fais cette macro mais cela ne focntionne pas

With Sheets("implant")


Set plage = .Range("C2:C" & .Range("C65000").End(xlUp).Row)

Dim range as plage

For Each c In plage


If c.Value >= "1101105" And c.Value <= "1122750" Then
x = Sheets("feuille2").Range("C65000").End(xlUp).Row + 1
c.EntireRow.Copy Sheets("feuille2").Rows(x)

ElseIf c.Value >= "2101105" And c.Value <= "4124750" Then
x = Sheets("feuille3").Range("c65000").End(xlUp).Row + 1
c.EntireRow.Copy Sheets("feuille3").Rows(x)


ElseIf c.Value >= "21101105" And c.Value <= "28001100" Then
x = Sheets("feuille4").Range("c65000").End(xlUp).Row + 1
c.EntireRow.Copy Sheets("feuille4").Rows(x)



End If

Next c

2 réponses

Messages postés
6917
Date d'inscription
mardi 25 septembre 2007
Statut
Membre
Dernière intervention
1 novembre 2016
1 128
Bonjour,

Après quelques petites modifs :

Sub Tri()

Dim plage As range
Dim x As Long
Dim c

With Sheets("implant")
Set plage = .range("C2:C" & .range("C65000").End(xlUp).Row)
For Each c In plage
If c.Value >= "1101105" And c.Value <= "1122750" Then
x = Sheets("feuil2").range("C65000").End(xlUp).Row + 1
c.EntireRow.Copy Sheets("feuil2").Rows(x)
ElseIf c.Value >= "2101105" And c.Value <= "4124750" Then
x = Sheets("feuil3").range("c65000").End(xlUp).Row + 1
c.EntireRow.Copy Sheets("feuil3").Rows(x)
ElseIf c.Value >= "21101105" And c.Value <= "28001100" Then
x = Sheets("feuil4").range("c65000").End(xlUp).Row + 1
c.EntireRow.Copy Sheets("feuil4").Rows(x)
End If
Next c
End With

End Sub

J'ai testé avec les données de l'exemple. La 3ème condition n'apparaît pas dans le jeu de test.

;o)
Messages postés
5
Date d'inscription
samedi 16 novembre 2013
Statut
Membre
Dernière intervention
25 novembre 2013

justement c'est mon probleme, la troisieme condition ne s'execute pas et cela même lorsque la condition est remplie.
Que dois-je faire?
A votre avis cela vient de quoi
Messages postés
6917
Date d'inscription
mardi 25 septembre 2007
Statut
Membre
Dernière intervention
1 novembre 2016
1 128
Bsr,

Il faut enlever les double-côtes dans les conditions ... j'ai zappé ça en collant le code ...

Sub Tri()

Dim plage As Range
Dim x As Long
Dim c

With Sheets("implant")
Set plage = .Range("C2:C" & .Range("C65000").End(xlUp).Row)
For Each c In plage
If c.Value >= 1101105 And c.Value <= 1122750 Then
x = Sheets("feuil2").Range("C65000").End(xlUp).Row + 1
c.EntireRow.Copy Sheets("feuil2").Rows(x)
ElseIf c.Value >= 2101105 And c.Value <= 4124750 Then
x = Sheets("feuil3").Range("c65000").End(xlUp).Row + 1
c.EntireRow.Copy Sheets("feuil3").Rows(x)
ElseIf c.Value >= 21101105 And c.Value <= 28001100 Then
x = Sheets("feuil4").Range("c65000").End(xlUp).Row + 1
c.EntireRow.Copy Sheets("feuil4").Rows(x)
End If
Next c
End With

End Sub