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 :

Copier Coller colonne en lignes [XL-2016]


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Août 2016
    Messages
    2
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 31
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Août 2016
    Messages : 2
    Par défaut Copier Coller colonne en lignes
    Bonjour à tous,

    Je vous sollicite car je cherche réaliser un code particulier. Je dois traiter des données situées uniquement dans la colonne A et les dispatcher en lignes de sorte à faire des lignes de 11 cases avant de recommencer une nouvelle ligne.
    J'aurai plusieurs milliers de valeurs à trier donc j'ai essayé de faire des boucles.

    Pour mieux illustrer ma pensée voici ce que cela devrait donner:

    Avant le code:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22

    Après le code:
    1 2 3 4 5 6 7 8 9 10 11
    12 13 14 15 16 17 18 19 20 21 22

    Voici mon code actuel qui ne fonctionne pas, après l'utiliser la plupart des données se suppriment et seules les valeurs 11 et 22 sont conservées et placées en A2 et A3 (je souhaite conserver les cellules de la ligne 1 pour les titres):

    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
    Sub Test2()
    Dim j, k, f, m, l As Integer
     
    With Sheets("Feuil1")
    f = 2
    k = 2
     
        While (Cells(f, 1) <> "")
        For j = 0 To 10
     
    l = j + f
    m = j + 1
     
        Cells(l, 1).EntireRow.Select
        Selection.Cut
        Cells(k, m).EntireRow.Select
        ActiveSheet.Paste
     
        Next j
           f = f + 11
           k = k + 1
     
        Wend
     
    End With
     
    End Sub
    Je débute en VBA et ait seulement programmé quelques dizaines d'heure en 2 ans, il se peut que j'ai fait une erreur de débutant et que je ne m'en soit pas rendu compte. J'ai aussi beaucoup réduit la taille de mon code en utilisant diverses variables.

    Vous remerciant d'avance pour vos conseils.

  2. #2
    Expert confirmé
    Homme Profil pro
    aucune
    Inscrit en
    Avril 2016
    Messages
    7 563
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 84
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : aucune

    Informations forums :
    Inscription : Avril 2016
    Messages : 7 563
    Par défaut
    Bonjour

    Je te propose d'adapter à tes cellules ce petit bout de code un peu bâclé, mais ... (ici, la suite de chiffres est dans la colonne A, à partir de la ligne 1)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    derlig = Range("A" & Rows.Count).End(xlUp).Row
      Dim plage As Range, traitons As Range
      For i = 1 To derlig Step 11
        Set traitons = Range(Cells(i, 1), Cells(i, 11))
        traitons = WorksheetFunction.Transpose(Range("A" & i & ":A" & i + 11))
        If plage Is Nothing Then
          Set plage = Range(Rows(i + 1), Rows(i + 10))
        Else
          Set plage = Union(plage, Range(Rows(i + 1), Rows(i + 10)))
        End If
      Next
      plage.EntireRow.Delete
    EDIT :
    petit cadeau matinal :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    Dim premcol As Integer, premlig As Integer, derlig As Long, plage As Range
      premcol = 2 ' pour dire que le premier chiffre se trouve en colonne B (2)
      premlig = 4 ' pour dire que le premier chiffre se trouve en ligne 4
      derlig = Cells(Rows.Count, premcol).End(xlUp).Row
      For i = premlig To derlig Step 11
        Range(Cells(i, premcol), Cells(i, 11)) = WorksheetFunction.Transpose(Range(Cells(i, premcol), Cells(i + 11, premcol)))
        If plage Is Nothing Then
          Set plage = Range(Rows(i + 1), Rows(i + 10))
        Else
          Set plage = Union(plage, Range(Rows(i + 1), Rows(i + 10)))
        End If
      Next
      plage.EntireRow.Delete
    il ne te reste plus qu'à changer les valeurs des 2 premières lignes de code pour désigner le point de départ que tu choisis

  3. #3
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Août 2016
    Messages
    2
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 31
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Août 2016
    Messages : 2
    Par défaut Parfait
    Super, merci beaucoup, c'est exactement ce que j'attendais.
    Je n'avais pas pensé à établir des variables et utiliser une boucle for par étapes de 11 bien que j'aurai du y penser, par contre pour la suite je ne comprends que partiellement.
    En tout cas merci beaucoup de ton aide et de ta réactivité!

  4. #4
    Membre Expert
    Inscrit en
    Octobre 2010
    Messages
    1 401
    Détails du profil
    Informations forums :
    Inscription : Octobre 2010
    Messages : 1 401
    Par défaut
    Bonjour.

    Voici une autre suggestion.

    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
    31
    32
    Sub Niveau_Debutant()
     
    Set f = Worksheets("Feuil1")
     
    premLigne = 2
    col = 1
     
    derl = f.Cells(Rows.Count, col).End(xlUp).Row
     
    Set r = f.Range(f.Cells(premLigne, col), f.Cells(derl, col))
     
    destLigne = r.Row
    destCol = r.Column + 1
     
    For i = r.Row To r.Row + r.Rows.Count - 1
     
     Set c = f.Cells(i, col)
     
     Set dest = f.Cells(destLigne, destCol + nbr)
     
     c.Copy dest
     
     nbr = nbr + 1
     
     If nbr = 11 Then
      nbr = 0
      destLigne = destLigne + 1
     End If
     
    Next
     
    End Sub

  5. #5
    Expert confirmé
    Homme Profil pro
    aucune
    Inscrit en
    Avril 2016
    Messages
    7 563
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 84
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : aucune

    Informations forums :
    Inscription : Avril 2016
    Messages : 7 563
    Par défaut
    Bonjour Docmarti
    Je vois que tu as intitulé ta procédure "Niveau_Debutant".
    Ce n'est pas pour rien que j'ai utilisé dans la mienne le "transpose", dont il est facile (aide VBA) de voir ce que fait cette méthode.
    Pour ne rien te cacher, j'ai hésité à
    - utiliser une matrice
    - utiliser chacun de ses articles ainsi : partie entière d'une division par 11 et modulo de la même division par 11 pour décider de la ligne et de la colonne de destination.
    Une discussion relativement récente (étiquettes) avait donné l'occasion à Pierre Fauconnier de montrer comment utiliser cela
    Je ne crois pas que le résultat aurait ainsi été plus rapidement atteint qu'avec la méthode transpose.
    ---- Un tel mécanisme aurait toutefois conduit le "débutant" à d'autres "réflexions" se rapprochant plus de la réflexion algébrique que du développement.
    ---- Je crois par ailleurs et surtout qu'il ne peut qu'être utile à un "débutant" de découvrir ce qu'est la méthode transpose
    Amitiés

    PS : s'il le faut (si tu estimes que cela peut avoir un intérêt didactique), je montrerais comment (mais pas sûr du tout -une fois de plus - que ce soit aussi rapide qu'avec la méthode native VBA transpose).

  6. #6
    Membre Expert
    Inscrit en
    Octobre 2010
    Messages
    1 401
    Détails du profil
    Informations forums :
    Inscription : Octobre 2010
    Messages : 1 401
    Par défaut
    Bonjour unparia.
    J'ai beaucoup de respect pour tes interventions
    Je vois que nous ne parlons pas exactement la même langue VBA Excel. Ce n'est pas grave. C'est probablement que nous ne sommes pas de la même génération et que ce langage a évolué au cours des décennies. C'est comme si tu étais Japonais et moi Russe et que tu me dises que c'est très utile de parler Japonais. Je suis sûr que tu as raison et je ne contesterai pas ton affirmation. Mais je n'apprendrai pas le japonais pour autant car je me débrouille très bien avec le russe.

    Tu utilises les mots "Modulo" et "Transpose" que je ne comprends pas très bien car je n'en ai encore jamais eu absolument besoin pour programmer mes applications. Et je les trouve complexes à utiliser. Donc j'utilise d'autres techniques que je trouve personnellement plus simples et plus à mon niveau.

    Amitiés

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

Discussions similaires

  1. Debutant copier/coller valeur dernier ligne colonne 13
    Par floflo83 dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 28/11/2009, 15h31
  2. Copier/coller colonnes
    Par discretos39 dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 27/03/2009, 14h10
  3. Réponses: 1
    Dernier message: 17/03/2009, 17h55
  4. Macro copier/coller colonne- insérer nouvelle colonne
    Par rembliec dans le forum Macros et VBA Excel
    Réponses: 5
    Dernier message: 15/11/2007, 16h32
  5. Recherche avec InputBox puis Copier - Coller de la ligne
    Par bungler dans le forum Macros et VBA Excel
    Réponses: 9
    Dernier message: 20/07/2007, 15h34

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