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 colonne d'un onglet sur l'autre mais dans un ordre différent [XL-2010]


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Femme Profil pro
    Chargé de projet
    Inscrit en
    Mars 2014
    Messages
    24
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 51
    Localisation : France

    Informations professionnelles :
    Activité : Chargé de projet
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2014
    Messages : 24
    Par défaut Copier colonne d'un onglet sur l'autre mais dans un ordre différent
    Bonjour les gens,

    En modifiant une programmation de macro existante j'ai partiellement réussi à faire ce que je souhaite.
    C'est à dire copier les lignes vides d'un onglet « Relevé » sur un autre onglet « Synthèse » :

    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
    Sub Copier_lignes_non_vides() 
    Dim wsReleve As Worksheet, rgReleve As Range 
    Dim wsSynthese As Worksheet, rgSynthese As Range 
    Dim c As Range, i As Long 
    Application.ScreenUpdating = False 
    Set wsReleve = ThisWorkbook.Sheets("Releve") 
    Set rgReleve = wsReleve.Range("D7:H280") 
    Set wsSynthese = ThisWorkbook.Sheets("Synthese") 
    Set rgSynthese = wsSynthese.Range("A2") 
     
    For i = rgReleve.Row To rgReleve.Row + rgReleve.Rows.Count - 1 
    Set c = wsReleve.Range("D" & i & ":H" & i) 
    If Application.WorksheetFunction.Count(c) > 0 Then 
    c.Copy 
    rgSynthese.PasteSpecial xlPasteValues 
    Set rgSynthese = rgSynthese.Offset(1) 
    End If 
    Next i 
     
    wsSynthese.Range("D" & rgSynthese.Row & ":H" & Rows.Count).ClearContents 
    Application.ScreenUpdating = True 
     
    End Sub
    J'ai donc les données nécessaires sur l'onglet « Synthèse » mais par contre elles ne sont pas disposées dans l'ordre que je veux.
    C'est-à-dire que j'ai des données dans 5 colonnes qui s'affichent dans le même ordre que dans l'onglet « Relevé » or je voudrais que les informations disponibles sur la ligne se répartissent dans un autre ordre: que les données disponibles en colonne D de l'onglet « Relevé » se retrouvent en colonne E dans l'onglet « Synthèse » par exemple ; la F en A ; la E en B ; la G en D et la H en C. Sachant que les intitulés de colonne sont les mêmes.

    Je vous remercie d'avance pour votre aide,

    a+

    Bleue

  2. #2
    Expert confirmé Avatar de Patrice740
    Homme Profil pro
    Retraité
    Inscrit en
    Mars 2007
    Messages
    2 475
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 71
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Retraité
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Mars 2007
    Messages : 2 475
    Par défaut
    Bonjour,

    Vous écrivez :
    C'est à dire copier les lignes vides d'un onglet « Relevé » sur un autre onglet « Synthèse » :
    Mais la macro qui suit n'a aucun rapport avec les lignes vides,
    Pouvez-vous être plus explicite ???

    Patrice

  3. #3
    Membre averti
    Femme Profil pro
    Chargé de projet
    Inscrit en
    Mars 2014
    Messages
    24
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 51
    Localisation : France

    Informations professionnelles :
    Activité : Chargé de projet
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2014
    Messages : 24
    Par défaut
    Bonjour Patrice,

    C'est à dire que j'ai un onglet "Releve" sur lequel se trouvent des colonnes de A à T dont certaines lignes sont remplies et d'autre non. Je souhaite que les cellules de C à H soient reprises quand elles sont non vides dans un onglet "Synthese" et qu'elles s'affichent les unes après les autres dans ce 2ème onglet (avec suppression des lignes vides).
    Vous pouvez laisser tomber le second point de ma question avec l'apparition des colonnes dans un ordre différent car j'ai refait le tableau dans l'onglet "Releve" afin que les colonnes apparaissent dans le même ordre que celui attendu dans l'onglet "Synthese".

    Merci d'avance

    Bleue

  4. #4
    Invité
    Invité(e)
    Par défaut
    Salut,

    Pour Patrice740 la ligne concernée est la suivante:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    If Application.WorksheetFunction.Count(c) > 0 Then
    Pour ton problème n'est-il pas plus judicieux de mettre les données dans un tableau avec l'ordre de l'onglet 'Synthèse' et ensuite de coller ce tableau dans l'onglet 'Synthèse' ?

  5. #5
    Membre averti
    Femme Profil pro
    Chargé de projet
    Inscrit en
    Mars 2014
    Messages
    24
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 51
    Localisation : France

    Informations professionnelles :
    Activité : Chargé de projet
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2014
    Messages : 24
    Par défaut
    Merci VCottineau,

    et en fait cela règle quoi cette partie du code ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    If Application.WorksheetFunction.Count(c) > 0 Then
    Quelles peuvent être les conséquences sur la récupération des données dans l'onglet "Synthese" ?

    Sinon, nos messages se sont croisés et j'ai finalement modifié le 1er onglet pour l'ordre des colonnes. Merci.

    Bleue

  6. #6
    Expert confirmé Avatar de Patrice740
    Homme Profil pro
    Retraité
    Inscrit en
    Mars 2007
    Messages
    2 475
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 71
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Retraité
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Mars 2007
    Messages : 2 475
    Par défaut
    Bonjour, Bleue

    et en fait cela règle quoi cette partie du code ?
    If Application.WorksheetFunction.Count(c) > 0 Then
    Cette ligne de code permet d'éliminer, non pas les lignes vides, mais les lignes qui ne contiennent pas de nombre !

    Pour éliminer les lignes vides il faut utiliser CountA au lieu de Count :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    If Application.WorksheetFunction.CountA(c) > 0 Then
    Cordialement
    Patrice

  7. #7
    Membre averti
    Femme Profil pro
    Chargé de projet
    Inscrit en
    Mars 2014
    Messages
    24
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 51
    Localisation : France

    Informations professionnelles :
    Activité : Chargé de projet
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2014
    Messages : 24
    Par défaut
    Merci Patrice pour cette précision

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

Discussions similaires

  1. Réponses: 2
    Dernier message: 24/02/2015, 14h19
  2. Copier un onglet sur un autre fichier excel
    Par dimitri70 dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 02/10/2013, 11h22
  3. Copier onglet sur un autre fichier excel
    Par dimitri70 dans le forum Macros et VBA Excel
    Réponses: 15
    Dernier message: 27/09/2013, 16h42
  4. [XL-2007] Copier une série de ligne sur une autre feuille
    Par cirious14 dans le forum Excel
    Réponses: 1
    Dernier message: 03/02/2011, 16h59
  5. Réponses: 19
    Dernier message: 31/05/2010, 09h51

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