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 transposé des données d'un tableau colonne en ligne avec passage à la ligne suivante sous condition


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Homme Profil pro
    passionné
    Inscrit en
    Avril 2013
    Messages
    13
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : passionné

    Informations forums :
    Inscription : Avril 2013
    Messages : 13
    Par défaut macro pour transposé des données d'un tableau colonne en ligne avec passage à la ligne suivante sous condition
    Bonjour, j'ai un soucis pour réaliser une macro comme énoncé dans le titre, voici l'énnoncé du problème:
    Dans mon tableau, j'ai un nom de rue en A, un chiffre en B, en N° de rue en C et un Nom en D + d'autres colonnes sans intérêt pour cette macro.
    Je voudrais extraire dans une autre feuille le contenu transposé en ligne des colonnes A, B, C et D en additionnant à chaque ligne le chiffre de la colonne B jusqu'à obtenir un total maximum de 14.
    Une fois les colonnes transposés en ligne et le chiffre 14 atteint il faudrait que l'opération se poursuive en passant 3 lignes plus bas et ainsi de suite jusqu'à la fin de mon tableau.
    Merci par avance de vos conseils.

    Ci joint un tableau d'exemple rempli de données hasardeuse pour mieux exposer mon problème.
    Fichiers attachés Fichiers attachés

  2. #2
    Membre très actif Avatar de tony76
    Homme Profil pro
    Développeur pour le plaisir....
    Inscrit en
    Avril 2014
    Messages
    131
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur pour le plaisir....

    Informations forums :
    Inscription : Avril 2014
    Messages : 131
    Par défaut
    bonjour,

    A tu essayer de le faire avec l'enregistreur de macro et voir avec la fonction TRANSPOSE()
    voir ce que sa donne ?

  3. #3
    Membre averti
    Homme Profil pro
    passionné
    Inscrit en
    Avril 2013
    Messages
    13
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : passionné

    Informations forums :
    Inscription : Avril 2013
    Messages : 13
    Par défaut
    bonjour tony76,
    oui, j'ai effectivement essayé avec l'enregistreur de macro, mais je ne parviens pas à obtenir le résultat essentiel à mon souhait qui est de revenir 3 lignes plus bas une fois le chiffre atteint.
    c'est pour cette raison que je n'ai joint aucun bout de code, car la solution est je pense, à batir à partir de là, mais je ne trouve aucunes pistes.

    merci de votre intervention

  4. #4
    Membre très actif Avatar de tony76
    Homme Profil pro
    Développeur pour le plaisir....
    Inscrit en
    Avril 2014
    Messages
    131
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur pour le plaisir....

    Informations forums :
    Inscription : Avril 2014
    Messages : 131
    Par défaut
    Voici un début reste a faire une boucle pour que cela continu jusqu'a 14 etc....

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    Sub TRANSPOSITION()
        Sheets(1).Range("A2:D2").Copy
        Sheets(2).Range("B1").Select
        Selection.PasteSpecial Paste:=xlPasteAll, Operation:=xlNone, SkipBlanks:=False, Transpose:=True
    End Sub

  5. #5
    Expert confirmé
    Avatar de Qwazerty
    Homme Profil pro
    La très haute tension :D
    Inscrit en
    Avril 2002
    Messages
    4 120
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France

    Informations professionnelles :
    Activité : La très haute tension :D
    Secteur : Service public

    Informations forums :
    Inscription : Avril 2002
    Messages : 4 120
    Par défaut
    Salut

    En règle générale on évite autant que possible d'utiliser Select, on préférera pointer la cellule dans une variable ou dans une structure With.

    Tu peux réaliser ce que tu souhaites en faisant quelques-choses comme ça. Il faudra ajouter une feuille à ton document. Le nom Feuil3 correspond au codename de la feuille
    Nom : 2015-01-18_134906.png
Affichages : 451
Taille : 14,2 Ko
    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
    33
    34
    Option Explicit
     
    Sub TransposeBase()
    Dim CellInA As Range
    Dim Destination As Range
    Dim OffsetCol As Variant
     
     
        'On pointe la cellule de destination
        Set Destination = Feuil3.Range("A1")
     
        'On commence par boucler sur le contenu de la colonne A
        For Each CellInA In Feuil1.Range("A2", Feuil1.Cells(Feuil1.Rows.Count, "A").End(xlUp))
     
            'On Boucle ensuite sur les 4 cellules de la ligne
            'On utilise Offset pour se décaler de la cellule de départ (ici CellInA)
            'On note dans un array les offset dans l'ordre ou doivent apparaitre les données
            '2: on se décale de 2 cellules à droite en partant de A donc C (N° de rue)
            '3: on se décale de 3 cellules à droite en partant de A donc D (Nom)
            '0: on se décale de 0 cellule à droite en partant de A donc A (Rue)
            '...
            For Each OffsetCol In Array(2, 3, 0, 1)
                'On place la valeur dans destination
                Destination.Value = CellInA.Offset(, CInt(OffsetCol)).Value
                'On pointe la cellule de destination suivante
                Set Destination = Destination.Offset(1)
            Next
     
            'On saute deux cellules de destination, on pointe la 3ème
            Set Destination = Destination.Offset(3)
     
        Next
     
    End Sub
    ++
    Qwaz

    MagicQwaz := Harry Potter la baguette en moins
    Le monde dans lequel on vit
    Ma page perso DVP
    Dernier et Seul Tutoriel : VBA & Internet Explorer
    Dernière contribution : Lien Tableau Structuré et UserForm
    L'utilisation de l’éditeur de message

  6. #6
    Membre averti
    Homme Profil pro
    passionné
    Inscrit en
    Avril 2013
    Messages
    13
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : passionné

    Informations forums :
    Inscription : Avril 2013
    Messages : 13
    Par défaut
    Merci qwaz pour votre réponse et le cours qui va avec.
    j'ai testé la macro en l'adaptant à mon fichier mais cela ne correspond qu'en partie à ce que je cherche. En effet, je me suis mal expliqué (et/ou mon fichier exemple n'etait pas assez explicite, je l'ai modifie).
    Ce que je voudrais, pour la 1ère ligne (j'entend par ligneestination.Offset(1)) c'est bon, c'est que la 2ème ligne de votre solution soit placée en colonne B, puis la 3ème ligne en colonne C.... jusqu'à obtenir une somme (de la ligne 4 de la feuille résultat) < à 15 mais le plus proche possible de ce chiffre, puis à cette condition seulement, passer à la ligne suivante (Destination.Offset(3)).

    Je cherche sur le forum quelques indices, mais pour l'instant…… j'y arrive pas!
    Encore merci.
    éric

Discussions similaires

  1. Problème Macro pour trier des données
    Par lmb19 dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 15/11/2010, 00h00
  2. Réponses: 6
    Dernier message: 20/10/2009, 10h05
  3. [XL-2003] Macro pour utiliser des données Excel dans un document Word
    Par Jeremy0269 dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 22/07/2009, 18h58
  4. Réponses: 1
    Dernier message: 07/04/2008, 16h11
  5. Réponses: 3
    Dernier message: 05/12/2005, 02h30

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