Créer 1à1 liste à partir de cellules répondant à des conditions [Résolu/Fermé]

Messages postés
575
Date d'inscription
vendredi 11 juillet 2014
Statut
Membre
Dernière intervention
30 mars 2016
- - Dernière réponse : Le Pingou
Messages postés
9494
Date d'inscription
mercredi 11 août 2004
Statut
Contributeur
Dernière intervention
20 août 2019
- 23 juil. 2014 à 17:03
Bonjour,

Sous excel 2007, je n'arrive pas à créer une liste à partir de cellules qui doivent répondre à certaines conditions.

Voici l'exemple concret :

http://cjoint.com/?DGsmFDVfBBM

Les colonnes A, B, C et D font partie d'un tableur de suivi destiné à être actualisé petit à petit.
Le résultat cherché (colonnes F à K dans mon exemple) a pour but d'avoir de manière automatique la liste des clients/raisons concernés par un retard par rapport aux 5 jours à partir de la date de demande.

Merci d'avance pour votre aide !

P.S: recours aux Macros possible ;)
Afficher la suite 

10 réponses

Messages postés
24308
Date d'inscription
lundi 23 juillet 2007
Statut
Contributeur
Dernière intervention
25 août 2019
4727
0
Merci
Bonjour

En VBA, je ne sais pas, mais ci joint une solution simple avec un codage en colonne E:E
ce système renvoie les valeurs dans les conditions suivantes

__si entre les deux dates il y a plus de cinq jours
__s'il y a une date en B inférieure de plus de 5 jours au jour an cours

Par contre je n'ai pas traité le problème des cellules fusionnées en A car je ne sais pas ce que l'on peut avoir comme info dans les cellules hachurées.(Il y a de toutes façons eu de chance de faire fonctionner le système avec des cellules fusionnées)
http://cjoint.com/?DGsneNpdftt

Par ailleurs, bien que je suppose que c'est provisoire, il n'est pas utile de fusionner les cellules à partir de F

crdlmnt

Messages postés
115
Date d'inscription
vendredi 18 juillet 2014
Statut
Membre
Dernière intervention
21 novembre 2014
7
0
Merci
Bonjour,

Voici une version utilisant le VBA :

Pour allimenter la liste je me suis basé sur le fait qu'il y ai un commentaire ou non.
Mais ça peux très bien se faire en calculant la différence entre les 2 dates.

http://cjoint.com/?0GsnUeXuHRh

Petite question : comment vous faites pour mettre votre fichier en lien hypertext.
Moi je me contente de le mettre en gras mais avec le lien c'est encore mieux. ;-)
Vaucluse
Messages postés
24308
Date d'inscription
lundi 23 juillet 2007
Statut
Contributeur
Dernière intervention
25 août 2019
4727 -
Salut weapon
lors du dépôt de fichier, clic droit sur le lien affiché, copier le lien et coller ici
en principe ça fonctionne bien (.. mais pas toujours)
crdlmnt
WeaponEDGE
Messages postés
115
Date d'inscription
vendredi 18 juillet 2014
Statut
Membre
Dernière intervention
21 novembre 2014
7 -
Ok, Merci
pijaku
Messages postés
12247
Date d'inscription
jeudi 15 mai 2008
Statut
Modérateur
Dernière intervention
19 juillet 2019
2130 -
Salut,

Suffit de ne pas le mettre en gras..... Message modifié.

Mes amitiés à Vaucluse
Messages postés
575
Date d'inscription
vendredi 11 juillet 2014
Statut
Membre
Dernière intervention
30 mars 2016
10
0
Merci
Merci pour vos réponses rapides !

Pour Vaucluse :
les formules semblent ok, par contre je ne veux pas de vides dans ma liste, en plus ça m'oblige à ajouter une colonne (même si je peux contourner ce pb là).

Pour WeaponEDGE :

Qu'entendez-vous par "le fait qu'il y ait un commentaire" ?
Le code fonctionne très bien sur l'exemple, merci ! Néanmoins, je pensais pouvoir l'adapter pour changer le nom des cellules/colonnes mais je n'y comprend rien :/

En bref : serait-il possible d'avoir le même résultat avec les dispositions suivantes :
- l'espace des colonnes à remplir (A à D dans mon exemple) est situé dans une AUTRE feuille que la liste à obtenir, voici les références plus précises :

Les colonnes de saisie des infos (avant A à D) se trouvent dans une feuille nommée "Suivi Offres en attente" avec la répartition suivante :
- La colonne client est la colonne E (et non plus A), commençant en E2 jusqu'à indéterminé (E9000 si besoin de définir une limite)
- La colonne Date de demande est la colonne M (et non plus B), idem M2:... M9000?
- La colonne Date de remise est la colonne N (et non plus C), idem N2:...M9000?
- La colonne Raisons du retard est la colonne O (et non plus D), idem O2:...O9000?

Pour la zone où afficher le résultat (avant F à K), elle est dans une feuille nommée "Traitement des demandes", avec la répartition suivante :
- Le premier nom de client à afficher doit se trouver en B9 (fusionnée avec C9 et D9), les prochains en dessous (B10 ; B11 ; Bk..., toujours fusionnée avec Ck et Dk)
- La Raison correspondant au premier nom doit s'afficher en E9, fusionnée avec F9 et G9. Les prochaines étant en E10 ; E11 ; Ek... fusionnée avec Fk et Gk

Voilà merci d'avance !

P.S: si vous n'avez pas le courage de tout reprendre, pouvez-vous juste m'indiquer comment modifier chaque champ "source" dans le code ?
WeaponEDGE
Messages postés
115
Date d'inscription
vendredi 18 juillet 2014
Statut
Membre
Dernière intervention
21 novembre 2014
7 -
Theo.R,

Voici le code modifié en fonction des critères que tu m'as donné.
Rajoutes dans ton fichier un onglet nommé "Liste Retard"
Les colonnes 1 et 2 seront alimenté par la macro.

J'ai rajouté des commentaires (il apparaitrons en vert lorsque tu copieras le code) pour t'aider à comprendre le code.

Ce qu'il faut savoir si tu veux toucher aux coordonnées :
Cells(1,1) signifie la cellule A1.
les coordonnée sont les suivante : cells(N° Ligne, N°Colonne)

sheets("Suivi Offres en attente").cells(2,1) fait référence à la cellule A2 de la feuille "Suivi Offres en attente")

Pour plus de facilité dans la modification des Macros je rentre toujours le nom des Feuilles dans des variables, à savoir ShtA et ShtB. Si tu dois modifier le nom tu as juste à modifier le contenu de la variable en début de code et ce sera pris en compte pour tous le reste de la macro.

Sub Recap_CD()
    'Nom de la feuille Source
    ShtA = "Suivi Offres en attente"
    'Nom de la feuille Destination
    ShtB = "Liste Retard"

    
    'Analyse le nombre de ligne occupé dans chaque Tableau
    Nb_LigneA = Sheets(ShtA).Cells(Rows.Count, 5).End(xlUp).Row
    Nb_LigneB = Sheets(ShtB).Cells(Rows.Count, 1).End(xlUp).Row
    
    'Mise à Blanc du Tableau Destination
    For i = 2 To Nb_LigneB
        Sheets(ShtB).Cells(i, 1) = ""
        Sheets(ShtB).Cells(i, 2) = ""
    Next i
    
    'Alimentation du Tableau Destination
    X = 2
    For i = 2 To Nb_LigneA
        Commentaire = Sheets(ShtA).Cells(i, 4)
        
        If Commentaire <> "" Then
            Sheets(ShtB).Cells(X, 1) = Sheets(ShtA).Cells(i, 5)
            Sheets(ShtB).Cells(X, 2) = Sheets(ShtA).Cells(i, 15)
            X = X + 1
        End If
    Next i
    
    MsgBox ("Traitement Terminé")
End Sub


Cette macro est évolutive. Si tu alimentes ton Tableau Source les données seront pris en compte lors du prochain lancement

Et dernière chose. Pour créer un bouton original, télécharge une image n'importe laquelle. Insert là sur ta feuille excel et fais un clique droit dessus puis "Assigner une Macro". clique sur Recap_CD puis OK (LaMacro est maintenant rattaché à l'image). Cliques n'importe où sur ta feuille pour désélectionner l'image et reclique dessus; La Macro se lancera.
Theo.R
Messages postés
575
Date d'inscription
vendredi 11 juillet 2014
Statut
Membre
Dernière intervention
30 mars 2016
10 -
Merci beaucoup je vais regarder ça :)
Theo.R
Messages postés
575
Date d'inscription
vendredi 11 juillet 2014
Statut
Membre
Dernière intervention
30 mars 2016
10 -
Je déterre le sujet fraîchement "résolu" car j'ai un double problème :

N.B: par rapport à mon dernier commentaire, j'ai du décaler mes colonnes M, N et O jusqu'à O, P et Q.

1. j'avais d'abord opté pour la solution avec formules de Vaucluse, qui marchait bien SAUF que l'insertion de ligne dans la feuille de saisie "Suivi Offres en attente" fait planter la colonne avec la formule :
=SI('Suivi Offres en attente'!O2=0;"";SI((AUJOURDHUI()-'Suivi Offres en attente'!O2>DelaiAvantRetard)*('Suivi Offres en attente'!A2="OeA");MAX($A$1:A1)+1;""))

J'ai en effet un saut dans la succession A2 ; A3 ; A4 .... au numéro où j'ai inséré une ligne ..

La solution ne me convient donc plus puisque les utilisateurs de mon document ont besoin de pouvoir insérer des lignes..

2. j'ai alors regardé le code proposé par WeaponEDGE : j'ai bien saisi comment marche les références et j'ai mis à jour le tout, mais quand j'exécute la macro ça n'a aucun effet à part m'afficher la fenêtre "Traitement terminé".

Il me faudrait donc :
1. soit un code permettant en VBA d'étirer en 'Gestion des Retards'!A2:A2000 la formule
=SI('Suivi Offres en attente'!O2=0;"";SI((AUJOURDHUI()-'Suivi Offres en attente'!O2>DelaiAvantRetard)*('Suivi Offres en attente'!A2="OeA");MAX($A$1:A1)+1;""))

2. soit un code VBA reprenant tout depuis le début, i.e me permettant d'afficher en liste sans espaces les références des seules lignes d'un tableau qui répondent à la condition suivante (exemple pris pour la ligne 2) :
(AUJOURDHUI()-'Suivi Offres en attente'!O2>DelaiAvantRetard)*('Suivi Offres en attente'!A2="OeA")


Pour la solution 1, j'ai cherché sur plein de sujets déjà traités, mais je n'ai pas réussi à trouver un code qui marche dans mon cas alors que ça a l'air plutôt simple : étirer une formule par VBA...

Merci d'avance !
Le Pingou
Messages postés
9494
Date d'inscription
mercredi 11 août 2004
Statut
Contributeur
Dernière intervention
20 août 2019
970 -
Bonjour,
Je veux bien voir s'il est possible de le réaliser, mais pouvez-vous m'exposez le problème...!
Ou m'indiquer les éléments à prendre en compte!
Salutations.
Le Pingou
Theo.R
Messages postés
575
Date d'inscription
vendredi 11 juillet 2014
Statut
Membre
Dernière intervention
30 mars 2016
10 -
Bonjour Le Pingou,

Merci de votre réponse, voici un doc banalisé que j'ai fait en veillant à garder les mêmes références :

http://cjoint.com/?DGwsB5Hxozb

N'hésitez pas à revenir vers moi si ce n'est pas assez clair.

Bonne soirée,
Messages postés
9494
Date d'inscription
mercredi 11 août 2004
Statut
Contributeur
Dernière intervention
20 août 2019
970
0
Merci
Bonjour,
J'ai regardé en diagonal et une première question :
Vous dites : pour les lignes dont la Date de la demande a dépassé le DelaiAvantRetard fixé par rapport à aujourd'hui alors que la date de remise n'est pas renseignée
Ne trouvant pas la date [DelaiAvantRetard], quel critère je prends pour dire que la ligne 2 [Client 1] ne dois pas figurer dans le relevé.... ?

J'ai oublié : la structure de la feuille [Gestion des Retards] pour créer la procédure... !

Salutations.
Le Pingou
Theo.R
Messages postés
575
Date d'inscription
vendredi 11 juillet 2014
Statut
Membre
Dernière intervention
30 mars 2016
10 -
Le délai est fixé à 5 jours pour l'instant, dsl de l'imprécision
Messages postés
9494
Date d'inscription
mercredi 11 août 2004
Statut
Contributeur
Dernière intervention
20 août 2019
970
0
Merci
Bonjour,
En attendant, j'ai relu la discussion et je pense que la proposition de Vaucluse ou la procédure de WeaponEDGE répondent à votre demande (sauf si vous avez des cellules fusionnées). Toutefois elles doivent être adaptées à la structure de votre classeur et c'est là que se trouve le problème... !
Sans connaitre la structure de votre application cela va être difficile de vous donner la bonne proposition !

Theo.R
Messages postés
575
Date d'inscription
vendredi 11 juillet 2014
Statut
Membre
Dernière intervention
30 mars 2016
10 -
Comme je l'ai précisé dans mon commentaire de relance leurs solutions ne répondent pas totalement à la demande, notamment à cause de l'insertion de ligne (les cellules fusionnées ne posaient pas de pb pour les formules)

--
Messages postés
9494
Date d'inscription
mercredi 11 août 2004
Statut
Contributeur
Dernière intervention
20 août 2019
970
0
Merci
Bonjour,
Merci, mais pas entièrement d'accord avec : notamment à cause de l'insertion de ligne (les cellules fusionnées ne posaient pas de pb pour les formules)
Mais bon, c'est vous qui voyez... !
Dans le message précédent j'ai mentionnée :
.- la structure de la feuille [Gestion des Retards] pour créer la procédure... !
.- Sans connaitre la structure de votre application cela va être difficile de vous donner la bonne proposition !
Question : Est-ce qu'il y a des fonctions dans les lignes (cellules), des lignes vides, des cellules fusionnées (si oui leur position dans la feuille) à traiter... ?

Messages postés
575
Date d'inscription
vendredi 11 juillet 2014
Statut
Membre
Dernière intervention
30 mars 2016
10
0
Merci
Je vous envoie un aperçu demain mais oui il y a quelques formules donnant des stats sur les retards.

--
Messages postés
575
Date d'inscription
vendredi 11 juillet 2014
Statut
Membre
Dernière intervention
30 mars 2016
10
0
Merci
Voici le document "copie-conforme" du document que j'utilise :

http://cjoint.com/?DGxjiMWsRCu

J'ai donc ajouté la feuille "Gestion des retards" sur laquelle doit apparaître le résultat.

En outre, j'ai laissé la solution de Vaucluse que j'avais utilisée au début et qui fonctionne SAUF en cas d'insertion de ligne (et peu importe les fusions de cellules, d'où mon dernier commentaire Le Pingou).

Des idées pour avoir le bon résultat même en cas d'insertion de ligne ?

Merci d'avance :)
Messages postés
115
Date d'inscription
vendredi 18 juillet 2014
Statut
Membre
Dernière intervention
21 novembre 2014
7
0
Merci
Bonjour Theo.R,

Je te propose une nouvelle version en VBA qui répond normalement à toutes tes exigeances.

http://cjoint.com/?0GxlL3QQvIM

Le fichier compare la date du jour avec les date de demande puis si la différence est suppérieur au délai mentionné en feuille2 alors il insère les donné dans le taleau en feuille2.

Tu peux fusionner les cellules de la colonne E quand il s'agit d'un même clients
Tu peux insérer des lignes

La seule contrainte est de laisser le mot FIN DE LISTE à la fin de ton tableau dans la colonne client.

Tu peux changer le délai de retard accordé dans la 2nd feulle.

Pour Généré le tout clique sur le bouton GO vert de la première feuille.

Si tu préfères une version paramétrable facilement je peux te créer une 3ème feuille ou tu pourras modifier les données primordiale pour la macro sans avoir à les changer dans le code lui même.
WeaponEDGE
Messages postés
115
Date d'inscription
vendredi 18 juillet 2014
Statut
Membre
Dernière intervention
21 novembre 2014
7 -
Bon, J'ai trouvé une solution pour supprimer la FIN DE LISTE:

Contraintes : En ligne 1 il ne doit y avoir que les titres du Tableau il ne faut pas d'autres donnée sur la droite du Tableau.

Logique d'exécution : La macro compte le nombre de colonne que comporte le Tableau par rapport au dernier titre renseigné (Le plus à droite).
A partir de ce moment là, il va calculer le nombre de ligne pour chaque colonne et va utiliser comme référence le plus élevé.

Le condition OeA à été ajouté (ATTENTION les minuscule et majuscule sont pris en compte, "OEA" ne fonctionnera pas)

Le "&" à été remplacé par "/"

Ci joint le Fichier

http://cjoint.com/?0GxpNsOKTIL
Theo.R
Messages postés
575
Date d'inscription
vendredi 11 juillet 2014
Statut
Membre
Dernière intervention
30 mars 2016
10 -
Super boulot, ça marche à merveille !! Même sans mettre le "Fin de la liste", et je gagne du temps de calcul à ne faire que les lignes non vides !

Qu'appelez-vous "la droite du Tableau" ? mon tableau a des colonnes de A jusqu'à AC, la ligne 1 étant les titres oui.

J'allais cocher résolu, mais je viens de me rendre compte que ce code n'affiche pas avec le nom du client le n° de ligne concernée :/ (j'y arrivais avec les formules..)

Une ultime solution ?

A bientôt
WeaponEDGE
Messages postés
115
Date d'inscription
vendredi 18 juillet 2014
Statut
Membre
Dernière intervention
21 novembre 2014
7 -
Pour faire simple, il faut que sur ligne 1 il n'y ait que les titres de votre Tableau.
Votre tableau se termine en colonne AC donc il ne faut rien saisir à partir de AD1 jusqu'à XFD1 qui marque la Fin de la Feuille, sauf biensur si vous souhaitez rajouter une colonne dans votre tableau.
Theo.R
Messages postés
575
Date d'inscription
vendredi 11 juillet 2014
Statut
Membre
Dernière intervention
30 mars 2016
10 -
Ok c'est noté !

Pour le n° de ligne à afficher sous le nom du client (ou à côté séparé par un "/") ?
WeaponEDGE
Messages postés
115
Date d'inscription
vendredi 18 juillet 2014
Statut
Membre
Dernière intervention
21 novembre 2014
7 -
Autant pour moi, petit oubli.
En prime toutes les exigeance sont prisent en compte, même les saut de ligne dans les cellules. ;-)

http://cjoint.com/?0GxqQ5NOIYK
Messages postés
9494
Date d'inscription
mercredi 11 août 2004
Statut
Contributeur
Dernière intervention
20 août 2019
970
0
Merci
Bonjour,
Merci pour le fichier.
Et sans macro......
Dans le sens ou vous insérez des lignes dans le tableau cela modifie les références dans la formule de l'ami Vaucluse (amicales salutations). Je l'ai modifié en utilisant la fonction INDIRECT().
Je vous laisse voir si cela est conforme à vos attentes... !
Le fichier : http://cjoint.com/?3Gxra1rGzlX