Travail de tri sur plage variable

Niouf

XLDnaute Occasionnel
Bonjour a toutes et a tous,

J'aimerai automatiser une tache que realise un technicien au sein de mon entreprise.

Je vous joins un tableau avec differentes informations.
Et je recapitule les differentes taches effectuees manuellement :

-Je dois d'abord selectionner une plage a partir de ma colonne I
Plage de travail :1 mois après la date du jour et 4 mois après
-Sur cette plage, je supprime les lignes comprenant les mots "trunking" dans la colonne D et commencant par SM dans la colonne A .
-Je selectionne ensuite toutes les references de la colonne G "Planned orders" (J'ai juste besoin de copier les donnees, et de les coller dans un autre logiciel), mais cette fois ci en pregnant du debut du tableau jusqu'a la fin de ma premiere plage (4 mois après la date actuelle).
-Et je realise ensuite la meme operation, avec les references de la premiere colonne.
Copie a partir du debut, jusqu'a 4 mois après la date de jour)

Vous l'aurai compris, je travaille sur des plages variables, ce qui rend l'operation compliquee.
J'ai deja 1 macro qui effectue la premiere partie du travail afin d'obtenir ce tableau, l'idee serait donc de mettre cette nouvelle macro a la suite de la premiere :)

Quelqu'un a t-il une piste ?
Le simple fait d'identifier mes plages automatiquement me serait d'une grande aide, je pourrai ainsi copier les elements dans une nouvelle page et travailler dessus ...
Ou bien analyser ligne par ligne si la valeur de ma colonne I et effectuer le tri si la condition est respectee ?
Merci d'avance pour votre aide !
 

Pièces jointes

  • Test.xlsx
    89.6 KB · Affichages: 51
  • Test.xlsx
    89.6 KB · Affichages: 58
Dernière édition:

Modeste

XLDnaute Barbatruc
Re : Travail de tri sur plage variable

Bonjour Niouf,

On ne sait pas trop ce que tu attends: une macro qui ferait le travail, une MFC qui colorerait les lignes concernées, une formule qui afficherait un "x" dans une colonne supplémentaire ... ou autre chose encore!?
Comme je ne suis pas certain d'avoir bien compris, un premier essai avec une MFC sur la colonne I (les cellules vertes seraient celles que tu dois prendre en considération!?)
En colonne J, la même formule que dans la MFC permet d'afficher le n° de ligne. Sur base de cette colonne, tu peux obtenir, en Feuil2 la liste des "planned orders" concernés (toujours si j'ai compris!?)

Bref, jette un oeil et dis-nous si ça ressemble un peu, beaucoup, passionnément, à la folie ou ... pas du tout à ce que tu veux!?

PS: ton fichier était un .xlsx, mais tu as préfixé la discussion "toutes versions" ... précise sur quelle version tu risques de devoir travailler: il y aura peut-être des choses à adapter.
 

Pièces jointes

  • Extraction (Niouf).xlsx
    99 KB · Affichages: 55

Niouf

XLDnaute Occasionnel
Re : Travail de tri sur plage variable

Salut Modeste !

Requete corrigee : J'ai deja 1 macro qui effectue la premiere partie du travail afin d'obtenir ce tableau, l'idee serait donc de mettre cette nouvelle macro a la suite de la premiere :)

Merci pour ton fichier, c'est deja une tres bonne base de reflexion.

Donc effectivement j'aimerai idealement une macro, mais ta MFC peut surement y etre integree :)
Ton idee reflete parfaitement ce dont j'ai besoin, puisque j'ai au final mes planned orders selon les criteres demandes.

Pour en revenir a la macro, j'avais dans la tete une boucle qui check pour chaque ligne si la condition est respecte: entre les dates demandes, sans SM et sans TRUNKING. Et qui me stocke sur un nouvel onglet eventuellement, les references "Planned Orders" requise ...

Est deja plus clair?
 

Modeste

XLDnaute Barbatruc
Re : Travail de tri sur plage variable

[...] j'avais dans la tete une boucle qui check pour chaque ligne si la condition est respecte: entre les dates demandes, sans SM et sans TRUNKING. Et qui me stocke sur un nouvel onglet eventuellement, les references "Planned Orders" requise ...

C'est bien ce que font les formules dans les deux feuilles. Forcément, par macro, c'est possible aussi. Pour déterminer la méthode, il serait utile que tu précises le volume à traiter (environ 1.000 lignes comme dans ton exemple ou plutôt 10.000?) et ce qui déclencherait l'exécution de la macro (un clic sur un bouton, la simple activation de la feuille2 ... ou alors tu t'occupes d'adapter pour qu'elle se place "à la suite de la première")?
 

Niouf

XLDnaute Occasionnel
Re : Travail de tri sur plage variable

Tout a fait, tes formules sont nickelles.
Alors, c'est un fichier genere chaque jour, et il y a a peu pret autant de lignes pour chaque execution, soit environ 1000 ...

Et j'aimerai, en effet, le greffer a ma premiere macro, ce serait vraiment le top :)
 
Dernière édition:

Modeste

XLDnaute Barbatruc
Re : Travail de tri sur plage variable

Bonjour Niouf, le forum,

Essaie ce bout de code dans un module standard:
VB:
Sub extraire()
Dim tablo()
Set sh = Sheets(1)
date1Mois = DateSerial(Year(Date), Month(Date) + 1, Day(Date))
date4Mois = DateSerial(Year(Date), Month(Date) + 4, Day(Date))
Sheets(2).[A1].CurrentRegion.ClearContents
For lig = 2 To sh.Cells(Rows.Count, 9).End(xlUp).Row
    If sh.Cells(lig, 9) >= date1Mois And sh.Cells(lig, 9) <= date4Mois And _
        Left(sh.Cells(lig, 1), 2) <> "SM" And InStr(1, sh.Cells(lig, 4), "trunking", 1) = 0 Then
        ReDim Preserve tablo(x)
        tablo(x) = sh.Cells(lig, 7)
        x = x + 1
    End If
Next lig
Sheets(2).[A1].Resize(x, 1) = Application.Transpose(tablo)
End Sub
 

Niouf

XLDnaute Occasionnel
Re : Travail de tri sur plage variable

Excellent Modeste, merci pour le temps passé !!

J'ai modifie un peu afin de copier finalement la premiere colonne.
Et de faire un rechercheV pour afficher le planned orders number correspondant dans la colonne suivante.
Ta boucle a la possibilite de copier deux colonnes en meme temps peut etre ?

Ensuite, le cahier des charges change quelque peu, la date de fin de plage n'est pas :
- 4 mois après la date actuelle
Mais:
- le 31 du 3eme mois suivant --' (desole je ne choisi malheureusement pas ... )

Exemple : 18 Aout, je prend a partir du 18 septembre jusqu'au 30 novembre ...

Est ce facilement adaptable ?
 
Dernière édition:

Modeste

XLDnaute Barbatruc
Re : Travail de tri sur plage variable

Est ce facilement adaptable ?

Il me semble que j'essaierais ce qui suit ... si j'ai bien compris!
VB:
Sub extraire()
Dim tablo()
date1Mois = DateSerial(Year(Date), Month(Date) + 1, Day(Date))
date4Mois = DateSerial(Year(Date), Month(Date) + 4, 1) - 1
Sheets(2).[A1].CurrentRegion.ClearContents
For lig = 2 To Cells(Rows.Count, 9).End(xlUp).Row
    If Cells(lig, 9) >= date1Mois And Cells(lig, 9) <= date4Mois And _
        Left(Cells(lig, 1), 2) <> "SM" And InStr(1, Cells(lig, 4), "trunking", 1) = 0 Then
        ReDim Preserve tablo(1, x)
        tablo(0, x) = Cells(lig, 1)
        tablo(1, x) = Cells(lig, 7)
        x = x + 1
    End If
Next lig
Sheets(2).[A1].Resize(x, 2) = Application.Transpose(tablo)
End Sub
Je te laisse évaluer l'ampleur des adaptations à apporter :)

Comme le 31 novembre n'existe pas en Belgique ;), le calcul ci-dessus pour la variable date4Mois renverra le 30/11.
Blague à part, fais tout de même suffisamment de test pour t'assurer que les résultats sont toujours corrects pour les 2 dates en question!
 

Modeste

XLDnaute Barbatruc
Re : Travail de tri sur plage variable

Môôôôssieur tototiti à dit:
Peuvent rien faire comme les autres ces belges ;)

J'ai cru comprendre que pour faire des économies, notre gouvernement avait un jour décidé de raccourcir un mois sur deux (30 jours au lieu de 31).
... Il paraît même (mais l'info n'est pas confirmée officiellement: la N-VA aurait demandé la nomination d'un Secrétaire d'État chargé de faire toute la lumière sur cet épineux sujet) que le calcul envisagé pour le mois de février serait plus particulier et compliqué encore!?
Quand je pense que les autres pays échappent à ces mesquineries! :eek:
 

Niouf

XLDnaute Occasionnel
Re : Travail de tri sur plage variable

Salut les gars :)

Merci pour ton code Modeste, cela fonctionne sur le fichier que je t'ai envoye ¬

Cependant, lorsque j'ajoute quelques lignes pour l'adapter au fichier sur lequel je travaille, j'ai une erreur lorsque la fonction transpose arrive ...

Code:
Sub extraire()

'Filter the 2nd and 3rd columns

    ActiveSheet.Range("$A$1:$O$9950").AutoFilter Field:=2, Criteria1:="#N/A"
    ActiveSheet.Range("$A$1:$O$9950").AutoFilter Field:=3, Criteria1:= _
        "=Ind Eng", Operator:=xlOr, Criteria2:="=Landis"
          
'Create a new sheet called Sheet2

Sheets.Add.Move After:=Sheets(Sheets.Count)
Sheets(Sheets.Count).Name = "Sheet2"


        
'Macro for create a table in an other sheet, with the Plnd order numbers,
'and extract the TRUNKING and SM numbers in the period : Current date + 1 month - current date + 4 month

Dim tablo()
 date1Mois = DateSerial(Year(Date), Month(Date) + 1, Day(Date))
 date4Mois = DateSerial(Year(Date), Month(Date) + 4, 1) - 1
 Sheets(2).[A1].CurrentRegion.ClearContents
For lig = 2 To Cells(Rows.Count, 9).End(xlUp).Row
     If Cells(lig, 9) >= date1Mois And Cells(lig, 9) <= date4Mois And _
         Left(Cells(lig, 1), 2) <> "SM" And InStr(1, Cells(lig, 4), "trunking", 1) = 0 Then
         ReDim Preserve tablo(1, x)
         tablo(0, x) = Cells(lig, 1)
         tablo(1, x) = Cells(lig, 7)
         x = x + 1
     End If
Next lig
Sheets(2).[A1].Resize(x, 2) = Application.Transpose(tablo)
 
End Sub

J'ai change le nom de l'onglet cree mais rien n'y fait ..

Une idee ?
 

Modeste

XLDnaute Barbatruc
Re : Travail de tri sur plage variable

Bonjour Niouf, le reste du forum,

Si tu compares le premier code proposé à l'adaptation que j'ai proposée ensuite, tu remarqueras que dans le premier j'avais utilisé une variable 'sh' correspondant à la première feuille ... rien de cet ordre dans le second code.

Or, dans ce que tu livres ici, tu ajoutes une nouvelle feuille avant d'exécuter "mon" code. La feuille active au moment de l'exécution est donc une feuille vierge. Il est donc probable que la variable 'tablo' soit désespérément vide ! Place un point d'arrêt sur la ligne du Transpose et regarde ce qu'il en est du 'tablo'.

Par ailleurs, tu n'avais pas mentionné qu'un filtre serait actif sur la feuille ... il n'est donc pas certain que le résultat soit conforme à tes attentes!?
Vois d'abord si tu peux régler le premier souci et si mon hypothèse est la bonne.
 

Niouf

XLDnaute Occasionnel
Re : Travail de tri sur plage variable

Bonjour :)

En effet, j'avais remarque que sh avait disparu .

Donc, voila ou j'en suis, j'ai juste ajoute une ligne afin de retourner sur l'onglet Planned orders, forcement ta boucle tourne desormais, et je n'ai plus d'erreurs.
Mais rien n'est copie sur la Sheet2.
Peut tu me rapeller comment l'on affiche les valeurs des variables en mode step by step ? Il me semble avoir deja vu cela en placant le curseur sur la variable ?
Tablo doit probablement etre vide, puisqu'aucunes valeurs n'est copie, mais la raison exacte m'echappe :(
les filtres en cause ?

La feuille doit obligatoirement etre cree de cette facon, puisqu'elle sera temporaire (J'aimerai la supprimer en toute fin)
 
Dernière édition:

Modeste

XLDnaute Barbatruc
Re : Travail de tri sur plage variable

Bonjour Niouf,

Place le curseur dans la ligne de code concernée et appuye sur la touche F9. L'exécution du code s'arrêtera juste avant cette instruction.
Quand tu es en mode "Arrêt", affiche la "Fenêtre des Variables locales" (si elle ne l'est pas déjà). Voir menu "Affichage" du VBE.

Puisque tu auras nommé la feuille, tu peux tester
Code:
Sheets("Sheet2").[A1].Resize(x, 2) = Application.Transpose(tablo)

Pour ce qui est de ton filtre, le souci possible est que la macro parcourt toutes les cellules sur la hauteur de ton tableau (sans tenir compte, donc, du fait que ton filtre en a masqué certaines!)
 

Niouf

XLDnaute Occasionnel
Re : Travail de tri sur plage variable

Merci Modeste, c'est regle :)

Et effectivement la macro ne tient pas compte du filtre :(
Je filtre et copie la feuille temporairement sur un nouvel onglet, ou il est possible de tenir compte du filtre dans la macro ?
 

Statistiques des forums

Discussions
312 294
Messages
2 086 899
Membres
103 404
dernier inscrit
sultan87