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 :

Croiser lignes et colonnes SANS TCD


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Inscrit en
    Mai 2008
    Messages
    36
    Détails du profil
    Informations personnelles :
    Âge : 41

    Informations forums :
    Inscription : Mai 2008
    Messages : 36
    Par défaut Croiser lignes et colonnes SANS TCD
    Hello à tous,

    Je suis face à une colle ; je dispose sur une feuille Excel des correspondances entre deux colonnes (A et B).

    Je souhaiterais traiter en VBA cette correspondance de manière à afficher sur une nouvelle feuille la colonne A en colonne, et la colonne B transposée en-têtes mais en ligne. Les correspondances entre ces colonnes apparaitraient sous forme de "x" au croisement de chacune d'elles. En somme ce schéma :

    Feuille 1 :
    Col A et Col B
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    X  1
    Y  2
    Z  3
    X  3
    Feuille 2 :
    ==>
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
       1 2 3 
    X  x
    Y    x
    Z       x  
    X       x
    Niveau transposition, c'est tout bon, j'ai la mise en forme attendue avec des range. Ce que j'essaie de trouver, c'est le type de boucle nécessaire qui parcourrait les lignes de feuille 2 pour aller chercher les références entre lignes / colonnes présentes dans la feuille 1

    Je sais qu'un TCD permet justement ce type de mécanisme, malheureusement une des contraintes est justement de s'en passer...

    Merci à tous pour votre aide et bonne fin d'année !

    Jaymerry

  2. #2
    Membre Expert
    Avatar de cb_60
    Homme Profil pro
    Chargé de mission technique
    Inscrit en
    Juillet 2007
    Messages
    1 253
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 65
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Chargé de mission technique
    Secteur : Industrie

    Informations forums :
    Inscription : Juillet 2007
    Messages : 1 253
    Billets dans le blog
    14
    Par défaut
    Bonjour
    En attendant que l'on te le propose en VBA

    Deux zones nommées
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    colA =DECALER(Feuil1!$A$2;;;NBVAL(Feuil1!$A:$A)-1)
    colB =DECALER(colA;;1)
    en colonne A de la feuille 2 la formule à mettre en A2 et tirer vers le bas
    MATRICIEL
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    =SI(ESTNA(INDEX(colA;EQUIV(0;NB.SI($A$1:A1;colA);0)));"";INDEX(colA;EQUIV(0;NB.SI($A$1:A1;colA);0)))
    en ligne B1 de la feuille 2 la formule à tirer sur la droite
    MATRICIEL
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    =SI(ESTNA(INDEX(colB;EQUIV(0;NB.SI($A$1:A1;colB);0)));"";INDEX(colB;EQUIV(0;NB.SI($A$1:A1;colB);0)))
    et dans le tableau en B2, à tirer sur le droite et le bas
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    =SI(SOMMEPROD((colA=$A2)*(colB=B$1))<>0;"X";"")
    L'imagination est plus importante que le savoir.... A . Einstein. :pastaper:
    https://www.developpez.net/forums/blogs/179588-cb_60/
    Merci de cliquer sur :resolu:pour clore cette discussion.

  3. #3
    Membre averti
    Inscrit en
    Mai 2008
    Messages
    36
    Détails du profil
    Informations personnelles :
    Âge : 41

    Informations forums :
    Inscription : Mai 2008
    Messages : 36
    Par défaut
    Bonjour et merci beaucoup pour cette piste (et bonne année à tous !)

    Je vais regarder ça de plis près cette piste. Le plus compliqué coté va être de créer une boucle optimisée niveau perf....

    Merci à tous pour votr aide

  4. #4
    Rédacteur
    Avatar de Philippe Tulliez
    Homme Profil pro
    Formateur, développeur et consultant Excel, Access, Word et VBA
    Inscrit en
    Janvier 2010
    Messages
    13 170
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur, développeur et consultant Excel, Access, Word et VBA

    Informations forums :
    Inscription : Janvier 2010
    Messages : 13 170
    Billets dans le blog
    53
    Par défaut
    Bonjour,
    Voici une solution en VBA
    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
    Sub Transpose()
     Dim CellFrom As Range, CellTo As Range
     Dim r As Single, FindPosition As Single, cCel As Single
     Dim FindTable As Range
     cCel = 1 ' Compteur
     With ThisWorkbook
      Set CellFrom = .Worksheets("Feuil1").Range("A2")
      Set CellTo = .Worksheets("Feuil2").Range("B2")
     End With
     For r = 0 To CellFrom.End(xlDown).Row - 2
      With CellTo
      .Offset(r + 1, 0) = CellFrom.Offset(r, 0)
       Set FindTable = Range(Cells(.Row, .Column + 1), Cells(.Row, .Column + 1 + cCel))
       On Error GoTo ErrorHandler
       FindPosition = Application.WorksheetFunction.Match(CellFrom.Offset(r, 1), FindTable, False)
       If FindPosition = 0 Then FindPosition = cCel: cCel = cCel + 1
       On Error GoTo 0
       .Offset(.Row - 2, FindPosition) = CellFrom.Offset(r, 1)
      .Offset(r + 1, FindPosition) = "x"
      End With
     Next
     Exit Sub
    ErrorHandler:
     If Err.Number = 1004 Then FindPosition = 0: Resume Next Else MsgBox "Problème"
    End Sub
    Philippe Tulliez
    Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément. (Nicolas Boileau)
    Lorsque vous avez la réponse à votre question, n'oubliez pas de cliquer sur et si celle-ci est pertinente pensez à voter
    Mes tutoriels : Utilisation de l'assistant « Insertion de fonction », Les filtres avancés ou élaborés dans Excel
    Mon dernier billet : Utilisation de la fonction Dir en VBA pour vérifier l'existence d'un fichier

  5. #5
    Membre averti
    Inscrit en
    Mai 2008
    Messages
    36
    Détails du profil
    Informations personnelles :
    Âge : 41

    Informations forums :
    Inscription : Mai 2008
    Messages : 36
    Par défaut
    Bonsoir,

    Merci beaucoup pour cet exemple de code.
    Cependant, je dispose déjà des "en-têtes" (en colonnes et en lignes) sur la feuille 2. Je cherche désormais à alimenter ce tableau sans modifier l'ordre de ces en-têtes, en cochant les cellules correspondant au croisement de ces en-têtes (correspondances présentes dans la feuille 1).

    Disposant d'un certain nombre de lignes (6000), la difficulté est pour moi de trouver code optimisé et cohérent (via ADO ??).

    Merci à tous pour votre aide,

    Jaymerry

  6. #6
    Rédacteur
    Avatar de Philippe Tulliez
    Homme Profil pro
    Formateur, développeur et consultant Excel, Access, Word et VBA
    Inscrit en
    Janvier 2010
    Messages
    13 170
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur, développeur et consultant Excel, Access, Word et VBA

    Informations forums :
    Inscription : Janvier 2010
    Messages : 13 170
    Billets dans le blog
    53
    Par défaut
    Bonjour,
    Je n'ai pas le temps de revoir mon code ce matin, mais il me semble qu'il doit fonctionner même si les en-têtes existent déjà. Dans le cas contraire la modification doit être mineure.
    Si personne n'a répondu d'ici ce soir, je renverrai un message après vérification.
    Philippe Tulliez
    Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément. (Nicolas Boileau)
    Lorsque vous avez la réponse à votre question, n'oubliez pas de cliquer sur et si celle-ci est pertinente pensez à voter
    Mes tutoriels : Utilisation de l'assistant « Insertion de fonction », Les filtres avancés ou élaborés dans Excel
    Mon dernier billet : Utilisation de la fonction Dir en VBA pour vérifier l'existence d'un fichier

  7. #7
    Rédacteur
    Avatar de Philippe Tulliez
    Homme Profil pro
    Formateur, développeur et consultant Excel, Access, Word et VBA
    Inscrit en
    Janvier 2010
    Messages
    13 170
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur, développeur et consultant Excel, Access, Word et VBA

    Informations forums :
    Inscription : Janvier 2010
    Messages : 13 170
    Billets dans le blog
    53
    Par défaut
    Bonsoir,
    A la relecture de ton 'post', je crois que je ne comprends plus très bien ta demande.
    Citation Envoyé par Jaymerry Voir le message
    Cependant, je dispose déjà des "en-têtes" (en colonnes et en lignes) sur la feuille 2. Je cherche désormais à alimenter ce tableau sans modifier l'ordre de ces en-têtes, en cochant les cellules correspondant au croisement de ces en-têtes (correspondances présentes dans la feuille 1).
    Si comme tu le dis, tu as déjà les lignes et colonnes en place sur la feuille 2, Tu n'as sans doute absolument pas besoins de VBA.
    La fonction SOMMEPROD doit vraisemblablement répondre à tes besoins.
    Pour ma part, une nouvelle explication ne serait pas superflue
    Philippe Tulliez
    Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément. (Nicolas Boileau)
    Lorsque vous avez la réponse à votre question, n'oubliez pas de cliquer sur et si celle-ci est pertinente pensez à voter
    Mes tutoriels : Utilisation de l'assistant « Insertion de fonction », Les filtres avancés ou élaborés dans Excel
    Mon dernier billet : Utilisation de la fonction Dir en VBA pour vérifier l'existence d'un fichier

Discussions similaires

  1. [XL-2003] Ajustement auto largeur de colonne sans renvoi à la ligne
    Par hallscar dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 12/10/2011, 23h23
  2. Réponses: 17
    Dernier message: 23/06/2011, 01h40
  3. [XL-2003] Appliquer une formule à toutes les lignes d'une colonne sans en connaitre le nombre à l'avance
    Par Chevrefeuille dans le forum Macros et VBA Excel
    Réponses: 12
    Dernier message: 08/04/2010, 14h43
  4. Réponses: 17
    Dernier message: 09/02/2010, 16h22
  5. affichage ligne colonne sans valeur bo 6.5
    Par gwena2b dans le forum Débuter
    Réponses: 4
    Dernier message: 14/12/2009, 13h08

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