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 :

Boucle sur Code


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre habitué
    Inscrit en
    Juillet 2012
    Messages
    10
    Détails du profil
    Informations forums :
    Inscription : Juillet 2012
    Messages : 10
    Par défaut Boucle sur Code
    Bonjour,

    J'ai un tableau de plusieurs milliers de ligne, ressemblant à ceci :
    Code Employé Numéro formation Intitulé formation Durée réalisée
    160 25 Formation 1 150
    192 26 Formation 2 420
    239 27 Formation 3 840
    239 32 Formation 4 0
    239 33 Formation 5 200
    250 34 Formation 1 400
    250 35 Formation 2 420

    Un code employé peut apparaitre 1 seule fois ou plusieurs fois (pas de limite), on voit ici que le 160 n'y est qu'une seule fois alors que le 239 y est 3 fois.
    J'ai besoin d'une macro qui va exporter dans une nouvelle feuille les données du même employé.
    Je n'arrive pas à "compter" le nombre de lignes de chaque employé et donc je n'arrive pas à faire la boucle. je ne sais pas comment passer d'un Code Employé à un autre sachant que le nombre de ligne est variable.
    Qui peut m'aider ?
    d'avance merci.

    bob

  2. #2
    Membre Expert
    Inscrit en
    Décembre 2002
    Messages
    993
    Détails du profil
    Informations forums :
    Inscription : Décembre 2002
    Messages : 993
    Par défaut
    Bonjour,
    Par exemple, tu pourrais demander le code de l'employé via un inputbox, créer une nouvelle feuille, parcourir la colonne "Code employé" et chaque fois que tu trouves une correspondance avec l'inputbox tu copies la ligne dans la nouvelle feuille.
    Si ce n'est pas ce que tu recherches, tu devrais être plus clair dans le résultat attendu.

  3. #3
    Membre habitué
    Inscrit en
    Juillet 2012
    Messages
    10
    Détails du profil
    Informations forums :
    Inscription : Juillet 2012
    Messages : 10
    Par défaut
    et non je ne veux pas passer manuellement d'un code à un autre, je voudrais que la macro le fasse...

  4. #4
    Membre Expert
    Inscrit en
    Décembre 2002
    Messages
    993
    Détails du profil
    Informations forums :
    Inscription : Décembre 2002
    Messages : 993
    Par défaut
    Et donc créer une feuille par employé et ce dans le même classeur par exemple ?
    Voici ce que je te propose:

    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 ExportEmployes()
     
        Dim ws As Worksheet
        Dim newWs As Worksheet
        Dim employe As String
        Dim lastRow As Long
        Dim i As Long
        Dim j As Long
     
        Set ws = ThisWorkbook.Sheets("Feuil1") 'Nom de la feuille contenant les données
        lastRow = ws.Cells(ws.Rows.Count, 1).End(xlUp).Row 'Dernière ligne de la colonne "Code Employé"
     
        For i = 2 To lastRow 'Boucle pour parcourir chaque ligne (en commençant à la ligne 2 pour ignorer les en-têtes)
            employe = ws.Cells(i, 1).Value 'Récupération du code employé
            On Error Resume Next 'Ignorer les erreurs (si la feuille existe déjà)
            Set newWs = ThisWorkbook.Sheets(employe) 'Tentative de sélectionner la feuille correspondant au code employé
            If Err.Number <> 0 Then 'Si la feuille n'existe pas
                Set newWs = ThisWorkbook.Sheets.Add(After:=ThisWorkbook.Sheets(ThisWorkbook.Sheets.Count)) 'Création d'une nouvelle feuille
                newWs.Name = employe 'Renommage de la nouvelle feuille avec le code employé
                ws.Rows(1).Copy newWs.Rows(1) 'Copie des en-têtes dans la nouvelle feuille
            End If
            On Error GoTo 0 'Réactivation des erreurs
            j = newWs.Cells(newWs.Rows.Count, 1).End(xlUp).Row + 1 'Dernière ligne vide de la colonne "Code Employé" dans la nouvelle feuille
            ws.Rows(i).Copy newWs.Rows(j) 'Copie des données dans la nouvelle feuille
        Next i
     
    End Sub

  5. #5
    Membre habitué
    Inscrit en
    Juillet 2012
    Messages
    10
    Détails du profil
    Informations forums :
    Inscription : Juillet 2012
    Messages : 10
    Par défaut
    merci ça marche
    si je comprends bien ton code, ce qui te fait changer de feuille et donc de code employé c'est la détection d'erreur si la feuille n'existe pas en fonction du code que tu as mémorisé ?

    est-ce que tu aurais une méthode non pas sur le nom de la feuille mais sur le code employé lui-même ?

  6. #6
    Membre Expert
    Inscrit en
    Décembre 2002
    Messages
    993
    Détails du profil
    Informations forums :
    Inscription : Décembre 2002
    Messages : 993
    Par défaut
    Non, pas du tout. La détection d'erreur c'est pour voir si la feuille existe ou pas. Si elle n'existe pas je la crée en lui donnant comme nom le code de l'employé et si elle existe, j'ajoute les données de l'employé dans sa propre feuille.
    C'est ce qui est indiqué dans mes commentaires.

Discussions similaires

  1. Boucle sur la dimension d'un code d'activité
    Par Cereal123 dans le forum SAGE
    Réponses: 3
    Dernier message: 11/01/2018, 16h03
  2. Boucle sur un code
    Par stevedav dans le forum Général Python
    Réponses: 1
    Dernier message: 28/06/2015, 12h19
  3. boucle sur code javascript
    Par kate59 dans le forum PHP & Base de données
    Réponses: 8
    Dernier message: 12/06/2015, 10h55
  4. [XSLT] Faire une boucle sur une variable [i]
    Par PoT_de_NuTeLLa dans le forum XSL/XSLT/XPATH
    Réponses: 8
    Dernier message: 07/06/2010, 12h45
  5. optimiser code sql access par boucle sur tous les chkbox
    Par thiefer dans le forum Requêtes et SQL.
    Réponses: 8
    Dernier message: 25/09/2008, 21h46

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