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 :

Récupérer des lignes de données et les envoyer vers des sheets différentes


Sujet :

Macros et VBA Excel

  1. #1
    Candidat au Club
    Inscrit en
    Août 2008
    Messages
    4
    Détails du profil
    Informations forums :
    Inscription : Août 2008
    Messages : 4
    Points : 2
    Points
    2
    Par défaut Récupérer des lignes de données et les envoyer vers des sheets différentes
    Bonjour à tous !

    Je suis débutant en Visual Basic et je dois faire une petite macro pour mon job.

    Je m'explique..

    J'ai une liste de plusieurs milliers de clients avec plusieurs données les concernant et leurs noms apparaissent plusieurs fois dans la liste

    Exemple :

    Jean Banque 1 Solde 1
    Jean Banque 2 Solde 2
    Jean Banque 3 Solde 3
    Martine Banque 1 Solde 1
    Martine Banque 2 Solde 2
    Etc...

    J'aimerais que Excel me crée une sheet pour chaque client dans le même fichier Excel. Par exemple :

    Sheet 1, nommée "Jean" :

    Jean Banque 1 Solde 1
    Jean Banque 2 Solde 2
    Jean Banque 3 Solde 3

    Sheet 2, nommée "Martine" :

    Martine Banque 1 Solde 1
    Martine Banque 2 Solde 2

    Je sais plus ou moins comment m'y prendre mais n'ai pas envie de commencer à lire des tutos sur VB pour y arriver.. En gros, il me semble qu'il faudrait créer une boucle qui, à chaque fois que le nom suivant sera différent du nom précédent, créera une nouvelle sheet et encodera les données dedans. Quelqu'un saurait m'aider ? Dites-moi si vous avez une question..

    PS : Merci à Faladin de m'avoir répondu et réorienté dans l'autre topic..

  2. #2
    Responsable
    Office & Excel


    Homme Profil pro
    Formateur et développeur chez EXCELLEZ.net
    Inscrit en
    Novembre 2003
    Messages
    19 122
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 57
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur et développeur chez EXCELLEZ.net
    Secteur : Enseignement

    Informations forums :
    Inscription : Novembre 2003
    Messages : 19 122
    Points : 55 949
    Points
    55 949
    Billets dans le blog
    131
    Par défaut
    Bonjour et bienvenue sur nos forums

    Voici un code qui, sur base de trois colonnes dans une feuille appelée "données", copie les infos sur des feuilles créées avec le nom trouvé en colonne A.

    C'est à adapter. Ce code utilise des objets Worksheet et Range.

    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 Transfert()
    Dim CelSource As Range
    Dim CelCible As Range
    Dim Feuille As Worksheet
    Dim Nom As String
     
     
    Set CelSource = Worksheets("données").Range("a2")
     
    Do While CelSource.Value <> ""
        If CelSource.Value = Nom Then
            CelCible.Value = CelSource(1, 2).Value
            CelCible(1, 2).Value = CelSource(1, 3).Value
            Set CelSource = CelSource(2)
            Else
            Set Feuille = Worksheets.Add()
            Feuille.Name = CelSource.Value
            Feuille.Range("a1") = "Banque"
            Feuille.Range("b1") = "Solde"
            Nom = CelSource.Value
        End If
            Set CelCible = Feuille.Range("a" & Rows.Count).End(xlUp)(2)
    Loop
     
    End Sub
    On démarre de la cellule A2 de la feuille Données.
    On teste si la valeur de cette cellule correspond au nom mémorisé dans la variable.

    Si oui, on transfère et on descend d'une ligne.
    Si non, on crée un nouvelle feuille que l'on prépare en la nommant et en plaçant en première ligne les intitulés des données de la colonne, puis on boucle.
    "Plus les hommes seront éclairés, plus ils seront libres" (Voltaire)
    ---------------
    Mes billets de blog sur DVP
    Mes remarques et critiques sont purement techniques. Ne les prenez jamais pour des attaques personnelles...
    Pensez à utiliser les tableaux structurés. Ils vous simplifieront la vie, tant en Excel qu'en VBA ==> mon tuto
    Le VBA ne palliera jamais une mauvaise conception de classeur ou un manque de connaissances des outils natifs d'Excel...
    Ce ne sont pas des bonnes pratiques parce que ce sont les miennes, ce sont les miennes parce que ce sont des bonnes pratiques
    VBA pour Excel? Pensez D'ABORD en EXCEL avant de penser en VBA...
    ---------------

  3. #3
    Candidat au Club
    Inscrit en
    Août 2008
    Messages
    4
    Détails du profil
    Informations forums :
    Inscription : Août 2008
    Messages : 4
    Points : 2
    Points
    2
    Par défaut
    J'ai plus ou moins compris.. Je vais essayer de repréciser le problème pour voir où je pourrais agir dans le code..

    En fait, le nombre d'informations par client est de 13, disposées dans 13 colonnes, et le nombre de comptes par client est aléatoire, je dois donc savoir dire à la boucle de s'arrêter quand le nom du client change. La colonne où se situe le nom du client est la colonne F.

    Que signifie ce CelCible.Value = CelSource(1, 2).Value ? J'ai en effet l'impression que ça ne retient qu'une partie des données

    Et quelle est l'étape où l'on copie les données de toute la rangée dans une autre feuille ?

    Merci beaucoup !

  4. #4
    Candidat au Club
    Inscrit en
    Août 2008
    Messages
    4
    Détails du profil
    Informations forums :
    Inscription : Août 2008
    Messages : 4
    Points : 2
    Points
    2
    Par défaut
    Encore un petit rajout, désolé de mon ignorance :-)

    En fait, dans mon fichier excel, j'ai une dizaine de sheets spécifiant différentes régions du monde. Dans chaque sheet, j'ai ma liste de clients, leurs banques, etc. Mais il se trouve de surcroît que des clients ont des comptes dans des pays provenant de plusieurs continents, et donc, que si j'analyse une autre sheet que la première par la suite, Excel me signalera sans doute un bug quand il voudra créer une nouvelle sheet client, étant donné qu'une sheet portant son nom existera déjà. Dans ce cas, quel est le moyen pour dire au programme de rajouter la liste des autres comptes du client à la suite dans la sheet précédemment créée.

    Je ne sais pas si je suis assez explicite ?

    Merci !

Discussions similaires

  1. Réponses: 3
    Dernier message: 08/03/2010, 13h36
  2. Réponses: 4
    Dernier message: 24/05/2007, 10h11
  3. [VBA-Excel] copier des lignes de données d'un fichier à un autre
    Par ash_rmy dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 31/07/2006, 10h17
  4. Réponses: 2
    Dernier message: 04/07/2006, 10h26
  5. Dupliquer des lignes de données
    Par PamelaGeek dans le forum Requêtes
    Réponses: 1
    Dernier message: 31/01/2006, 19h01

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