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

Conception Discussion :

Extraction de données d'un tableau complexe [XL-2016]


Sujet :

Conception

  1. #1
    Nouveau Candidat au Club
    Homme Profil pro
    Directeur de projet
    Inscrit en
    Février 2018
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Directeur de projet
    Secteur : Distribution

    Informations forums :
    Inscription : Février 2018
    Messages : 4
    Points : 1
    Points
    1
    Par défaut Extraction de données d'un tableau complexe
    Bonjour à tous,

    Merci de m'accueillir dans le forum.

    Je vais tenter de vous présenter ma problématique sachant qu'il est déconseillée de mettre un fichier joint :-)

    J'ai un bon niveau sur Excel concernant les formules mais je n'ai que peu de connaissances en codage, juste faire des copier coller de code macro..

    Voici ce que je souhaiterai réaliser :

    j'ai un onglet (capture 1)Nom : Capture 1.JPG
Affichages : 1431
Taille : 190,2 Ko
    dans les colonnes D et suivantes, je vais indiquer des prénoms :

    Dans l'onglet 2, je souhaite avoir pouvoir sélectionner un prénom et qu'il me donne le résultat suivant (capture 2 : Nom : Capture 2.JPG
Affichages : 770
Taille : 42,6 Ko )

    j'ai essayé par le biais de formule genre Recherchev mais j'y n'arrive pas de cette manière.

    Avez vous une idée de la façon dont je pourrais aborder ce problème?

    Merci de votre aide.

    Cordialement.

    Eric

  2. #2
    Expert éminent sénior

    Profil pro
    Conseil, Formation, Développement - Indépendant
    Inscrit en
    Février 2010
    Messages
    8 419
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Conseil, Formation, Développement - Indépendant

    Informations forums :
    Inscription : Février 2010
    Messages : 8 419
    Points : 16 262
    Points
    16 262
    Par défaut
    Bonjour

    Pour être facilement exploitable un tableau doit être sous forme de liste de données ou table : pas de cellules fusionnées et les données communes répétées sur chaque ligne (quitte à masquer la répétition par MFC)

    Là je doute qu'une formule puisse fonctionner : il faudrait qu'elle soit tellement longue qu'elle dépasserait la taille limite...

    Même par VBA cette disposition va compliquer le traitement
    • parcourir les colonnes de D à... pour chercher le prénom
    • puis essayer de retrouver le département qui peut être ou pas dans une plage fusionnée
    • puis essayer retrouver le thème quel part au-dessus...
    • enfin récupérer simplement le sujet et le titre de la colonne
    Chris
    PowerQuery existe depuis plus de 13 ans, est totalement intégré à Excel 2016 &+. Utilisez-le !

    Quand un homme a faim, mieux vaut lui apprendre à pêcher que de lui donner un poisson.
    Confucius

    ----------------------------------------------------------------------------------------------
    En cas de résolution, n'hésitez pas cliquer sur c'est toujours apprécié...

  3. #3
    Expert éminent sénior Avatar de Menhir
    Homme Profil pro
    Ingénieur
    Inscrit en
    Juin 2007
    Messages
    16 037
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2007
    Messages : 16 037
    Points : 32 866
    Points
    32 866
    Par défaut
    Citation Envoyé par Jeric1970 Voir le message
    dans les colonnes D et suivantes, je vais indiquer des prénoms :

    Dans l'onglet 2, je souhaite avoir pouvoir sélectionner un prénom et qu'il me donne le résultat suivant (capture 2 :
    Si je comprends bien, tu veux pouvoir trouver une ligne correspondant à une donnée et afficher les données d'une autre colonne pour cette ligne et les suivantes.

    C'est possible à faire sans VBA. Le plus compliqué, ce n'est pas de savoir où commencer mais de savoir où s'arrêter.

    Il est possible d'obtenir la ligne où se trouve le prénom avec la fonction EQUIV().
    Ensuite, tu peux obtenir le renseignement souhaité en utilisant le résultat de EQUIV() dans une fonction INDEX(). Au résultat de EQUIV(), il faut ajouter 1 de plus pour chaque ligne de successive du tableau de l'onglet 2. Tu peux même utiliser la fonction LIGNE() pour faire cet incrément et avoir la même formule sur toutes les lignes.

    Le problème, comme je le disais, c'est de savoir où s'arrêter.
    Il faudrait certainement mettre tout ça dans un SI() dont la condition dépend du contenu du tableau 1. Mais comme la copie d'écran que tu montres ne présente pas de données, difficile d'imaginer quelle peut être la condition de ce SI().
    Merci de cliquer sur pour chaque message ayant aidé puis sur pour clore cette discussion.

  4. #4
    Membre du Club Avatar de zipbox
    Homme Profil pro
    Excel VBA
    Inscrit en
    Juillet 2004
    Messages
    49
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Excel VBA

    Informations forums :
    Inscription : Juillet 2004
    Messages : 49
    Points : 61
    Points
    61
    Par défaut
    Bonjour,

    Pour rechercher dans une plage, une cellule avec une donnée texte (le prénom)
    avec les 3 infos, thématique en colonne 2, sujet en colonne 3 et Routine Auto en ligne 2

    voici un bout de code, à adapter pour ton tableau :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
     
    Option Explicit
     
    Sub RecherchePrenom()
      '
      Dim Prenom As String, n As Integer
      '
      Dim L As Integer ' --- ligne ---
      Dim C As Integer ' --- colonne ---
      '
      Const f1 As String = "Feuil1"
      Const f2 As String = "Feuil2"
      '
      Prenom = InputBox("Prénom ?")
      '
      n = 0
      '
      For L = 3 To 100  ' ligne 3 à 100
        For C = 4 To 17 ' D à Q
          '
          If (Sheets(f1).Cells(L, C).Value = Prenom) Then
            '
            n = n + 1
            '
            Sheets(f2).Cells(n, 1).Value = n
            Sheets(f2).Cells(n, 2).Value = Prenom
            Sheets(f2).Cells(n, 3).Value = Sheets(f1).Cells(2, C).Value ' Autorisation : ligne 2
            Sheets(f2).Cells(n, 4).Value = Sheets(f1).Cells(L, 2).Value ' Thématique   : colonne 2
            Sheets(f2).Cells(n, 5).Value = Sheets(f1).Cells(L, 3).Value ' Sujet        : colonne 3
            '
          End If
          '
        Next C
      Next L
      '
      MsgBox Prenom & " : " & n
      '
    End Sub
    =)

  5. #5
    Nouveau Candidat au Club
    Homme Profil pro
    Directeur de projet
    Inscrit en
    Février 2018
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Directeur de projet
    Secteur : Distribution

    Informations forums :
    Inscription : Février 2018
    Messages : 4
    Points : 1
    Points
    1
    Par défaut
    Bonjour Chris, Menhir et Zipbox,

    Avant merci de vos conseils avisés.

    Chris, Effectivement, je me doutais que la structure avec des cellules fusionnées, allait complexifier la solution. Je vais y remédier.

    Menhir, j'avais effectivement trouver Equiv() et Index() sur un forum comme une solution probable, je ne les maîtrise pas vraiment je vais donc aussi creuser en ce sens.

    Zipbox, Merci pour ce code. Je vais aussi le tester.

    Merci encore à vous tous pour votre bonne volonté !

    Je vous tiens donc au courant de l'avancée de ce projet.



    Eric

  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 921
    Points
    55 921
    Billets dans le blog
    131
    Par défaut
    Salut.

    Une règle capitale d'Excel est bafouée ici: Ne jamais mélanger les données et leur analyse/présentation/exploitation.

    Si tu avais tes données dans une table de données, tu n'aurais aucun souci à réaliser ce que tu souhaites. Tu pourrais alors utiliser INDEX/EQUIV sans te préoccuper des limites et de la configuration "de présentation/saisie" de tes données.
    "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
    Nouveau Candidat au Club
    Homme Profil pro
    Directeur de projet
    Inscrit en
    Février 2018
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Directeur de projet
    Secteur : Distribution

    Informations forums :
    Inscription : Février 2018
    Messages : 4
    Points : 1
    Points
    1
    Par défaut
    Bonjour Pierre,

    Oui tu as surement raison.
    Disons que le fichier de base était imposé, j'ai dû composer avec..
    Mais tu as raison, en séparant les données cela aurait été plus simple.

    Merci encore de ton aide.

    Eric

  8. #8
    Nouveau Candidat au Club
    Homme Profil pro
    Directeur de projet
    Inscrit en
    Février 2018
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Directeur de projet
    Secteur : Distribution

    Informations forums :
    Inscription : Février 2018
    Messages : 4
    Points : 1
    Points
    1
    Par défaut
    Citation Envoyé par zipbox Voir le message
    Bonjour,

    Pour rechercher dans une plage, une cellule avec une donnée texte (le prénom)
    avec les 3 infos, thématique en colonne 2, sujet en colonne 3 et Routine Auto en ligne 2

    voici un bout de code, à adapter pour ton tableau :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
     
    Option Explicit
     
    Sub RecherchePrenom()
      '
      Dim Prenom As String, n As Integer
      '
      Dim L As Integer ' --- ligne ---
      Dim C As Integer ' --- colonne ---
      '
      Const f1 As String = "Feuil1"
      Const f2 As String = "Feuil2"
      '
      Prenom = InputBox("Prénom ?")
      '
      n = 0
      '
      For L = 3 To 100  ' ligne 3 à 100
        For C = 4 To 17 ' D à Q
          '
          If (Sheets(f1).Cells(L, C).Value = Prenom) Then
            '
            n = n + 1
            '
            Sheets(f2).Cells(n, 1).Value = n
            Sheets(f2).Cells(n, 2).Value = Prenom
            Sheets(f2).Cells(n, 3).Value = Sheets(f1).Cells(2, C).Value ' Autorisation : ligne 2
            Sheets(f2).Cells(n, 4).Value = Sheets(f1).Cells(L, 2).Value ' Thématique   : colonne 2
            Sheets(f2).Cells(n, 5).Value = Sheets(f1).Cells(L, 3).Value ' Sujet        : colonne 3
            '
          End If
          '
        Next C
      Next L
      '
      MsgBox Prenom & " : " & n
      '
    End Sub
    =)
    Salut Zipbox,

    juste un retour.
    Ton code fonctionne parfaitement.
    Mon problème est résolu.
    Merci beaucoup de ton aide

    Eric

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

Discussions similaires

  1. [XL-2003] Créer des tableaux par extraction de données sur un tableau principal
    Par mandrake57 dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 29/09/2011, 14h17
  2. Réponses: 1
    Dernier message: 10/05/2011, 20h34
  3. Extraction de données d'un tableau
    Par wiewie dans le forum LabVIEW
    Réponses: 1
    Dernier message: 12/06/2008, 18h43
  4. [MySQL] Problème d'extraction de données d'un tableau
    Par cyberdevelopment dans le forum PHP & Base de données
    Réponses: 4
    Dernier message: 12/04/2007, 13h11
  5. extraction de donnée vers un tableau
    Par childof dans le forum Collection et Stream
    Réponses: 1
    Dernier message: 29/03/2007, 14h46

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