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

  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

  7. #7
    Membre à l'essai
    Inscrit en
    Avril 2008
    Messages
    5
    Détails du profil
    Informations forums :
    Inscription : Avril 2008
    Messages : 5
    Par défaut
    Merci infiniment lucas c'est très gentil de ta part

  8. #8
    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
    passe la en résolu si c'est bon
    a+

  9. #9
    Membre à l'essai
    Inscrit en
    Avril 2008
    Messages
    5
    Détails du profil
    Informations forums :
    Inscription : Avril 2008
    Messages : 5
    Par défaut
    ca marche à merveille

  10. #10
    Membre Expert
    Homme Profil pro
    PAO
    Inscrit en
    Octobre 2014
    Messages
    2 576
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : PAO
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Octobre 2014
    Messages : 2 576
    Par défaut
    Bonjour,

    Dans la feuille 1 les n° de compresseurs seront-ils toujours dans le même ordre ?
    Pour aller dans la feuille 2 ?

    Edit : à mon avis pas besoin de boucle et d'une 5è colonne
    - une dernière ligne
    - une variable tableau
    - un copier avec resize et un transpose
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    Sub compresseurs()
    Dim DL_comp&, VA_Comp
       DL_comp = Sheets(1).Cells(Rows.Count, 3).End(xlUp).Row
       VA_Comp = Sheets(1).Range("C2:C" & DL_comp).Value
       Sheets(2).Cells(1, 2).Resize(1, UBound(VA_Comp)).Value = Application.Transpose(VA_Comp)
    End Sub
    Cordialement
    Ryu

    La connaissance s’acquiert par l’expérience, tout le reste n’est que de l’information. – Albert Einstein

    Pensez à la Balise [ CODE][/CODE ] - à utiliser via le bouton # => Exemple

    Une fois votre problème solutionné pensez à mettre :resolu: en n'oubliant pas d'indiquer qu'elle est la solution finale choisie ;)

+ 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