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 :

Transposer des cellules sous condition [Toutes versions]


Sujet :

Macros et VBA Excel

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Septembre 2010
    Messages
    120
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2010
    Messages : 120
    Points : 63
    Points
    63
    Par défaut Transposer des cellules sous condition
    Bonjour,

    j'ai 2 colonnes avec x lignes, dans COL1 j'ai des matricules classés dans l'ordre, dans COL2 en face du matricule une lettre. Je souhaiterais que lorsque le matricule est égale au matricule suivant que les lettres correspondantes qui sont donc l'une en dessous de l'autre dans la COL2, soient transposées chacune dans les colonnes à côté mais en ligne.

    exemple:
    COL 1 COL2
    12 a
    13 d
    13 s
    15 z
    15 k
    15 z
    16 p

    après transposition

    COL1 COL2 COL3 COL4

    12 a
    13 d s
    13 s
    15 z k u
    15 k
    15 u
    16 p

    l'ordre dans les colonnes 3 à 4 n'a pas d'importance

    le test ci dessous n'est pas concluant
    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
    Sub Transposer()
     
    Dim x As Integer
     
    For x = 1 To 100
    If Cells(x, 1) = Cells(x + 1, 1) Then
    Range(Cells(x, 2), Cells(x + 1, 2)).Copy
    Cells(x, 3).Select
    Selection.PasteSpecial Paste:=xlPasteAll, Operation:=xlNone, SkipBlanks:= _
    False, Transpose:=True
    End If
     
    Next x
     
    End Sub
    Merci d'avance

  2. #2
    Membre éclairé
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    592
    Détails du profil
    Informations personnelles :
    Âge : 74
    Localisation : France

    Informations forums :
    Inscription : Avril 2008
    Messages : 592
    Points : 730
    Points
    730
    Par défaut
    bonsoir,

    ceci devrait être très proche de ton besoin:
    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
    Sub xx()
        i_Lg = 1
        Pr_l = 1
        Do
            i_Lg = i_Lg + 1
            If Cells(Pr_l, 1) = Cells(i_Lg, 1) Then
            ' C'est égal, on continue
            Else
            ' C'est différent
                If Pr_l + 1 <> i_Lg Then
                    Call Recopie(Pr_l, i_Lg - 1)
                    If Cells(i_Lg, 1) = "" Then Exit Do
                End If
                Pr_l = i_Lg
            End If
        Loop
    End Sub
    avec
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    Sub Recopie(Pr_l, Dr_l)
    '   Recopie des valeurs
            Col_recopie = 2
        For l = Pr_l + 1 To Dr_l
            Col_recopie = Col_recopie + 1
            Cells(Pr_l, Col_recopie) = Cells(l, 2)
        Next
    End Sub
    PPz

  3. #3
    Membre du Club
    Profil pro
    Inscrit en
    Septembre 2010
    Messages
    120
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2010
    Messages : 120
    Points : 63
    Points
    63
    Par défaut
    Bonjour PPz78

    Merci d'avoir étudié mon problème, je commençais à désespérer, la transposition s'opère impeccable mais à la fin j'ai le message
    erreur d'exécution 1004
    avec un débogage sur la ligne
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    If Cells(Pr_l, 1) = Cells(i_Lg, 1) Then
    peux tu voir merci d'avance

  4. #4
    Expert éminent sénior Avatar de mercatog
    Homme Profil pro
    Inscrit en
    Juillet 2008
    Messages
    9 435
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Autre

    Informations forums :
    Inscription : Juillet 2008
    Messages : 9 435
    Points : 31 877
    Points
    31 877
    Par défaut
    Une autre proposition
    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
    Dim LastLig As Long, i As Long
    Dim k As Integer
     
    With Sheets("Feuil2")   'Adapte au nom de la feuille
        LastLig = .Cells(Rows.Count, 1).End(xlUp).Row
        For i = LastLig To 3 Step -1
            If .Range("A" & i - 1) = .Range("A" & i) Then
                k = k + 1
                .Range(.Cells(i, 2), .Cells(i, 1 + k)).Copy .Cells(i - 1, 3)
                If k > 1 Then .Range(.Cells(i, 3), .Cells(i, 1 + k)).ClearContents
            Else
                k = 0
            End If
        Next i
    End With

  5. #5
    Membre du Club
    Profil pro
    Inscrit en
    Septembre 2010
    Messages
    120
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2010
    Messages : 120
    Points : 63
    Points
    63
    Par défaut
    Bonjour,

    C'est parfait, merci pour cette intervention Mercatog.
    Sans oublier PPz78.
    Je vais essayer maintenant de supprimer les lignes qui ne me servent plus à rien, si j'ai un souci je ne manquerais pas de vous contacter

    Encore merci

  6. #6
    Expert éminent sénior Avatar de mercatog
    Homme Profil pro
    Inscrit en
    Juillet 2008
    Messages
    9 435
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Autre

    Informations forums :
    Inscription : Juillet 2008
    Messages : 9 435
    Points : 31 877
    Points
    31 877
    Par défaut
    Ce n'était pas dans la question initiale; sinon
    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
    Dim LastLig As Long, i As Long
    Dim k As Integer
     
    With Sheets("Feuil2")   'Adapte au nom de la feuille
        LastLig = .Cells(Rows.Count, 1).End(xlUp).Row
        For i = LastLig To 3 Step -1
            If .Range("A" & i - 1) = .Range("A" & i) Then
                k = k + 1
                .Range(.Cells(i, 2), .Cells(i, 1 + k)).Copy .Range("C" & i - 1)
                .Rows(i).Delete
            Else
                k = 0
            End If
        Next i
    End With

  7. #7
    Membre éclairé
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    592
    Détails du profil
    Informations personnelles :
    Âge : 74
    Localisation : France

    Informations forums :
    Inscription : Avril 2008
    Messages : 592
    Points : 730
    Points
    730
    Par défaut
    Salut
    J'avais mis le test d'arret au mauvais endroit.
    Celui-ci fonctionne mieux
    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
    Sub xx()
        i_Lg = 1
        Pr_l = 1
     
        Do
            i_Lg = i_Lg + 1
            If Cells(Pr_l, 1) = Cells(i_Lg, 1) Then
            ' C'est égal, on continue
            Else
            ' C'est différent
                If Pr_l + 1 <> i_Lg Then
                    Call Recopie(Pr_l, i_Lg - 1)
                End If
                Pr_l = i_Lg
                If Cells(i_Lg, 1) = "" Then Exit Do
            End If
     
        Loop
     
    End Sub
    A+

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

Discussions similaires

  1. [XL-2010] Concaténer des cellules sous condition
    Par alexisgaudet dans le forum Excel
    Réponses: 10
    Dernier message: 17/09/2014, 10h07
  2. [XL-2010] Effacer des cellules sous conditions + remonter des données
    Par Sebiwan67 dans le forum Macros et VBA Excel
    Réponses: 6
    Dernier message: 28/08/2014, 14h46
  3. Clignotement des cellules sous condition dates
    Par ksai001 dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 26/06/2011, 11h58
  4. [XL-2000] Saisie dans des cellules sous conditions
    Par cedana dans le forum Excel
    Réponses: 3
    Dernier message: 14/01/2010, 14h00
  5. colorer des cellules sous conditions
    Par coenonympha dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 11/07/2008, 13h54

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