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 :

Ajouter plusieurs colonnes à la suite d'une colonne [XL-2019]


Sujet :

Macros et VBA Excel

  1. #1
    Membre régulier
    Homme Profil pro
    Superviseur en transport
    Inscrit en
    Août 2019
    Messages
    102
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : Superviseur en transport
    Secteur : Transports

    Informations forums :
    Inscription : Août 2019
    Messages : 102
    Points : 70
    Points
    70
    Par défaut Ajouter plusieurs colonnes à la suite d'une colonne
    Bonjour à tous,

    Me voici pris dans une situation problématique. Je dois à l'aide d'une macro construire une seule colonne à l'aide de plusieurs colonnes. Donc toutes mes colonnes peuvent avoir des valeurs dans un nombre imprévisible de ligne qui se suivent, pour un maximum de 2 lignes. en "A" ma colonne que je veux avoir toutes mes valeurs, "F,J,N et R" sont mes autres colonnes que je dois ajouter à la suite de ma colonne "A". Voici mon code.
    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
    26
    Sub Rajoutdureste()
     
        Sheets("Tri").Select
        Range("F3:F25").Select
        Selection.Copy
        Range("A2").End (xlDown)
        Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
            :=False, Transpose:=False
        Range("J3:J25").Select
        Selection.Copy
        Range("A2").End (xlDown)
        Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
            :=False, Transpose:=False
        Range("N3:N25").Select
        Selection.Copy
        Range("A2").End (xlDown)
        Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
            :=False, Transpose:=False
        Range("R3:R25").Select
        Selection.Copy
        Range("A2").End (xlDown)
        Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
            :=False, Transpose:=False
        Range("F3:T25").Select
        Selection.ClearContents
    End Sub
    Quand je lance la macro, j'ai une erreur de compilation (Utilisation incorrecte de la propriété) avec .End de la ligne 6 qui est surlignié. Pourriez-vous m'aider a comprendre mon erreur?

  2. #2
    Invité
    Invité(e)
    Par défaut
    Citation Envoyé par Miraie Voir le message
    Bonjour,

    C'est parce que le code n'est pas complet
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    Range("A2").End(xlDown).Row
    Mais cette façon de faire n'est pas correcte, vous allez atteindre la dernière cellule de l'onglet. Il faut plutôt partir du bas et ajouter 1 pour atteindre la dernière cellule vide.


    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 Rajoutdureste()
     
    Dim DerniereLigne As Long
     
       With Sheets("Tri")
     
            DerniereLigne = .Cells(.Rows.Count, 1).End(xlUp).Row + 1
            .Range("F3:F25").Copy Destination:=.Cells(DerniereLigne, 1)
     
            DerniereLigne = .Cells(.Rows.Count, 1).End(xlUp).Row + 1
            .Range("J3:J25").Copy Destination:=.Cells(DerniereLigne, 1)
     
            DerniereLigne = .Cells(.Rows.Count, 1).End(xlUp).Row + 1
            .Range("N3:N25").Copy Destination:=.Cells(DerniereLigne, 1)
     
            DerniereLigne = .Cells(.Rows.Count, 1).End(xlUp).Row + 1
            .Range("R3:R25").Copy Destination:=.Cells(DerniereLigne, 1)
     
            .Range("F3:T25").ClearContents
     
      End With
     
     
    End Sub

    Autre possibilité en respectant votre méthode de copier-coller :

    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
    26
    27
    28
    29
    30
     
     
    Sub Rajoutdureste2()
     
    Dim I As Integer
    Dim AiresACopier As Variant
     
       AiresACopier = Array("F3:F25", "J3:J25", "N3:N25", "R3:R25")
     
       With Sheets("Tri")
            For I = LBound(AiresACopier) To UBound(AiresACopier)
                CopieZone .Range(AiresACopier(I))
            Next I
            .Range("F3:T25").ClearContents
      End With
     
     
    End Sub
     
    Sub CopieZone(ByVal CellulesSource As Range)
     
    Dim DerniereLigne As Long
     
       With Sheets("Tri")
            DerniereLigne = .Cells(.Rows.Count, 1).End(xlUp).Row + 1
            CellulesSource.Copy
            .Range("A" & DerniereLigne).PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks:=False, Transpose:=False
       End With
     
    End Sub

  3. #3
    Expert éminent sénior Avatar de Menhir
    Homme Profil pro
    Ingénieur
    Inscrit en
    Juin 2007
    Messages
    16 037
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2007
    Messages : 16 037
    Points : 32 866
    Points
    32 866
    Par défaut
    Juste une petite simplification de la première méthode d'Eric ( ).

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    Sub Rajoutdureste()
       With Sheets("Tri")
            .Range("F3:F25").Cut Destination:=.Cells(.Rows.Count, 1).End(xlUp).Offset(1, 0)
            .Range("J3:J25").Cut Destination:=.Cells(.Rows.Count, 1).End(xlUp).Offset(1, 0)
            .Range("N3:N25").Cut Destination:=.Cells(.Rows.Count, 1).End(xlUp).Offset(1, 0)
            .Range("R3:R25").Cut Destination:=.Cells(.Rows.Count, 1).End(xlUp).Offset(1, 0)
      End With
    End Sub
    Si les colonnes sources sont de dimension variable :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    Sub Rajoutdureste()
       With Sheets("Tri")
            .Range("F3", Cells(Rows.Count, "F").End(xlUp)).Cut Destination:=.Cells(.Rows.Count, 1).End(xlUp).Offset(1, 0)
            .Range("J3", Cells(Rows.Count, "J").End(xlUp)).Cut Destination:=.Cells(.Rows.Count, 1).End(xlUp).Offset(1, 0)
            .Range("N3", Cells(Rows.Count, "N").End(xlUp)).Cut Destination:=.Cells(.Rows.Count, 1).End(xlUp).Offset(1, 0)
            .Range("R3", Cells(Rows.Count, "R").End(xlUp)).Cut Destination:=.Cells(.Rows.Count, 1).End(xlUp).Offset(1, 0)
      End With
    End Sub
    Merci de cliquer sur pour chaque message ayant aidé puis sur pour clore cette discussion.

  4. #4
    Membre régulier
    Homme Profil pro
    Superviseur en transport
    Inscrit en
    Août 2019
    Messages
    102
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : Superviseur en transport
    Secteur : Transports

    Informations forums :
    Inscription : Août 2019
    Messages : 102
    Points : 70
    Points
    70
    Par défaut
    Merci pour votre aide, vous m'avez bien aidé.

  5. #5
    Membre régulier
    Homme Profil pro
    Superviseur en transport
    Inscrit en
    Août 2019
    Messages
    102
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : Superviseur en transport
    Secteur : Transports

    Informations forums :
    Inscription : Août 2019
    Messages : 102
    Points : 70
    Points
    70
    Par défaut
    Bonjour,

    Tout semblais bien fonctionné jusqu'à ce que j'ai une colonne vide. Alors, plutôt que de rien recopier, la macro va chercher l'entête de la colonne en deuxième ligne et fait tout planter. Les valeurs sont numériques alors que l'entête est alphabétique. Il y aurrait-il un moyen de limiter la macro aux lignes sous la deuxième ligne ou mettre une restriction afin qu'elle utilise seulement les chiffres? Ou auriez vous une autre solution à m'apporter?

    Merci d'avance pour votre aide

  6. #6
    Invité
    Invité(e)
    Par défaut
    Citation Envoyé par Miraie Voir le message
    Bonjour,

    Remplacez la ligne de code calculant la dernière ligne par celle-ci, mais vous aurez des cellules vides dans votre première colonne :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
            DerniereLigne = .UsedRange.SpecialCells(xlCellTypeLastCell).Row + 1

    Ou alors collez sur un autre onglet.

  7. #7
    Membre régulier
    Homme Profil pro
    Superviseur en transport
    Inscrit en
    Août 2019
    Messages
    102
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : Superviseur en transport
    Secteur : Transports

    Informations forums :
    Inscription : Août 2019
    Messages : 102
    Points : 70
    Points
    70
    Par défaut
    Re bonjour,

    En fait la deuxième technique d'Eric KERGRESSE répond très bien et corrige l'erreur a laquelle je fessais face.

    Merci encore pour votre aide!

  8. #8
    Invité
    Invité(e)
    Par défaut
    Citation Envoyé par Miraie Voir le message
    Elle n'est pas différente de la première...

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

Discussions similaires

  1. Réponses: 0
    Dernier message: 06/08/2015, 08h33
  2. [9.1] Ajouts plusieurs colonnes en même temps
    Par fafa63 dans le forum Requêtes
    Réponses: 4
    Dernier message: 15/06/2013, 01h14
  3. [AC-2003] Ajouter plusieurs colonnes dans un menu déroulant
    Par Smoovy35 dans le forum IHM
    Réponses: 2
    Dernier message: 24/01/2011, 17h28
  4. [E-03] comment ajouter plusieurs colonnes d'un coup ?
    Par Emily2711 dans le forum Macros et VBA Excel
    Réponses: 5
    Dernier message: 23/02/2009, 09h25
  5. Réponses: 3
    Dernier message: 16/06/2008, 17h27

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