Import selon date
Bonjour,
je souhaite trier des données importées d'autres feuilles selon la date. en clair je souhaiterai importer que les données selon une date définie car sinon je n'ai pas les données de la même journée sur la même ligne.
Merci d'avance
Salut et bienvenue sur le Forum,
Ta demande n'est absolument pas claire. J'ai déjà tenté de la comprendre hier soir puis j'ai abandonné et ça ne m'étonne pas trop que tu n'aies toujours pas de réponse de la part d'autres membres.
Tu veux trier tes données ou les importer ? Si tu les importes, tu les importes d'où - si le fichier fourni est le fruit de tes importations - ou alors tu veux les importer où si cette étape est encore à réaliser ? Si tu veux simplement trier tes données, quel est le résultat final désiré ?
Place éventuellement sur ton fil un exemple manuel du résultat final désiré de manière automatisée.
A te relire.
Bonjour Salapt,
Bonjour Yvouille,
Si j’ai bien compris :
- les données présentes dans la Feuil1 sont des données importées.
- chaque ensemble de 4 colonnes correspond à une importation.
- les données doivent être alignées suivant les dates.
Attention toutefois car les doublons ne sont pas pris en compte. Exemple avec la journée du 26/09/2012 qui apparait 2 fois dans ta liste avec des valeurs associées différentes (idem pour le 03/10/2012).
A+
bonjour,
c'est super, et encore merci. Sans vouloir abuser je voudrai essayer de comprendre le fonctionnement des macros pour en créer moi même car je maîtrise pas. Peux tu écrire le fonctionnement général de chaque ligne ( il me semble que ça ce fait dans certain programme) pour que je puisse l'adapter si besoin.
Encore merci
Voila, voila !
Avec quelques commentaires tout devient limpide.
Pour la maitrise, il va falloir bosser un peu quand même
Option Explicit 'impose la déclaration explicite de toutes les variables
Sub CreerListe()
'Déclaration des variables
Dim WsS As Worksheet, WsC As Worksheet 'Une feuille source et une feuille cible
Dim Plage As Range, Cel As Range, C As Range
Dim Collec As Collection
Dim Lig As Long, DerLig As Long, i As Long
Dim Col As Integer, DerCol As Integer
Set WsS = Worksheets("Feuil1") 'Feuille source où sont copiées les données
Set WsC = Worksheets("Feuil2") 'Feuille cible où sont collées les données
Set Collec = New Collection 'On utilise une collection afin d'établir une liste _
de toutes les dates (sans doublon)
Set Plage = WsS.UsedRange 'Plage à prendre en compte (plage utilisée dans la feuille)
DerLig = Plage.SpecialCells(xlCellTypeLastCell).Row 'Dernière ligne de la plage
DerCol = Plage.SpecialCells(xlCellTypeLastCell).Column 'Dernière colonne de la plage
On Error Resume Next 'Lorsqu'on cherche à intégrer un doublon dans une collection, une erreur apparait.
'C'est cette spécificité qui est utilisée pour établir une liste sans doublons.
For Col = 1 To DerCol Step 4 'On balaye toutes les colonnes "Dates" de la feuille source
For Lig = 1 To DerLig 'On balaye toutes les lignes de ces colonnes "Dates"
'Si la cellule n'est pas vide et ne contient pas une valeur nulle
If WsS.Cells(Lig, Col) <> "" And WsS.Cells(Lig, Col) <> 0 Then _
'on ajoute la valeur à la collection
Collec.Add WsS.Cells(Lig, Col), CStr(WsS.Cells(Lig, Col))
Next Lig
Next Col
On Error GoTo 0 'On désactive la gestion d'erreur assurée par le programme (la gestion d'erreur est _
alors effectuée normalement par l'application)
For i = 1 To Collec.Count 'On balaye tous les éléments de la collection (les dates)
'On copie la date en colonne A de la feuille cible
WsC.Range("A" & i) = Collec.Item(i)
'On balaye toutes les importations
For Col = 1 To DerCol Step 4
'Dans chaque lot importé, on recherche une date correspondant à celle de la collection
Set C = WsS.Columns(Col).Find(WsC.Range("A" & i), , xlValues, xlWhole)
'Si cette date existe
If Not C Is Nothing Then
'Alors, on copie les 3 cellules de données associées à cette date
C.Offset(0, 1).Resize(, 3).Copy WsC.Cells(i, Col + 1)
End If
Next Col
Next i
'On libère la mémoire
Set Plage = Nothing: Set Collec = Nothing: Set WsC = Nothing: Set WsS = Nothing
End SubBonjour,
Merci et reste plus qu'à me creuser la tête,
Cordialement,