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

Excel Discussion :

Constituer une arborescence à partir d'une seule colonne


Sujet :

Excel

  1. #1
    Candidat au Club
    Femme Profil pro
    Chargé d'affaire
    Inscrit en
    Octobre 2014
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 40
    Localisation : Algérie

    Informations professionnelles :
    Activité : Chargé d'affaire

    Informations forums :
    Inscription : Octobre 2014
    Messages : 8
    Points : 3
    Points
    3
    Par défaut Constituer une arborescence à partir d'une seule colonne
    Bonsoir,

    Je galère avec mon fichier, si quelqu'un peut m'aider :

    J'ai 2 colonnes : dans la première sont listés les codes (type : champ1.champ.2.champ3) et la seconde les libellés.
    Je souhaite d'abord afficher le niveau dans une autre colonne : à chaque point dans le code on change de niveau
    champ1 : 1
    champ1.champ2 : 2
    champ1.champ2.champ3 : 3

    ensuite en fonction du niveau, afficher le libellé dans une colonne à part pour former l'arborescence.

    Je ne sais pas si c'est claire.....merci d'avance.

  2. #2
    Responsable
    Office & Excel


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

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

    Informations forums :
    Inscription : Novembre 2003
    Messages : 19 122
    Points : 55 911
    Points
    55 911
    Billets dans le blog
    131
    Par défaut
    Salut.

    Trouver le niveau est relativement facile. Pour la seconde partie de ta question, je suppose que tu veux retrouver comme "libellé" la valeur se trouvant après le dernier"." de la chaîne. Idéalement, pour retrouver l'arborescence, il faut le libellé ET le libellé du niveau parent, sinon, tu ne sais pas reconstruire l'arbre.

    1. Pour le niveau
    Il suffit de compter le nombre de points dans la chaine. On va dans les faits compter la différence entre la longueur de la chaine et la longueur de la chaine sans les points. On obtiendra donc 0 pour le niveau 1, 1 pour le niveau 2, etc. Il suffit donc d'ajouter 1 à la différence obtenue.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    =NBCAR(A2)-NBCAR(SUBSTITUE(A2;".";""))+1
    2. Pour le libellé
    Pour retrouver le libellé (c'est-à-dire ce qui se trouve après le dernier point), il faut utiliser une matricielle qui va permettre de "boucler" sur les caractères de la chaîne... C'est un peu tiré par les cheveux, mais ça fonctionne.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    =DROITE(A2;NBCAR(A2)-MAX((LIGNE(INDIRECT("a1:a" & NBCAR(A2))))*(STXT(A2;LIGNE(INDIRECT("a1:a" & NBCAR(A2)));1)=".")))
    Attention: A VALIDER en matricielle (SHIFT+CTRL+ENTER)

    3. Pour le libellé parent
    Pour trouver le libellé parent, il faut tester qu'il y en a un (le niveau est au moins de 2) et si c'est le cas, il faut prendre ce qui se trouve entre les avant-dernier et dernier points.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    =SI(MAX((LIGNE(INDIRECT("a1:a" & NBCAR(A2))))*(STXT(A2;LIGNE(INDIRECT("a1:a" & NBCAR(A2)));1)="."))<>0;STXT(A2;GRANDE.VALEUR(((LIGNE(INDIRECT("a1:a" & NBCAR(A2))))*(STXT(A2;LIGNE(INDIRECT("a1:a" & NBCAR(A2)));1)="."));2)+1;MAX((LIGNE(INDIRECT("a1:a" & NBCAR(A2))))*(STXT(A2;LIGNE(INDIRECT("a1:a" & NBCAR(A2)));1)="."))-GRANDE.VALEUR(((LIGNE(INDIRECT("a1:a" & NBCAR(A2))))*(STXT(A2;LIGNE(INDIRECT("a1:a" & NBCAR(A2)));1)="."));2)-1);"")
    Attention: A VALIDER en matricielle (SHIFT+CTRL+ENTER)

    Nom : 09-03-15 14-55-42.png
Affichages : 473
Taille : 9,7 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...
    ---------------

  3. #3
    Candidat au Club
    Femme Profil pro
    Chargé d'affaire
    Inscrit en
    Octobre 2014
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 40
    Localisation : Algérie

    Informations professionnelles :
    Activité : Chargé d'affaire

    Informations forums :
    Inscription : Octobre 2014
    Messages : 8
    Points : 3
    Points
    3
    Par défaut
    Merci beaucoup pour ton aide.

    En effet ça marche pour le niveau,
    cependant pour les libellés, ils ne se trouvent pas dans le code, c'est sur une autre colonne. A chaque code un libellé associé.

    J'ai fait une capture d'écran de ce que je souhaite afficher (c'est le niveau qui déterminera le positionnement du libellé dans la colonne adéquate).


    Nom : 1.jpg
Affichages : 390
Taille : 27,0 Ko

  4. #4
    Responsable
    Office & Excel


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

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

    Informations forums :
    Inscription : Novembre 2003
    Messages : 19 122
    Points : 55 911
    Points
    55 911
    Billets dans le blog
    131
    Par défaut
    Ok. Je n'avais pas compris cela ainsi.

    Tu peux alors utiliser la formule suivante dans les cellules qui doivent recevoir les libellés. Note toutefois que tu devras la tirer sur autant de colonnes que le maximum de niveaux que tu peux avoir. Cela étant, je l'ai écrite "générique" pour que tu puisses la tirer vers la droite sans devoir l'adapter.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    =SI(COLONNE()=COLONNE($C2)+$A2;$B2;"")
    Elle est rédigée en fonction de l'illustration qui suit, conformément à ton exemple.

    Nom : 09-03-15 20-46-11.png
Affichages : 515
Taille : 13,8 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
    Candidat au Club
    Femme Profil pro
    Chargé d'affaire
    Inscrit en
    Octobre 2014
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 40
    Localisation : Algérie

    Informations professionnelles :
    Activité : Chargé d'affaire

    Informations forums :
    Inscription : Octobre 2014
    Messages : 8
    Points : 3
    Points
    3
    Par défaut
    Super, tu m'as fait gagné un temps fou. Je te remercie.

    Je vais encore abuser de ta gentillesse, j'ai 1 autre point, toujours dans le même fichier.Je compte le faire manuellement, mais peut être qu'il y a une formule qui me réglerait ça.

    Chaque article a un code localisation. Sauf qu'il est renseigné sur plusieurs colonnes (père et fils). Je n'ai pas besoin de connaitre les pères.
    Ci-dessous un exemple, en gros je souhaite afficher toutes les localisations sur une seule colonne (la colonne jaune) et logiquement je suis censée prendre à chaque fois le dernier code qui s'affiche avant la cellule vide. Je ne sais pas si c'est clair.
    Nom : 2.jpg
Affichages : 546
Taille : 31,6 Ko

  6. #6
    Responsable
    Office & Excel


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

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

    Informations forums :
    Inscription : Novembre 2003
    Messages : 19 122
    Points : 55 911
    Points
    55 911
    Billets dans le blog
    131
    Par défaut
    Citation Envoyé par mimolette.dz Voir le message
    Super, tu m'as fait gagné un temps fou. Je te remercie.[...]
    Pas de quoi... On est là pour ça...

    tu peux utiliser une formule comme celle-ci:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    =INDEX(B2:D2;MAX(COLONNE(B2:E2)*(B2:E2<>""))-COLONNE(A2))
    A valider en matricielle (shift+ctrl+ENTER)

    Elle a été rédigée en fonction de la configuration illustrée ci-dessous... Attention, les accolades ont été ajoutées par Excel lors de la validation matricielle. Il ne faut pas les ajouter toi-même


    Nom : 09-03-15 21-46-56.png
Affichages : 423
Taille : 12,8 Ko

    P.S.: On aurait pu imbriquer des SI (encore raisonnable avec trois colonnes) mais ça devient vite ingérable avec un nombre plus grand de colonnes...
    "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
    Candidat au Club
    Femme Profil pro
    Chargé d'affaire
    Inscrit en
    Octobre 2014
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 40
    Localisation : Algérie

    Informations professionnelles :
    Activité : Chargé d'affaire

    Informations forums :
    Inscription : Octobre 2014
    Messages : 8
    Points : 3
    Points
    3
    Par défaut
    ça fonctionne parfaitement. Merci infiniment

  8. #8
    Responsable
    Office & Excel


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

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

    Informations forums :
    Inscription : Novembre 2003
    Messages : 19 122
    Points : 55 911
    Points
    55 911
    Billets dans le blog
    131
    Par défaut
    Deux petites choses.

    Une coquille s'est glissée dans ma formule, qui ne prête pas à problème tant que tu n'as que trois colonnes...

    Je t'ai donné la formule suivante:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    =INDEX(B2:D2;MAX(COLONNE(B2:E2)*(B2:E2<>""))-COLONNE(A2))
    il faut utiliser:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    =INDEX(B2:D2;MAX(COLONNE(B2:D2)*(B2:D2<>""))-COLONNE(A2))
    Sinon, lorsque tu mettras une valeur en E2, tu auras une erreur #REF! car Index pointera trop loin par rapport à la plage qui lui est passée.

    Evidemment, si tu dois ajouter des localisations, tu devras modifier la formule: B2:D2 deviendra par exemple B2:Z2 (si tu as 25 sous-localisations... Tu comprends que les SI imbriqués, ça poserait problème)... Si c'était le cas, on pourrait rendre la formule plus générique grâce à DECALER() par exemple.
    "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...
    ---------------

  9. #9
    Candidat au Club
    Femme Profil pro
    Chargé d'affaire
    Inscrit en
    Octobre 2014
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 40
    Localisation : Algérie

    Informations professionnelles :
    Activité : Chargé d'affaire

    Informations forums :
    Inscription : Octobre 2014
    Messages : 8
    Points : 3
    Points
    3
    Par défaut
    Bonjour,

    J'ai commencé à travailler sur mon fichier et j'ai justement rencontré ce problème avec le niveau 4.

    Quel plaisir de découvrir ton dernier message, tu m'as fait gagné du temps. Merci infiniment.

Discussions similaires

  1. Réponses: 2
    Dernier message: 08/03/2010, 15h43
  2. [Batch] Créer une chaine à partir d'une variable et d'une autre chaine
    Par mlle lain dans le forum Scripts/Batch
    Réponses: 1
    Dernier message: 10/11/2009, 16h26
  3. Saisir une image à partir d'une photo ou d'une vidéo
    Par lohengrin56 dans le forum Flash/Flex
    Réponses: 0
    Dernier message: 07/07/2009, 16h17
  4. Réponses: 2
    Dernier message: 05/01/2009, 12h45
  5. Réponses: 5
    Dernier message: 22/05/2008, 14h42

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