Selection conditionnelle de lignes et copie sur autres feuilles

Fermé
Sylvain - 2 juin 2014 à 15:44
 Sylvain - 3 juin 2014 à 18:06
Bonjour,
Débutant en VB, je suis confronté au problème suivant.
Dans mon tableau je souhaite sélectionner des lignes en fonction de la valeur d'une cellule, puis copier ces lignes dans une autre feuille.
J'ai réussi à le faire avec une valeursur une feuille :
Si la ligne contient la valeur "1" je la copie sur la feuille "1".

Mais je ne sais pas comment faire pour que cette formule fonctionne sur une grande plage de valeurs :
Lignes avec la Valeur 2 --> Feuille 2
Lignes avec la Valeur 3 --> Feuille 3
Ect
Pour info, j'ai environ 50 valeurs différentes, donc 50 feuilles cibles.
Ces tableaux sont amenés à être mis à jour souvent.
Donc préalablement je supprime les données des feuilles cibles pour éviter les doublons lors de la mise à jour. (J'aimerai ici aussi appliquer cette formule à toutes les feuilles cibles)
Et après copie des lignes je supprime les lignes vierges dans les feuilles cibles pour obtenir un tableau continu. (Et ici également j'aimerai appliquer cette formule à toutes les feuilles cibles).

Voici mon code :

Sub SelectionLigne()
Dim Plage As Range
Dim Ligne As Long

'Effacer le contenu des tableaux sur les feuilles de chaque zone
Sheets("1").Activate
Range("A3:G1000").ClearContents

' Sélection des données utiles du tableau de la feuille Global
Sheets("Global").Activate
Range("A5:G1000").Select

' Boucle sur chaque ligne de la sélection afin de déterminer si des lignes contiennent la valeur voulue et copie dans une autre feuille

For Each Plage In Selection.Rows
'Variable ligne = une ligne de ma plage
Ligne = Plage.Row
'si la 2 ème cellule de la ligne contient 1
If Plage.Cells(1, 2).Value = "1" Then
Plage.Copy Destination:=Worksheets("1").Cells(Ligne, 1).EntireRow
End If

Next Plage

' Sélection des tableau des feuilles cibles sans le titre et suppression des cellules vierges sur cette sélection.
Sheets("1").Activate
Range("A3:G1000").Select

Selection.SpecialCells(xlCellTypeBlanks).Select
Selection.Delete Shift:=xlUp

End Sub

Merci d'avance pour d'éventuelles astuces ou explications. :)

Sylvain
A voir également:

2 réponses

michel_m Messages postés 16603 Date d'inscription lundi 12 septembre 2005 Statut Contributeur Dernière intervention 16 décembre 2023 3 303
2 juin 2014 à 18:30
Bonjour,
si tu as moins de 1000 lignes as tu essayé un code avec filtre ?

0
Bonjour, michel
Merci, je pense que je suis sur la bonne voie avec les filtres.
Voici ou j'en suis :
Je colle les données du tableau source (feuille "Global") dans les feuilles cibles (feuilles nommées "1", "2", "3"....)
Sur chaque feuille cible je filtre les données en fonction de mon critère qui est variable car c'est le nom de feuille. C'est ici que ça coince, le code fonctionne seulement pour la première feuille.

Sub filtre()
Dim Numfeuil As String

'Colle les données du tableau source dans les feuilles cibles
Sheets("Global").Range("A5:G1000").Select
Selection.Copy
Sheets(Array(2, 3, 4)).Select
Range("A5").Select
ActiveSheet.Paste

'Créer une boucle qui filtre les données en fonction d'un critère qui est le nom de la feuille

Numfeuil = ActiveSheet.Name
For Each Sheet In ActiveWorkbook.Sheets
Range("A4:G1000").AutoFilter Field:=2, Criteria1:=Numfeuil
Next

End Sub

Et par ailleurs est-ce qu'il y a un moyen lors de la sélection des feuilles (Array(2,3,4) de sélectionner une plage de feuille (Array (2-->4)?

Merci :)

Sylvain
0