IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Macros et VBA Excel Discussion :

Problème Mettre une ligne Défini par un chiffre [Toutes versions]


Sujet :

Macros et VBA Excel

  1. #1
    Membre confirmé
    Homme Profil pro
    Technicien d'usinage
    Inscrit en
    Juillet 2017
    Messages
    132
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Technicien d'usinage

    Informations forums :
    Inscription : Juillet 2017
    Messages : 132
    Par défaut Problème Mettre une ligne Défini par un chiffre
    Bonjour,

    Le titre est pas très explicite, et vous expliquer c'est aussi compliquer, mais je vais essayer

    Je rencontre un problème.
    Sur Excel j'ai deux feuilles
    Une avec pleins de ligne de références, ainsi que les produits
    Et l'autre une feuille propre avec des informations concernant un le produit avec les lignes exacte en fonction du produit
    Dans la feuilles avec les références, je dois choisir les quelles doivent apparaître.
    Exemple :
    Produit 1
    Vérifier la quantité : 1
    Sortir le dossier : 2
    Sortir le dossier dangereux : 0
    Nettoyer Zone : 3
    Les chiffres a coté seront l'ordre des lignes,
    C'est compliquer a expliquer je suis désolé je vous joins des images pour une meilleure compréhension

    Cordialement
    Nom : Produit1.jpg
Affichages : 130
Taille : 102,5 KoNom : Produit2.jpg
Affichages : 125
Taille : 107,4 Ko

  2. #2
    Expert confirmé
    Homme Profil pro
    Electrotechnicien
    Inscrit en
    Juillet 2016
    Messages
    3 241
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 71
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Electrotechnicien

    Informations forums :
    Inscription : Juillet 2016
    Messages : 3 241
    Par défaut
    Bonjour,

    Si j'ai bien compris, j'ai recréé vos 2 feuilles à l'identique(ou presque), l'une que j'ai nommé "Produit_Numero" et qui contient les informations concernant chaque produit avec les lignes exactes en fonction du produit et la seconde "Preparation_Produit" qui contient la référence du produit et sur laquelle on veut ramener la ligne de préparation de la précédente feuille.
    Dans cette dernière, formule appliquée en cellule E4 et à tirer vers le bas:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     =INDEX(Produit_Numero!$A$1:$I$8;EQUIV(LIGNE()-3;INDIRECT("Produit_Numero!"&CAR(EQUIV($E$1;Produit_Numero!$A$3:$I$3;0)+64)&"1:"&CAR(EQUIV($E$1;Produit_Numero!$A$3:$I$3;0)+64)&"8"));1)
    Maintenant, je ne connais pas votre version d'excel, mais si elle est postérieure à 2010 je pense qu'une autre personne disposant d'une version plus récente que la mienne peut vous proposer une solution avec POWER QUERY(je dis ça sous réserve).

    Pièce jointe 604354

    Cdlt

  3. #3
    Membre Expert
    Homme Profil pro
    Ingénieur
    Inscrit en
    Août 2010
    Messages
    667
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Août 2010
    Messages : 667
    Par défaut
    Bonjour,

    L'utilisation de tableaux structurés simplifie la formule et la rend plus robuste aux aléas du temps (insertion de colonnes/lignes en haut à gauche des tables, ajout de produits, etc):
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    =SIERREUR(INDEX(t_PreparationTousProduits[1- Preparation produit]; EQUIV([@[N° ligne]]; INDIRECT("t_PreparationTousProduits[" & Produit & "]"); 0)); "")
    Elle permet aussi d'introduire une validation de données facile pour la case du produit (idéalement les produits seraient triés par ordre croissant ou alphabétique dans la table source ou à défaut, sur office 365, utiliser la fonction tri dans le nom "Listeproduits").


    NB: La fonction indirect est une fonction volatile (i.e. recalculée à chaque changement dans Excel) mais dans le cas présent le besoin ne semble pas complexe donc ce choix paraît raisonnable car il contribue à simplifier la formule.

    MrCMTueurx_Problème Mettre une ligne Défini par un chiffre_Alternative.xlsx


    Edit: une solution Power Query est effectivement possible avec la fonction M unpivot puis l'utilisation d'un tableau croisé dynamique en sortie mais je pense que l'approche par formule est plus simple dans le cas présent. La clé de la simplicité comme toujours est l'utilisation des tableaux structurés (qui seraient d'ailleurs obligatoires pour la solution Power Query).

  4. #4
    Rédacteur/Modérateur


    Homme Profil pro
    Formateur et développeur chez EXCELLEZ.net
    Inscrit en
    Novembre 2003
    Messages
    19 125
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 58
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur et développeur chez EXCELLEZ.net
    Secteur : Enseignement

    Informations forums :
    Inscription : Novembre 2003
    Messages : 19 125
    Billets dans le blog
    131
    Par défaut
    Salut

    Citation Envoyé par Promethee25 Voir le message
    [...]L'utilisation de tableaux structurés simplifie la formule et la rend plus robuste[...]
    => mon tuto sur les tableaux structurés. Ca permet de se détacher de la place et du nombre des données dans le classeur (feuille, position dans la feuille et nombre de lignes fluctuant). Peut-être qu'à force de le répéter, ça finira par rentrer chez certains ^^


    Perso, je ne suis pas fan de INDIRECT qui amène souvent à du hard coding au niveau de la formule

    Avec un tableau structuré nommé Tableau1 comme ci-dessous, j'utiliserais la formule suivante: =INDEX(Tableau1[Etape];EQUIV($F3;DECALER(Tableau1[Etape];0;EQUIV($F$2;Tableau1[#En-têtes];0)-1);0)) assortie éventuellement d'un SIERREUR si les produits n'ont pas tous le même nombre d'étapes à réaliser

    Nom : 2021-09-05_111153.png
Affichages : 102
Taille : 53,9 Ko

    Je ne sais pas combien tu as de produits et combien tu as d'étapes, mais il m'aurait semblé plus judicieux de travailler en permutant les lignes et les colonnes. Il faut noter que les codes des produits deviennent du texte dans les intitulés des tableaux (ce qu'ils devraient être de toute manière, un code produit n'étant pas une valeur numérique) et donc que EQUIV & Co doivent rechercher du texte (d'où F2 en texte dans mon illustration)


    Perso, j'aurais d'ailleurs créé un tableau à deux colonnes Produit/Etape avec listes déroulantes pour choisir les valeurs. Ca permettrait soit un filtre sur le tableau initial, soit une simple extraction par Power Query sur le numéro du produit (Valable non pas pour les versions postérieures à la 2010, mais pour les versions à partir de la 2010 ). De plus, je n'aime jamais quand des valeurs métier deviennent des intitulés de colonne d'une table de données (que ce soit le numéro de l'article ou l'intitulé de l'étape). Ce n'est clairement pas une bonne pratique, de mon point de vue, car elle impose une modification de structure (ajour de colonne, notamment) en cas d'ajout d'un article(si on met les articles en intitulés de colonne) ou d'étape (si on met les étapes en intitulés de colonnes). De plus, la matrice carrée impose un nombre de cellules égal à NB articles * NB étapes, ce qui me semble vite lourd à gérer. La matrice carrée est en général le résultat d'un traitement et non la source de ce traitement.


    Avec une version XL365 et l'organisation en deux colonnes telle que la préconise, l'extraction des étapes pourrait être très simple:
    Nom : 2021-09-05_112642.png
Affichages : 105
Taille : 12,2 Ko
    "Plus les hommes seront éclairés, plus ils seront libres" (Voltaire)
    ---------------
    Mes billets de blog sur DVP
    Mes remarques et critiques sont purement techniques. Ne les prenez jamais pour des attaques personnelles...
    Pensez à utiliser les tableaux structurés. Ils vous simplifieront la vie, tant en Excel qu'en VBA ==> mon tuto
    Le VBA ne palliera jamais une mauvaise conception de classeur ou un manque de connaissances des outils natifs d'Excel...
    Ce ne sont pas des bonnes pratiques parce que ce sont les miennes, ce sont les miennes parce que ce sont des bonnes pratiques
    VBA pour Excel? Pensez D'ABORD en EXCEL avant de penser en VBA...
    ---------------

  5. #5
    Membre Expert
    Homme Profil pro
    Ingénieur
    Inscrit en
    Août 2010
    Messages
    667
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Août 2010
    Messages : 667
    Par défaut
    Citation Envoyé par Pierre Fauconnier Voir le message
    Perso, je ne suis pas fan de INDIRECT qui amène souvent à du hard coding au niveau de la formule
    Bonjour Pierre,

    Dans l'absolu je suis d'accord mais pour mon cas d'utilisation ci-dessus, cela me semble acceptable car un nom de table est généralement correctement défini à la création de la table puis n'est plus modifié ensuite. Le nom de colonne attaqué reste bien dynamique.

    Mais au global, ta proposition de restructuration me semble effectivement meilleure.

  6. #6
    Rédacteur/Modérateur


    Homme Profil pro
    Formateur et développeur chez EXCELLEZ.net
    Inscrit en
    Novembre 2003
    Messages
    19 125
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 58
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur et développeur chez EXCELLEZ.net
    Secteur : Enseignement

    Informations forums :
    Inscription : Novembre 2003
    Messages : 19 125
    Billets dans le blog
    131
    Par défaut
    Salut Prométhée,

    Je voulais souligner que l'obligation d'utiliser INDIRECT découle souvent (pas toujours..., on reste cool) d'un défaut de conception. Ici, on voit que l'organisation des données avec des données "métier" en intitulés amène à utiliser INDIRECT, même si d'autres solutions existent avec la même "organisation" des données". Pour moi, être amené à une solution avec "INDIRECT" signifie: ATTENTION, ma conception est probablement à revoir.

    Bien sûr, cette remarque vaut pour les versions "actuelles" d'Excel... Je considère que XL2010 est la version la plus ancienne pour une utilisation professionnelle d'Excel (maturité des tableaux structurés, Power Query, ...)
    "Plus les hommes seront éclairés, plus ils seront libres" (Voltaire)
    ---------------
    Mes billets de blog sur DVP
    Mes remarques et critiques sont purement techniques. Ne les prenez jamais pour des attaques personnelles...
    Pensez à utiliser les tableaux structurés. Ils vous simplifieront la vie, tant en Excel qu'en VBA ==> mon tuto
    Le VBA ne palliera jamais une mauvaise conception de classeur ou un manque de connaissances des outils natifs d'Excel...
    Ce ne sont pas des bonnes pratiques parce que ce sont les miennes, ce sont les miennes parce que ce sont des bonnes pratiques
    VBA pour Excel? Pensez D'ABORD en EXCEL avant de penser en VBA...
    ---------------

  7. #7
    Membre confirmé
    Homme Profil pro
    Technicien d'usinage
    Inscrit en
    Juillet 2017
    Messages
    132
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Technicien d'usinage

    Informations forums :
    Inscription : Juillet 2017
    Messages : 132
    Par défaut
    Citation Envoyé par ARTURO83 Voir le message
    ...
    Bonjour Arturo,
    Merci de ta réponse,

    J'ai bien essayer cela fonctionne bien mais, je ne peux pas inverser les numéro des lignes, exemple je ne peux pas mettre la ligne 2 avant la ligne 1

    Je te remercie quand même

  8. #8
    Membre confirmé
    Homme Profil pro
    Technicien d'usinage
    Inscrit en
    Juillet 2017
    Messages
    132
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Technicien d'usinage

    Informations forums :
    Inscription : Juillet 2017
    Messages : 132
    Par défaut
    Citation Envoyé par Pierre Fauconnier Voir le message
    ...
    Bonjour Pierre,

    Merci beaucoup pour cette solution qui est parfaite pour moi,

    Je vais utiliser ta première solution qui est vraiment plus adapté dans mon cas.

    Cordialement

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [XL-2016] Problème de formule au sein d'une cellule définie par 2 variables
    Par Runsh63 dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 30/04/2019, 14h07
  2. Réponses: 6
    Dernier message: 24/05/2015, 20h19
  3. [XL-2010] Problème de syntaxe pour mettre une ligne en gras
    Par juju05 dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 03/04/2015, 14h43
  4. Réponses: 1
    Dernier message: 22/07/2014, 13h07
  5. [XL-2003] Insérer une ligne au numéro de ligne défini par l'opérateur
    Par Titian dans le forum Macros et VBA Excel
    Réponses: 8
    Dernier message: 16/10/2013, 13h21

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo