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 :

Vba Fusion d'un ensemble de colonnes [XL-2010]


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé Avatar de A2ll_
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2017
    Messages
    61
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2017
    Messages : 61
    Par défaut Vba Fusion d'un ensemble de colonnes
    Bonjour,

    Avant toute chose, j'ai déja regardé pas mal de discusion sur ma question mais je n'ai pas vraiment compris comment cela marchait (je débute en vba).

    Pour résumer mon problème, je dispose d'une feuille contenant : 1er colonne : des id (sous forme d'int) , 2ieme colonne des int (nombres de SMS), 3 ième colonne des int (nombre de requetes FTP), et une 4iem qui est la somme du nombre de SMS et de FTP (int).
    Ces colonnes sont pour un jour donné. Ce schema se répete à peu près 50 fois . (id,int,int,int, id,int,int,int, id,int,int,int .......).
    Ce que je voudrais faire ,et que j'arrive pas du tout à faire, c'est réussir à fusionner toutes les colonnes id (sachant que ces id ne sont pas forcement les même en fonctions des jours) et de faire la somme de leurs valeurs des SMS,des FTP. Le tout sur 3 colonnes et grâce à une macro.

    Si quelqu'un pouvait m'aiguiller sur une marche a suivre ca serai super
    Merci d'avance pour les éventuelles réponses.

  2. #2
    Membre Expert
    Femme Profil pro
    Ingénieur
    Inscrit en
    Octobre 2016
    Messages
    1 703
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 30
    Localisation : France, Indre et Loire (Centre)

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

    Informations forums :
    Inscription : Octobre 2016
    Messages : 1 703
    Par défaut
    Bonjour,
    Je n'ai pas tout à fait compris la construction de ta feuille. Pourrais-tu nous transmettre une copie d'écran pour que nous voyions à quoi cela ressemble?
    S'agit-il de prendre n tableaux qui sont les uns à côté des autres pour les mettre les uns en-dessous des autres? Et ensuite de faire une étude statistique de ce tableau (nombre de SMS par ID etc...)?

  3. #3
    Membre confirmé Avatar de A2ll_
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2017
    Messages
    61
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2017
    Messages : 61
    Par défaut
    Merci de cette réponse super rapide.

    Ci-joint un bout de l'ensemble de données que je possède ( il y a beaucoup plus de lignes et de colonnes).Chaque 4drinome correspond en fait à un jour ( dans le screen il y a 4 jours)

    J'aimerai bien avoir une colonne avec tout les id,sans doublons, une autre avec la sommes de ses SMS et une autre avec celle des FTP
    Images attachées Images attachées  

  4. #4
    Membre Expert
    Femme Profil pro
    Ingénieur
    Inscrit en
    Octobre 2016
    Messages
    1 703
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 30
    Localisation : France, Indre et Loire (Centre)

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

    Informations forums :
    Inscription : Octobre 2016
    Messages : 1 703
    Par défaut
    Voilà ce que je te propose de faire :
    1. De tous ces tableaux n'en faire qu'un seul
    2. Faire un tableau croisé dynamique pour connaître la somme des SMS (et autres) par ID

    Maintenant, tu vas me dire : oui, mais comment ?
    Avant de te donner des pistes, j'au moi-même des questions :
    • Le nombre de lignes par tableau est-il toujours le même?
    • Le nombre de tableaux dans ton document est-il toujours le même?


    1. On peut déjà commencer par écrire une méthode qui à partir d'une colonne donnée, copie le tableau qui commence à cette colonne et le colle à la suitedu premier tableau. (par exemple, si on lui donne colonne E, elle va copier le tableau de E2 à H5 à la suite du tableau qui commence en A1).
      Supposons qu'on ne connaît pas à l'avance le nombre de lignes dans le tableau. Pour connaître la dernière ligne non vide de la colonne A (colonne n° 1) on utilise :
      Code : Sélectionner tout - Visualiser dans une fenêtre à part
      1
      2
      Dim derLig As Long
      derLig = Cells(Rows.Count, 1).End(xlUp).Row
      Pour copier, on utilise:
      Code : Sélectionner tout - Visualiser dans une fenêtre à part
      Range("A1:A10").Copy destination:=Range("B1")
      Ceci copie les cellules A1 à A10 et les colles à partir de la cellule B1.
      Pour avoir la première cellule vide de la colonne A, on utilise :
      Code : Sélectionner tout - Visualiser dans une fenêtre à part
      Cells(Rows.Count, 1).End(xlUp).Offset(1, 0)
      On cherche la dernière cellule non vide et on se décale d'une ligne
      Je préfère t'aider à écrire le code, plutôt que te le donner sans que tu le comprennes, alors voici une aide :
      Code : Sélectionner tout - Visualiser dans une fenêtre à part
      1
      2
      3
      4
      5
      6
      7
      8
      Sub copierTableau(col As Long)
          Dim derLig As Long     'dernière ligne du tableau
          Dim celColle As Range      'cellule où nous allons coller
       
          '1. trouver derLig du tableau
          '2. trouver la cellule où l'on doit coller
          '3. Copier-coller
      End Sub
      Essaie de compléter et reviens vers nous si tu as encore du mal
    2. Une fois qu'on a une méthode qui permet de copier-coller un tableau, on peut faire une méthode qui copie-colle tous les tableaux. Pour cela, il faut faire une boucle sur l'ensemble des tableaux et à chaque fois appeler la méthode qui copie-colle un tableau.
      On sait que les tableaux commencent toutes les 4 colonnes, donc il suffit de faire une boucle sur toutes les colonnes à partir de la colonne E et avec un pas de 4.
      Boucle avec un pas de 4 :
      Code : Sélectionner tout - Visualiser dans une fenêtre à part
      1
      2
      3
      For i = 1 to 13 Step 4
          MsgBox i
      Next i
      A comprendre et compléter :
      Code : Sélectionner tout - Visualiser dans une fenêtre à part
      1
      2
      3
      4
      5
      6
      Sub copierTout()
          Dim colVide As Long     'première colonne vide (première colonne sans tableau) --> on s'arrêtera ici
          '1. Trouver la première colonne vide (inspire toi du code pour trouver la première ligne vide)
          '2. Faire une boucle avec un pas de 4 de la colonne 5 (E) à colVide - 4
          '3. Dans la boucle appeler la méthode pour copier un tableau
      End Sub
    3. On fera un tableau croisé dynamique à parti du tableau final. Pour connaître le code correspondant à la création d'un TCD : utilise l'enregistreur de macro. N'oublie pas d'adapter le code obtenu, en particulier pour trouver la bonne plage de cellules source.
      On fera une méthode permettant de créer un TCD à partir du tableau final.
      Code : Sélectionner tout - Visualiser dans une fenêtre à part
      1
      2
      3
      4
      5
      Sub creationTCD()
          Dim derLig As Long    'dernière ligne du tableau
          '1. chercher la dernière ligne du tableau
          '2. Créer un TCD avec comme plage source : A1:DderLig
      End Sub
    4. On fera une méthode générale qui appelera à la suite la méthode qui copie tous les tableaux, puis la méthode qui fait le TCD


    J'espère que tu pourras bien avancer avec cela

  5. #5
    Membre confirmé Avatar de A2ll_
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2017
    Messages
    61
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2017
    Messages : 61
    Par défaut
    Merci beaucoup pour ton message ( et désolé de mon temps de réponse ).

    Avant de te donner des pistes, j'au moi-même des questions :

    Le nombre de lignes par tableau est-il toujours le même?
    Le nombre de tableaux dans ton document est-il toujours le même?
    Le nombre de ligne par tableau n'est pas toujours le même.
    Le nombre de tableau n'est pas toujours le même non plus.

    Après pour une meilleur lisibilité je vais essayé de faire un résultat comme ca :

    colonne id balise ( sans les doublons) | colonne MSG Jour 1 ( contenant 3colonnes : 1 SMS, 1FTP, 1 Somme des Messages) | colonne MSG Jour 2 ( contenant 3colonnes : 1 SMS, 1FTP, 1 Somme des Messages) ..... |colonne Finale ( contenant 3colonnes : 1 SMS contenant la somme des SMS, 1FTP contenant la somme des FTP, 1 contenant la somme des Somme des Messages)

    Je vais essayé tout ca et je reviens vers toi pour te dire ce qu'il en retourne

  6. #6
    Membre confirmé Avatar de A2ll_
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2017
    Messages
    61
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2017
    Messages : 61
    Par défaut
    Ca avance bien, j'arrive à avoir ma liste d'id avec les 3 colonnes par jour (SMS,FTP,TT).
    Parcontre je fais face à un problème de taille : La macro prends vraiment beaucoup trop de temps : 40sec a peu pres pour 9 colonnes de traitements.
    Quelqu'un aurait il des conseils d'optimisation de code ? (j'ai vu certains poste qu'on pouvait optimiser grâce aux Variances :
    https://www.developpez.net/forums/d1...on-d-code-vba/
    mais j'avoue que j'ai du mal à l'appliquer à mon code)

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

Discussions similaires

  1. [VBA] Masquer les sélecteurs de ligne/colonnes (1,2..,A,B,C)
    Par skual dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 02/03/2006, 08h52
  2. [VBA-E]définir l'ensemble des cellules d'une feuille?
    Par yaya54 dans le forum Macros et VBA Excel
    Réponses: 15
    Dernier message: 02/03/2006, 08h46
  3. [VBA-E] PROBLEME de recherche entre colonnes
    Par july92 dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 08/02/2006, 09h35
  4. [VBA Excel] Trier une plage à plusieurs colonnes
    Par loacast dans le forum Macros et VBA Excel
    Réponses: 14
    Dernier message: 22/12/2005, 17h04
  5. [D-7][PostGres]Récuperer l'ensemble des colonnes d'une table
    Par Escandil dans le forum Bases de données
    Réponses: 1
    Dernier message: 21/10/2005, 09h17

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