Besoin d'aide sur formule compliquée, voir une macro.. Help please !
Résolu/Fermé
ludodil62
Messages postés
64
Date d'inscription
jeudi 1 mai 2014
Statut
Membre
Dernière intervention
14 septembre 2022
-
16 janv. 2019 à 18:35
ludodil62 Messages postés 64 Date d'inscription jeudi 1 mai 2014 Statut Membre Dernière intervention 14 septembre 2022 - 29 nov. 2019 à 13:16
ludodil62 Messages postés 64 Date d'inscription jeudi 1 mai 2014 Statut Membre Dernière intervention 14 septembre 2022 - 29 nov. 2019 à 13:16
A voir également:
- Besoin d'aide sur formule compliquée, voir une macro.. Help please !
- Formule si et - Guide
- Voir sa maison sur google street view - Guide
- Comment voir qui regarde mon profil facebook - Guide
- Formule excel pour additionner plusieurs cellules - Guide
- Telecharger macro convertir chiffre en lettre excel - Télécharger - Tableur
17 réponses
danielc0
Messages postés
1423
Date d'inscription
mardi 5 juin 2018
Statut
Membre
Dernière intervention
23 janvier 2025
168
17 janv. 2019 à 10:20
17 janv. 2019 à 10:20
Bonjour,
Pourquoi A et pourquoi B ?
Cordialement.
Daniel
Pourquoi A et pourquoi B ?
Cordialement.
Daniel
via55
Messages postés
14512
Date d'inscription
mercredi 16 janvier 2013
Statut
Membre
Dernière intervention
18 janvier 2025
2 740
Modifié le 24 nov. 2019 à 16:59
Modifié le 24 nov. 2019 à 16:59
Je n'ai pas envoyé le bon fichier ! le voici
https://mon-partage.fr/f/Ak2OTOcJ/
J'ai également traité sur celui ci le cas du dépassement de la lettre Z pour le codage, on passe ensuite à AA, AB ...
https://mon-partage.fr/f/Ak2OTOcJ/
J'ai également traité sur celui ci le cas du dépassement de la lettre Z pour le codage, on passe ensuite à AA, AB ...
PHILOU10120
Messages postés
6400
Date d'inscription
lundi 16 avril 2012
Statut
Contributeur
Dernière intervention
17 janvier 2025
812
17 janv. 2019 à 10:21
17 janv. 2019 à 10:21
Bonjour ludodil62
Pourquoi compliquer les choses !
Utiliser le numéro de semaine pour faire le regroupement
Mettre cette formule dans une colonne supplémentaire en prenant la date en colonne E ou L
=NO.SEMAINE(E2;21) ou =NO.SEMAINE(L2;21)
puis trier par numéro se semaine
Pourquoi compliquer les choses !
Utiliser le numéro de semaine pour faire le regroupement
Mettre cette formule dans une colonne supplémentaire en prenant la date en colonne E ou L
=NO.SEMAINE(E2;21) ou =NO.SEMAINE(L2;21)
puis trier par numéro se semaine
ludodil62
Messages postés
64
Date d'inscription
jeudi 1 mai 2014
Statut
Membre
Dernière intervention
14 septembre 2022
11
17 janv. 2019 à 11:46
17 janv. 2019 à 11:46
Bonjour,
Daniel,
Ceux sont des exemples A et B. Si c'est plus simple de mettre 1 et 2, pourquoi pas. Et 0 sur les non regroupables par exemple. Le principal est d'avoir une valeur commune sur chacun des regroupement possible, mais une valeur différente par regroupement et par client.
Philou,
J'ai proposé de faire une analyse à la semaine, ça serait effectivement plus facile. Mais notre client ne veut pas malheureusement, je dois faire une analyse en jour glissant a partir de la 1ère commande et étendre la recherche sur 4 jours.. Au 5ème jour, le compteur doit repartir à 0.
Pas simple je te l'accorde !
Daniel,
Ceux sont des exemples A et B. Si c'est plus simple de mettre 1 et 2, pourquoi pas. Et 0 sur les non regroupables par exemple. Le principal est d'avoir une valeur commune sur chacun des regroupement possible, mais une valeur différente par regroupement et par client.
Philou,
J'ai proposé de faire une analyse à la semaine, ça serait effectivement plus facile. Mais notre client ne veut pas malheureusement, je dois faire une analyse en jour glissant a partir de la 1ère commande et étendre la recherche sur 4 jours.. Au 5ème jour, le compteur doit repartir à 0.
Pas simple je te l'accorde !
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
via55
Messages postés
14512
Date d'inscription
mercredi 16 janvier 2013
Statut
Membre
Dernière intervention
18 janvier 2025
2 740
17 janv. 2019 à 13:31
17 janv. 2019 à 13:31
Bonjour
Avec une macro
https://mon-partage.fr/f/1AA5VeuG/
Cdlmnt
Via
Avec une macro
https://mon-partage.fr/f/1AA5VeuG/
Cdlmnt
Via
ludodil62
Messages postés
64
Date d'inscription
jeudi 1 mai 2014
Statut
Membre
Dernière intervention
14 septembre 2022
11
17 janv. 2019 à 18:28
17 janv. 2019 à 18:28
Merci beaucoup via55 ! C'est exactement ce qu'il me fallait !
Je ne pensais pas que c'était possible. Il va falloir que je me mette au VBA, ça multiplie les possibilités !
Par contre je ne suis pas à l'abri que mon client demande ensuite la même analyse, sur 3 ou 5 jours d'intervalle par exemple.
Que devrais je changer dans ce code ?
Sub regrouper()
Dim Ligne As Long
Ligne = Columns(1).Find("*", , , , xlByColumns, xlPrevious).Row
Range("N4:N" & Ligne).ClearContents
For n = 4 To Ligne
If Range("C" & n) <> Range("C" & n - 1) Then x = Range("C" & n): cod = 64
If Range("M" & n + 1) - Range("M" & n) < 5 And Range("N" & n) = "" And Range("C" & n) = Range("C" & n + 1) Then
cod = cod + 1
Range("N" & n) = Chr(cod)
Range("N" & n + 1) = Chr(cod)
For y = 1 To 3
If Range("M" & n + 1 + y) - Range("M" & n) < 5 And Range("C" & n) = Range("C" & n + 1 + y) Then Range("N" & n + 1 + y) = Chr(cod)
Next
End If
Next
End Sub
En tout cas, encore un grand merci ! ça va bien m'aider.
Je ne pensais pas que c'était possible. Il va falloir que je me mette au VBA, ça multiplie les possibilités !
Par contre je ne suis pas à l'abri que mon client demande ensuite la même analyse, sur 3 ou 5 jours d'intervalle par exemple.
Que devrais je changer dans ce code ?
Sub regrouper()
Dim Ligne As Long
Ligne = Columns(1).Find("*", , , , xlByColumns, xlPrevious).Row
Range("N4:N" & Ligne).ClearContents
For n = 4 To Ligne
If Range("C" & n) <> Range("C" & n - 1) Then x = Range("C" & n): cod = 64
If Range("M" & n + 1) - Range("M" & n) < 5 And Range("N" & n) = "" And Range("C" & n) = Range("C" & n + 1) Then
cod = cod + 1
Range("N" & n) = Chr(cod)
Range("N" & n + 1) = Chr(cod)
For y = 1 To 3
If Range("M" & n + 1 + y) - Range("M" & n) < 5 And Range("C" & n) = Range("C" & n + 1 + y) Then Range("N" & n + 1 + y) = Chr(cod)
Next
End If
Next
End Sub
En tout cas, encore un grand merci ! ça va bien m'aider.
via55
Messages postés
14512
Date d'inscription
mercredi 16 janvier 2013
Statut
Membre
Dernière intervention
18 janvier 2025
2 740
Modifié le 17 janv. 2019 à 19:49
Modifié le 17 janv. 2019 à 19:49
Bien
Satisfait que cela te convienne
Ce sont d'abord les deux lignes où il y a Range("M" & n) < 5 qu'il faut modifier
le <5 conditionne une différence maximale de 4 jours, il suffit de le remplacer par 4 ou par 6
Ensuite le nombre de lignes en dessous de celle avec le 1er A ( ou le 1ere B..) étudiés dépend de la boucle For y = 1 To 3 (ici 3 lignes), si on augmente le nombre de jours il faut augmenter en conséquence le nombre de lignes prises en compte et donc remplacer 3 par 4, 5 ...
Cdlmnt
Via
Satisfait que cela te convienne
Ce sont d'abord les deux lignes où il y a Range("M" & n) < 5 qu'il faut modifier
le <5 conditionne une différence maximale de 4 jours, il suffit de le remplacer par 4 ou par 6
Ensuite le nombre de lignes en dessous de celle avec le 1er A ( ou le 1ere B..) étudiés dépend de la boucle For y = 1 To 3 (ici 3 lignes), si on augmente le nombre de jours il faut augmenter en conséquence le nombre de lignes prises en compte et donc remplacer 3 par 4, 5 ...
Cdlmnt
Via
ludodil62
Messages postés
64
Date d'inscription
jeudi 1 mai 2014
Statut
Membre
Dernière intervention
14 septembre 2022
11
17 janv. 2019 à 21:47
17 janv. 2019 à 21:47
Très bien, c'est noté.
Merci pour cette aide précieuse apportée ! Je vais pourvoir aller plus loin dans mon analyse grâce à toi.
A une prochaine fois peut-être.
Bye !
Merci pour cette aide précieuse apportée ! Je vais pourvoir aller plus loin dans mon analyse grâce à toi.
A une prochaine fois peut-être.
Bye !
ludodil62
Messages postés
64
Date d'inscription
jeudi 1 mai 2014
Statut
Membre
Dernière intervention
14 septembre 2022
11
23 nov. 2019 à 11:51
23 nov. 2019 à 11:51
Bonjour à tous,
J'ai de nouveau besoin de votre aide.
Mon besoin de regroupement de commande à changé, il ne faut plus faire sur 5 jours glissant, mais d'une autre façon.
Pour faire plus simple, un exemple est plus simple qu'un long discours.
Voici le fihier que j'avais avant, ca fonctionnait parfaitement avec la maro de via55 que je remercie encore :
https://mon-partage.fr/f/aTGNRCwb/
Et voici ce qu'il faudrait faire maintenant :
https://mon-partage.fr/f/pSebc1JJ/
Quelqu'un saurait il modifier la macro en ce sens ? Je n'y connais rien en macro, et je ne vois pas comment faire autrement malheureusement..
Merci d'avance pour votre aide !
J'ai de nouveau besoin de votre aide.
Mon besoin de regroupement de commande à changé, il ne faut plus faire sur 5 jours glissant, mais d'une autre façon.
Pour faire plus simple, un exemple est plus simple qu'un long discours.
Voici le fihier que j'avais avant, ca fonctionnait parfaitement avec la maro de via55 que je remercie encore :
https://mon-partage.fr/f/aTGNRCwb/
Et voici ce qu'il faudrait faire maintenant :
https://mon-partage.fr/f/pSebc1JJ/
Quelqu'un saurait il modifier la macro en ce sens ? Je n'y connais rien en macro, et je ne vois pas comment faire autrement malheureusement..
Merci d'avance pour votre aide !
ludodil62
Messages postés
64
Date d'inscription
jeudi 1 mai 2014
Statut
Membre
Dernière intervention
14 septembre 2022
11
23 nov. 2019 à 12:00
23 nov. 2019 à 12:00
Désolé, je viens de me rendre compte d'une erreur sur le deuxième lien, voici le bon :
https://mon-partage.fr/f/q0psssO0/
https://mon-partage.fr/f/q0psssO0/
via55
Messages postés
14512
Date d'inscription
mercredi 16 janvier 2013
Statut
Membre
Dernière intervention
18 janvier 2025
2 740
Modifié le 24 nov. 2019 à 15:03
Modifié le 24 nov. 2019 à 15:03
Bonjour Ludovic
Voir si ça te convient
https://mon-partage.fr/f/hEQKU7Bp/
J'ai annoté la macro pour comprendre ce qu'elle fait
J'ai rajouté une formule dans la colonne V pour différencier un client sur deux ce qui permet par mise en forme conditionnelle de visualiser mieux chaque bloc de commandes par client, j'ai également différencié par MFC les lignes Réassort et Reliquat
Cdlmnt
Via
Voir si ça te convient
https://mon-partage.fr/f/hEQKU7Bp/
J'ai annoté la macro pour comprendre ce qu'elle fait
J'ai rajouté une formule dans la colonne V pour différencier un client sur deux ce qui permet par mise en forme conditionnelle de visualiser mieux chaque bloc de commandes par client, j'ai également différencié par MFC les lignes Réassort et Reliquat
Cdlmnt
Via
ludodil62
Messages postés
64
Date d'inscription
jeudi 1 mai 2014
Statut
Membre
Dernière intervention
14 septembre 2022
11
25 nov. 2019 à 20:50
25 nov. 2019 à 20:50
Bonjour via55,
Je viens de regarder le fichier, et c'est une nouvelle fois exactement ce qu'il me fallait ! MERCI !!
Par contre en exemple je n'ai mis qu'un extrait du fichier original qui doit faire environ 50 000 lignes.
Pour recalculer tout ça, je n'ai qu'a copier les données à la suite ? Même mise en forme, même tri (par client puis n°jour intégration) ? Et je n'aurai plus qu'à lancer la macro ?
Cdlt
Ludovic
Je viens de regarder le fichier, et c'est une nouvelle fois exactement ce qu'il me fallait ! MERCI !!
Par contre en exemple je n'ai mis qu'un extrait du fichier original qui doit faire environ 50 000 lignes.
Pour recalculer tout ça, je n'ai qu'a copier les données à la suite ? Même mise en forme, même tri (par client puis n°jour intégration) ? Et je n'aurai plus qu'à lancer la macro ?
Cdlt
Ludovic
via55
Messages postés
14512
Date d'inscription
mercredi 16 janvier 2013
Statut
Membre
Dernière intervention
18 janvier 2025
2 740
25 nov. 2019 à 21:18
25 nov. 2019 à 21:18
Re
Oui exactement, la macro repère la dernière ligne remplie de la colonne 1
Par contre avec 50 000 lignes ça va ramer un peu je pense !
Tiens moi au courant
A plus
Oui exactement, la macro repère la dernière ligne remplie de la colonne 1
Par contre avec 50 000 lignes ça va ramer un peu je pense !
Tiens moi au courant
A plus
ludodil62
Messages postés
64
Date d'inscription
jeudi 1 mai 2014
Statut
Membre
Dernière intervention
14 septembre 2022
11
28 nov. 2019 à 18:54
28 nov. 2019 à 18:54
Bonjour Via 55,
Bon, effectivement avec 50 000 lignes ça a ramé un peu.. mais après environ 15 minutes de patience sans toucher le PC, ça a fonctionné ! Encore merci pour le travail effectué.
Par contre ce n'est pas possible de faire en sorte de ne mettre des lettres que sur les commandes groupées ?
En effet, si je veux identifier les commandes groupées par une lettre, c'est pour pouvoir les isoler du reste et calculer un nouveau volume de commande en fonction de ce critère commun via un TCD.
Du coup j'ai galéré un peu pour supprimer les lettres sur les commandes non groupées. C'était un peu galère mais j'ai fini par y arriver. C'est complexe de modifier la macro pour avoir ce résultat (cellule vide si pas de groupement possible) ?
Cdlt.
Ludovic
Bon, effectivement avec 50 000 lignes ça a ramé un peu.. mais après environ 15 minutes de patience sans toucher le PC, ça a fonctionné ! Encore merci pour le travail effectué.
Par contre ce n'est pas possible de faire en sorte de ne mettre des lettres que sur les commandes groupées ?
En effet, si je veux identifier les commandes groupées par une lettre, c'est pour pouvoir les isoler du reste et calculer un nouveau volume de commande en fonction de ce critère commun via un TCD.
Du coup j'ai galéré un peu pour supprimer les lettres sur les commandes non groupées. C'était un peu galère mais j'ai fini par y arriver. C'est complexe de modifier la macro pour avoir ce résultat (cellule vide si pas de groupement possible) ?
Cdlt.
Ludovic
via55
Messages postés
14512
Date d'inscription
mercredi 16 janvier 2013
Statut
Membre
Dernière intervention
18 janvier 2025
2 740
Modifié le 28 nov. 2019 à 20:07
Modifié le 28 nov. 2019 à 20:07
Bonjour Ludovic
Pour les reliquats isolés c'est simple il te suffit de supprimer purement et simplement vers la fin de la macro ces lignes :
par contre pour les réassorts il faut que je regarde
Cdlmnt
Via
Pour les reliquats isolés c'est simple il te suffit de supprimer purement et simplement vers la fin de la macro ces lignes :
Else ' sinon on incremente le code et on inscrit pour le reliquat isolé cod = cod + 1: Range("N" & n) = Chr(cod)
par contre pour les réassorts il faut que je regarde
Cdlmnt
Via
via55
Messages postés
14512
Date d'inscription
mercredi 16 janvier 2013
Statut
Membre
Dernière intervention
18 janvier 2025
2 740
29 nov. 2019 à 01:03
29 nov. 2019 à 01:03
Re
Voir si cette macro te donne les résultats attendus, en principe lettre que pour commandes groupées
https://mon-partage.fr/f/g6v1FLhG/
Par contre je me pose une question concernant les jours d’intégration, tu les as tous calculé un par un ? cela doit être possible par formule ou par macro
Voir si cette macro te donne les résultats attendus, en principe lettre que pour commandes groupées
https://mon-partage.fr/f/g6v1FLhG/
Par contre je me pose une question concernant les jours d’intégration, tu les as tous calculé un par un ? cela doit être possible par formule ou par macro
via55
Messages postés
14512
Date d'inscription
mercredi 16 janvier 2013
Statut
Membre
Dernière intervention
18 janvier 2025
2 740
29 nov. 2019 à 12:09
29 nov. 2019 à 12:09
Bonjour
Je t'avais indiqué les premières lignes à supprimer dans mon message 15 et je ne l'ai pas fait dans le fichier que je t'ai envoyé dans le 16, je me suis occupé des réassorts mais j'ai zappé les reliquats !
Voilà le bon fichier :
https://mon-partage.fr/f/cZPMrV4x/
Cdlmnt
Via
Je t'avais indiqué les premières lignes à supprimer dans mon message 15 et je ne l'ai pas fait dans le fichier que je t'ai envoyé dans le 16, je me suis occupé des réassorts mais j'ai zappé les reliquats !
Voilà le bon fichier :
https://mon-partage.fr/f/cZPMrV4x/
Cdlmnt
Via
ludodil62
Messages postés
64
Date d'inscription
jeudi 1 mai 2014
Statut
Membre
Dernière intervention
14 septembre 2022
11
29 nov. 2019 à 13:16
29 nov. 2019 à 13:16
Bonjour,
Merci pour les fichiers. Je vais tester avec le deuxième dans ce cas.
Pour les jours d'intégration, j'ai fait simple.
Je les ai trié du plus ancien au plus récent. J'ai inséré une colonne a droite de la date, puis saisi 1 dans la première cellule.
Sur les cellules du dessous, jai fait :
Si date = date du dessus, alors même valeur qu'au dessus (soit 1), sinon valeur du dessus + 1.
Ensuite j'ai retrié par numéro de client et numéro de jour.
Je teste le fichier avec mes 50 000 lignes et te tiens au courant. Je vais avoir la même analyse a faire mais sur une autre période.
Cdt
Ludovic
Merci pour les fichiers. Je vais tester avec le deuxième dans ce cas.
Pour les jours d'intégration, j'ai fait simple.
Je les ai trié du plus ancien au plus récent. J'ai inséré une colonne a droite de la date, puis saisi 1 dans la première cellule.
Sur les cellules du dessous, jai fait :
Si date = date du dessus, alors même valeur qu'au dessus (soit 1), sinon valeur du dessus + 1.
Ensuite j'ai retrié par numéro de client et numéro de jour.
Je teste le fichier avec mes 50 000 lignes et te tiens au courant. Je vais avoir la même analyse a faire mais sur une autre période.
Cdt
Ludovic