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 :

macro pour transposer avec création ou déplacement de colonne


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre à l'essai
    Inscrit en
    Avril 2008
    Messages
    5
    Détails du profil
    Informations forums :
    Inscription : Avril 2008
    Messages : 5
    Par défaut macro pour transposer avec création ou déplacement de colonne
    Bonjour j'ai crée la macro ci dessous pour transposer des données en ligne vers une autre feuille en colonne. Quand le tableau est bouclé, si il trouve qu'une nouvelle valeur est ajouté, il crée une nouvelle colonne:

    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
    Sub transposer()
    x = 1
     For i = 1 To Sheets("Feuil1").Range("A200").End(xlUp).Row
     If Sheets("Feuil1").Cells(i, 3) <> Sheets("Feuil2").Cells(1, i) Then
        Sheets("Feuil2").Cells(1, i).EntireColumn.Insert
        Sheets("Feuil2").Cells(1, i) = Sheets("Feuil1").Cells(i, 3)
     
      '  MsgBox Sheets("Feuil2").Cells(1, i)
     x = x + 1
     End If
     Next
     
     For i = 1 To Sheets("Feuil1").Range("A200").End(xlUp).Row
    Sheets("Feuil2").Cells(1, i) = Sheets("Feuil1").Cells(i, 3)
      ' MsgBox Sheets("Feuil1").Cells(i, 3)
      Next
        Application.Goto Reference:="transposer"
    End Sub
    Mon problème est le suivant:

    Quand je rajoute une nouvelle ligne dans la feuille 1 , les lignes qui viennent après sont incrémentées, moi je veux que quand jje rajoute une ligne et j'incrémente le reste, la macro doit me créer une nouvelle colonne pour la nouvelle ligne et me mettre à jour le reste des colonnes sans créer de nouvelles.

    Merci infiniment pour votre support

  2. #2
    Membre expérimenté Avatar de lucasgaetan
    Homme Profil pro
    dessinateur BE
    Inscrit en
    Août 2011
    Messages
    175
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : dessinateur BE
    Secteur : Industrie

    Informations forums :
    Inscription : Août 2011
    Messages : 175
    Par défaut
    Bonjour,

    Ton code fait plusieurs choses --> 2 boucles = 2 actions
    1ere boucle:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
        For i = 1 To Sheets("Feuil1").Range("A200").End(xlUp).Row
            If Sheets("Feuil1").Cells(i, 3)<> Sheets("Feuil2").Cells(1, i) Then
                Sheets("Feuil2").Cells(1, i).EntireColumn.Insert
                Sheets("Feuil2").Cells(1, i) = Sheets("Feuil1").Cells(i, 3)
            End If
        Next
    le code dit: si la valeur de la ligne feuille 1 est différente de la colonne feuille 2 alors en feuille 2 j'insère une colonne et j'y copie la valeur de la ligne feuille 1
    ATTENTION, si C1 (Feuil1) est différent de A1(Feuil2) tu inséreras tous la colonne C de la Feuille 1 avant la cellule A1 Feuille 2

    2eme boucle:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
        For i = 1 To Sheets("Feuil1").Range("A200").End(xlUp).Row
            Sheets("Feuil2").Cells(1, i) = Sheets("Feuil1").Cells(i, 3)
        Next
    le code dit: je recopie la valeur de la ligne feuille 1 sur la colonne feuille 2 correspondante --> C1=A1 , C2=B1, C3=C1 .....
    De se faite tu écrases le travail fait par la 1ere boucle

    de plus quel est l'intérêt de:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    x = 1
    x = x + 1
    Application.Goto Reference:="transposer"
    Pour info, le débogage se fait à l'aide de la touche "F8" à partir de la fenêtre VBA

  3. #3
    Membre à l'essai
    Inscrit en
    Avril 2008
    Messages
    5
    Détails du profil
    Informations forums :
    Inscription : Avril 2008
    Messages : 5
    Par défaut
    Bonjour,

    Effectivement la deuxième boucle écrase la première mais je ne trouve pas un moyen pour ajouter une colonne quand une nouvelle ligne est ajoutée dans la première fueille en mettant à jour le reste des colonnes suite à l'incrémentation des lignes de la feuille 2

    Pour:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Application.Goto Reference:="transposer"
    Ca a été généré automatiquement en créant la macro.

    Je suis vraiment bloquée et le temps presse

    Merci bcp

  4. #4
    Membre expérimenté Avatar de lucasgaetan
    Homme Profil pro
    dessinateur BE
    Inscrit en
    Août 2011
    Messages
    175
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : dessinateur BE
    Secteur : Industrie

    Informations forums :
    Inscription : Août 2011
    Messages : 175
    Par défaut
    Il faudrait que tu expliques plus clairement ton problème.

    Veux tu copier tout une ligne, juste une cellule, une ligne de la colonne A à la colonne G par exemple ?
    Ton tableau de la feuille 1, est-il trié par ordre croissant ou pas ?

    tu peux joindre un fichier Excel (sans macro) pour mieux comprendre.

    Sinon, pourquoi ne fait tu pas un copier/coller transposé ?:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
        Sheets("Feuil1").Select
        Range("A1:G2").Select
        Selection.Copy
        Sheets("Feuil2").Select
        Range("A1").Select
        Selection.PasteSpecial Paste:=xlPasteAll, Operation:=xlNone, SkipBlanks:=False, Transpose:=True

  5. #5
    Membre à l'essai
    Inscrit en
    Avril 2008
    Messages
    5
    Détails du profil
    Informations forums :
    Inscription : Avril 2008
    Messages : 5
    Par défaut
    Mon cas est le suivant :

    Je veux copier la colonne C qui est 'N° Comp' de la feuille 1 dans la feuille 2 précisément la ligne '1'

    Mon besoin est le suivant:

    Quand j'ajoute un nouveau 'N° comp' au début, au milieu ou à la fin du tableau, et donc le reste des N° Comp est incrémené,
    Dans la feuille 2, Créer une nouvelle colonne pour le nouveau N°Comp ajouté, et mettre à jour le reste des N° Comp qui ont été incrémenté sans créer de nouvelles colonnes.


    Merci infiniment pour tes réponses



    test.xlsm

  6. #6
    Membre expérimenté Avatar de lucasgaetan
    Homme Profil pro
    dessinateur BE
    Inscrit en
    Août 2011
    Messages
    175
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : dessinateur BE
    Secteur : Industrie

    Informations forums :
    Inscription : Août 2011
    Messages : 175
    Par défaut
    RE,

    Ton problème est qu'on ne peut pas savoir si c'est une nouvelle valeur ou pas.
    Pour remédier à cela il te faut une comparaison, je te propose de créer sur la feuille 1 en colonne E (que tu peux masquer) le n° de compresseur ancienne version.
    Pour se faire dans un premier temps un copier/coller manuel de la colonne C en colonne E (le code le gérera par la suite)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    Sub transposer()
    Dim Derniere_Lgn_Cl_C As Long
        Derniere_Lgn_Cl_C = Sheets("Feuil1").Range("C1048576").End(xlUp).Row
        For i = 2 To Derniere_Lgn_Cl_C 'pour chaque ligne
            If Sheets("Feuil1").Cells(i, 5) = "" Then 'si le compresseur n'a pas d'ancienne version cad new
                Sheets("Feuil2").Cells(1, i).EntireColumn.Insert 'on insert une ligne en feuille 2
            End If
            Sheets("Feuil2").Cells(1, i) = Sheets("Feuil1").Cells(i, 3) ' N° compresseur feuille 2 = N° compresseur feuille 1
            Sheets("Feuil1").Cells(i, 5) = Sheets("Feuil1").Cells(i, 3) ' N° compresseur ancienne version = N° compresseur nouvelle version
        Next
    End Sub
    Dis moi

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

Discussions similaires

  1. Réponses: 11
    Dernier message: 06/10/2016, 11h13
  2. [XL-2010] Macro pour ouverture fichier + création graphique
    Par Viking38 dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 18/09/2013, 16h27
  3. macro pour enregistrement avec date et numero incrementable
    Par pilcar dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 16/12/2012, 20h15
  4. [XL-2003] Macro pour TCD avec base evolutive
    Par jeandani2012 dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 24/07/2012, 11h23
  5. [XL-2007] Macro pour transposer les colonnes en lignes
    Par boubadia dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 19/10/2011, 20h51

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