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 :

Transposition de colonne vers ligne sans doublons [XL-2007]


Sujet :

Macros et VBA Excel

  1. #1
    Membre habitué Avatar de richard_sraing
    Homme Profil pro
    Responsable de service informatique
    Inscrit en
    Avril 2005
    Messages
    483
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Responsable de service informatique
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Avril 2005
    Messages : 483
    Points : 182
    Points
    182
    Par défaut Transposition de colonne vers ligne sans doublons
    Bonjour à tous,

    Alors voilà, je dispose d'un classeur excel, composé de plusieurs feuilles.
    L'une de ces feuilles, nommée "config", contient certains paramètres de l'application.
    L'un de ces paramètres est une tranche horaire et de son coefficient correspondant.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    tranche	coefficient
    22h-6h	1,5
    6h-8h	1,25
    8h-17h	1
    17h-22h	1,25
    samedi	1,5
    dimanche	2
    jour férié	2
    Je souhaiterai à présent, réaliser une copie des coefficient dans d'autres feuilles, mais en les transposant, et sans obtenir les doublons pour les coefficients.
    Quelqu'un pourrait-il me donner une marche à suivre ?
    Voici ce que j'ai essayé:
    Code VBA : Sélectionner tout - Visualiser dans une fenêtre à part
    Sheets("config").Range("B2:B8").AdvancedFilter Action:=xlFilterCopy, CopyToRange:=Sheets(i).Range("A4"), Unique:=True

    Mais aussi étrange que cela puisse paraître, voici le résultat :
    N'y a-t-il pas erreur, et quand même un doublons qui traîne ? La transposition n'est pas faite, on est bien d'accord, et je ne sais pas comment faire pour la réaliser en même temps que la sélection des éléments en retirant les doublons.

    Etant un noob en programmation VBA, je ne sais donc pas ce qu'il est possible de faire.

    En vous remerciant pour l'aide que vous pourrez m'apporter, je vous souhaite à tous, de passer une bonne journée.

    Raph.
    First step: F.A.Q.
    Second step: Forum -> Recherche
    Thrid step: Forum -> Poser une question
    Fourth step: Forum -> Attendre une réponse
    Fifth step: Forum -> Remercier les personnes ayant répondu et signaler comme résolu

    Simple non ? l'utilisation de developpez.com

  2. #2
    Membre expert
    Homme Profil pro
    Retraité
    Inscrit en
    Avril 2011
    Messages
    1 858
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Avril 2011
    Messages : 1 858
    Points : 3 974
    Points
    3 974
    Par défaut
    Bonjour,

    Dans ton filtre élaboré, la première cellule de la plage traitée est un en-tête.
    Ta plage étant B2:B8, la cellule B2 (1,5) n’est donc pas considérée comme une donnée à traiter mais comme un en-tête.

    Une solution sans filtre avancé
    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
    Option Explicit
    Sub Test()
    Dim Dico, d
    Dim i As Long
    Dim c As Range
        With Worksheets("config")
            i = 1
            Set Dico = CreateObject("Scripting.dictionary")
            For Each c In Sheets("config").Range("B2:B" & .Range("B" & .Rows.Count).End(xlUp).Row)
                If Not Dico.Exists(c.Value) Then Dico.Add c.Value, c.Offset(0, -1).Value
            Next c
            For Each d In Dico.keys
                Sheets(2).Cells(4, i) = d
                i = i + 1
            Next d
            Set Dico = Nothing
        End With
    End Sub
    Cordialement.

  3. #3
    Membre habitué Avatar de richard_sraing
    Homme Profil pro
    Responsable de service informatique
    Inscrit en
    Avril 2005
    Messages
    483
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Responsable de service informatique
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Avril 2005
    Messages : 483
    Points : 182
    Points
    182
    Par défaut
    Superbe, ça fonctionne, mais je n'ai pas la moindre idée de pourquoi.

    Je ne comprend strictement rien au code fourni, ce qui m'embête...

    Bref, je vais tâcher de comprendre l'extrait, et ensuite poursuivre le développement.
    First step: F.A.Q.
    Second step: Forum -> Recherche
    Thrid step: Forum -> Poser une question
    Fourth step: Forum -> Attendre une réponse
    Fifth step: Forum -> Remercier les personnes ayant répondu et signaler comme résolu

    Simple non ? l'utilisation de developpez.com

  4. #4
    Membre expert
    Homme Profil pro
    Retraité
    Inscrit en
    Avril 2011
    Messages
    1 858
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Avril 2011
    Messages : 1 858
    Points : 3 974
    Points
    3 974
    Par défaut
    La seule particularité de ce code réside dans l’utilisation d’un dictionnaire pour obtenir un une liste d'éléments uniques.
    N’hésite pas à poser des questions si besoin.

    Cordialement.

  5. #5
    Membre habitué Avatar de richard_sraing
    Homme Profil pro
    Responsable de service informatique
    Inscrit en
    Avril 2005
    Messages
    483
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Responsable de service informatique
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Avril 2005
    Messages : 483
    Points : 182
    Points
    182
    Par défaut
    Bon, et bien par exemple, cette instruction ci :
    Code VBA : Sélectionner tout - Visualiser dans une fenêtre à part
    .Range("B" & .Rows.Count).End(xlUp).Row
    c'est du chinois pour moi.
    First step: F.A.Q.
    Second step: Forum -> Recherche
    Thrid step: Forum -> Poser une question
    Fourth step: Forum -> Attendre une réponse
    Fifth step: Forum -> Remercier les personnes ayant répondu et signaler comme résolu

    Simple non ? l'utilisation de developpez.com

  6. #6
    Membre expert
    Homme Profil pro
    Retraité
    Inscrit en
    Avril 2011
    Messages
    1 858
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Avril 2011
    Messages : 1 858
    Points : 3 974
    Points
    3 974
    Par défaut
    Rows.count correspond au numéro de la dernière ligne de la feuille.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    .Range("B" & .Rows.Count).End(xlUp)
    Equivaut à se positionner sur la dernière ligne de la colonne B puis de faire CTRL + FLECHE HAUT.
    Tu obtiens ainsi la dernière cellule renseignée de la colonne.
    Et enfin, avec
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    .Range("B" & .Rows.Count).End(xlUp).row
    Tu obtiens le numéro de ligne de la dernière cellule renseignée de la colonne.

    Cordialement.

  7. #7
    Membre habitué Avatar de richard_sraing
    Homme Profil pro
    Responsable de service informatique
    Inscrit en
    Avril 2005
    Messages
    483
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Responsable de service informatique
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Avril 2005
    Messages : 483
    Points : 182
    Points
    182
    Par défaut
    waou,

    moi qui m'amuse à faire des boucle et à vérifier que le contenu de la cellule est "NOT Empty", ça va changer...

    Merci pour l'information, cela permettra peut-être d'optimiser quelque peu le code en place jusqu'à présent.
    First step: F.A.Q.
    Second step: Forum -> Recherche
    Thrid step: Forum -> Poser une question
    Fourth step: Forum -> Attendre une réponse
    Fifth step: Forum -> Remercier les personnes ayant répondu et signaler comme résolu

    Simple non ? l'utilisation de developpez.com

  8. #8
    Membre expert
    Homme Profil pro
    Retraité
    Inscrit en
    Avril 2011
    Messages
    1 858
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Avril 2011
    Messages : 1 858
    Points : 3 974
    Points
    3 974
    Par défaut
    Si le sujet t'intéresse, le post de ouskel’n’or va t’exploser les neurones .
    derniere ligne et derniere colonne renseignees

    Cordialement.

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

Discussions similaires

  1. Aide sur requete colonnes vers ligne
    Par jcpreaux76 dans le forum Requêtes
    Réponses: 3
    Dernier message: 26/04/2012, 09h06
  2. [XL-2007] Filter et compter les lignes (sans doublon)
    Par harkoko dans le forum Macros et VBA Excel
    Réponses: 8
    Dernier message: 08/08/2011, 11h20
  3. Transposition colonne vers lignes
    Par Vince7-7 dans le forum PL/SQL
    Réponses: 2
    Dernier message: 17/12/2008, 16h16
  4. filtre colonnes non contigues, sans doublons
    Par JYL74 dans le forum Excel
    Réponses: 5
    Dernier message: 14/11/2008, 10h57
  5. Comment mettre à jour une ligne sans doublon via déclencheur
    Par fuelcontact dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 02/08/2004, 15h56

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