VBA Excel - selection de valeurs distinctes

VBA Excel - selection de valeurs distinctes - VB/VBA/VBS - Programmation

Marsh Posté le 02-06-2008 à 22:34:47    

Bonjour à tous,
 
Je fais mes premiers pas avec VBA et je suis confrontée au problème suivant:
 
- j'ai un fichier de données mensuelles (avec un onglet de données par mois)
- les différents onglets regroupent des contrats, mais un contrat A peut figurer sur le fichier de janvier et pas sur celui de juin, ou au contraire un contrat B peut n'apparaître qu'en juillet
Ce que je cherche à faire:
- Créer une feuille supplémentaire qui me permette d'avoir une liste exhaustive des contrats apparaissant sur tous les onglets mensuels, mais sans les doublons.
- Ce que j'ai fait jusqu'ici: j'ai copié les données des différents onglets sur une feuille feuille puis supprimé les doublons. Problême: j'ai beaucoup trop de données! (environ 6000 par onglet)
 
Y aurait-il un moyen de coder cela avec vba? (sachant que, problème supplémentaire, je n'ai pas toujours le même nombre d'onglets de données: ca peut être du janvier à mars, comme du février à août...)
 
Je vous remercie d'avance pour votre aide précieuse!
 
Bonne soirée,
 
Lilly
 
 
 
 

Reply

Marsh Posté le 02-06-2008 à 22:34:47   

Reply

Marsh Posté le 03-06-2008 à 09:33:57    

Bonjour,  
 
C'est possible en bouclant sur tes feuilles puis sur les lignes de la colonne contenant les contrats (si c'est le cas) puis en recherchant chaque pour contrat s'il existe dans la feuille de total et l'ajouter en fin de liste si ce n'est pas le cas.
 
Ce que tu veux, c'est juste une liste de contrat ? pas de cumul de valeur ou autre ...
 

Reply

Marsh Posté le 03-06-2008 à 10:26:52    

Salut, qqs façon d'y parvenir
Sur feuille récapitulative Données / Filtre élaboré avec extraction sans doublons
via une collection avec une clé
via http://www.mdf-xlpages.com/modules [...] d=2&lid=11

Message cité 1 fois
Message édité par kiki29 le 03-06-2008 à 10:28:32
Reply

Marsh Posté le 03-06-2008 à 14:27:53    

Bonjour et merci pour ta réponse,
 
oui c'est bien juste une liste de contrats que je cherche à créer dans un premier temps. L'idée que tu me proposes est bien celle que j'avais en tête, sauf que... je ne sais pas la mettre en oeuvre... (je débute!)
 
 

DamienCYS a écrit :

Bonjour,  
 
C'est possible en bouclant sur tes feuilles puis sur les lignes de la colonne contenant les contrats (si c'est le cas) puis en recherchant chaque pour contrat s'il existe dans la feuille de total et l'ajouter en fin de liste si ce n'est pas le cas.
 
Ce que tu veux, c'est juste une liste de contrat ? pas de cumul de valeur ou autre ...
 


Reply

Marsh Posté le 03-06-2008 à 14:28:32    

Bonjour,
 
Merci pour ca, je vais regarder de ce coté
 
Bonne journée
 

kiki29 a écrit :

Salut, qqs façon d'y parvenir
Sur feuille récapitulative Données / Filtre élaboré avec extraction sans doublons
via une collection avec une clé
via http://www.mdf-xlpages.com/modules [...] d=2&lid=11


Reply

Marsh Posté le 03-06-2008 à 16:33:54    

sinon
voici le code
 
Sub test()
 
Dim nombredelignestotal, nombresdefeuilles As Integer
 
nombresdefeuilles = Sheets.Count
Worksheets.Add Count:=1, after:=Sheets(nombresdefeuilles)
nombredelignestotal = 0
 
For i = 1 To nombresdefeuilles Step 1
 
'en imaginant que tes donnees sont dans la colonne A
 
Sheets(i).Select
nbredelignes = Sheets(i).Range("A6555" ).End(xlUp).Row
Range(Cells(1, 1), Cells(nbredelignes, 1)).Select
Selection.Copy
Sheets(nombresdefeuilles + 1).Select
Cells(nombredelignetotal + 1, 1).Select
ActiveSheet.Paste
nombredelignetotal = nombredelignetotal + nbredelignes
 
Next
 
Sheets(nombresdefeuilles + 1).Select
nblign = Sheets(nombresdefeuilles + 1).Range("A6555" ).End(xlUp).Row
Range("A1:A" & nblign).Select
Selection.Sort Key1:=Range("A1" ), Order1:=xlAscending, Header:=xlGuess, _
    OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom, _
    DataOption1:=xlSortNormal
 
For i = nblign To 2 Step -1
If Cells(i, 1) = Cells(i - 1, 1) Then
Rows(i).Select
Selection.Delete Shift:=xlUp
End If
Next
 
End Sub

Reply

Marsh Posté le 03-06-2008 à 22:35:30    

Je l'ai adaptée, ca marche parfaitement, merci beaucoup!!
 
Merci à tous pour votre aide,
Bonne soirée
 
 
 

86vomito33 a écrit :

sinon
voici le code
 
Sub test()
 
Dim nombredelignestotal, nombresdefeuilles As Integer
 
nombresdefeuilles = Sheets.Count
Worksheets.Add Count:=1, after:=Sheets(nombresdefeuilles)
nombredelignestotal = 0
 
For i = 1 To nombresdefeuilles Step 1
 
'en imaginant que tes donnees sont dans la colonne A
 
Sheets(i).Select
nbredelignes = Sheets(i).Range("A6555" ).End(xlUp).Row
Range(Cells(1, 1), Cells(nbredelignes, 1)).Select
Selection.Copy
Sheets(nombresdefeuilles + 1).Select
Cells(nombredelignetotal + 1, 1).Select
ActiveSheet.Paste
nombredelignetotal = nombredelignetotal + nbredelignes
 
Next
 
Sheets(nombresdefeuilles + 1).Select
nblign = Sheets(nombresdefeuilles + 1).Range("A6555" ).End(xlUp).Row
Range("A1:A" & nblign).Select
Selection.Sort Key1:=Range("A1" ), Order1:=xlAscending, Header:=xlGuess, _
    OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom, _
    DataOption1:=xlSortNormal
 
For i = nblign To 2 Step -1
If Cells(i, 1) = Cells(i - 1, 1) Then
Rows(i).Select
Selection.Delete Shift:=xlUp
End If
Next
 
End Sub


Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed