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

Excel Discussion :

Besoin d'aide sur le tri automatique de 2 colonnes [XL-2010]


Sujet :

Excel

  1. #1
    Membre averti
    Inscrit en
    Juin 2009
    Messages
    20
    Détails du profil
    Informations forums :
    Inscription : Juin 2009
    Messages : 20
    Par défaut Besoin d'aide sur le tri automatique de 2 colonnes
    Bonjour à tous,

    voilà, j'ai besoin d'une aide sur un tableau Excel.

    Je m'explique,

    je copie/colle des valeurs dans ma "feuil1"

    Cela me créer 2 colonnes.

    La première colonne contient, à la suite, Nom d'utilisateur, date et projets.
    La deuxième colonne contient :
    - la valeur de la somme des projets en face des nom d'utilisateurs
    - la somme de la valeur des projets de la journée en face de la date
    - la valeur des projets en face des noms des projets.

    Ce que j'aimerais réaliser c'est pouvoir séparer, dans cette première colonne, les utilisateurs avec leurs dates et leurs projet par date.

    Et le tout automatiquement, sachant que le nombre de projet est aléatoire et le nombre de date dépend du mois sur lequel je travail.

    Pour mieux comprendre, je vous joint le fichier excel.

    Feuil1 c'est mon copier/coller
    Feuil2 c'est le résultat que j'aimerais avoir automatiquement.
    En VBA ou macro ou formule, peut importe !

    Merci de votre aide et patience

    Flo
    Fichiers attachés Fichiers attachés

  2. #2
    Rédacteur
    Avatar de Philippe Tulliez
    Homme Profil pro
    Formateur, développeur et consultant Excel, Access, Word et VBA
    Inscrit en
    Janvier 2010
    Messages
    13 152
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur, développeur et consultant Excel, Access, Word et VBA

    Informations forums :
    Inscription : Janvier 2010
    Messages : 13 152
    Billets dans le blog
    53
    Par défaut
    Bonjour,
    Dans ta feuille de départ, comment peut-on distinguer un utilisateur d'un projet ?
    Je vois 185 dans la colonne 2 de chaque utilisateur qui ne semble pas être un total.
    Philippe Tulliez
    Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément. (Nicolas Boileau)
    Lorsque vous avez la réponse à votre question, n'oubliez pas de cliquer sur et si celle-ci est pertinente pensez à voter
    Mes tutoriels : Utilisation de l'assistant « Insertion de fonction », Les filtres avancés ou élaborés dans Excel
    Mon dernier billet : Utilisation de la fonction Dir en VBA pour vérifier l'existence d'un fichier

  3. #3
    Membre averti
    Inscrit en
    Juin 2009
    Messages
    20
    Détails du profil
    Informations forums :
    Inscription : Juin 2009
    Messages : 20
    Par défaut
    En réalité c'est la somme de tous les projets réalisés dans le mois, pour simplifier mon exemple, je n'ai pas mis toutes les dates du mois ni tous les projets

  4. #4
    Rédacteur
    Avatar de Philippe Tulliez
    Homme Profil pro
    Formateur, développeur et consultant Excel, Access, Word et VBA
    Inscrit en
    Janvier 2010
    Messages
    13 152
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur, développeur et consultant Excel, Access, Word et VBA

    Informations forums :
    Inscription : Janvier 2010
    Messages : 13 152
    Billets dans le blog
    53
    Par défaut
    Bonjour,
    Citation Envoyé par TheHighFlying Voir le message
    En réalité c'est la somme de tous les projets réalisés dans le mois, pour simplifier mon exemple, je n'ai pas mis toutes les dates du mois ni tous les projets
    Cela ne répond pas à ma question
    Dans ta feuille de départ, comment peut-on distinguer un utilisateur d'un projet ?
    Philippe Tulliez
    Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément. (Nicolas Boileau)
    Lorsque vous avez la réponse à votre question, n'oubliez pas de cliquer sur et si celle-ci est pertinente pensez à voter
    Mes tutoriels : Utilisation de l'assistant « Insertion de fonction », Les filtres avancés ou élaborés dans Excel
    Mon dernier billet : Utilisation de la fonction Dir en VBA pour vérifier l'existence d'un fichier

  5. #5
    Membre averti
    Inscrit en
    Juin 2009
    Messages
    20
    Détails du profil
    Informations forums :
    Inscription : Juin 2009
    Messages : 20
    Par défaut
    Citation Envoyé par corona Voir le message
    Bonjour,

    Cela ne répond pas à ma question

    Excuse moi, un projet commence toujours par

    "Projects / xxxxxx"

    Et un utilisateur c'est toujours nom et prénom (il n'y en a que 5 si cela peut simplifier)

  6. #6
    Rédacteur
    Avatar de Philippe Tulliez
    Homme Profil pro
    Formateur, développeur et consultant Excel, Access, Word et VBA
    Inscrit en
    Janvier 2010
    Messages
    13 152
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur, développeur et consultant Excel, Access, Word et VBA

    Informations forums :
    Inscription : Janvier 2010
    Messages : 13 152
    Billets dans le blog
    53
    Par défaut
    Bonjour,
    Citation Envoyé par TheHighFlying Voir le message
    Excuse moi, un projet commence toujours par
    "Projects / xxxxxx"
    Et un utilisateur c'est toujours nom et prénom (il n'y en a que 5 si cela peut simplifier)
    Et bien voilà, c'est un peu plus clair
    La procédure Méthode 1 est ce que tu attends, la procédure Méthode 2 est celle que j'adopterais parce-que la seule à pouvoir ếtre exploitée par Excel.
    J'utilise une feuille nommée [Export] pour la méthode1, [Export2] pour la méthode 2
    C'est testé mais bien entendu écrit rapidement donc peut-être encore quelques petits soucis à venir.
    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
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    Option Explicit
    Const shtFromName As String = "Feuil1"
    Const shtToName As String = "Export"
    Dim shtFrom As Worksheet, shtTo As Worksheet
    Sub Methode1()
      ' Init
      Dim rFrom As Long, rTo As Long, cto As Integer
      Dim flagUser As Boolean, flagDate As Boolean, flagProject As Boolean
      With ThisWorkbook
       Set shtFrom = .Worksheets(shtFromName)
       Set shtTo = .Worksheets(shtToName)
      End With
      ' Test sur feuille de base
      For rFrom = 1 To shtFrom.Range("A1").CurrentRegion.Rows.Count
       flagUser = False: flagDate = False: flagProject = False
       With shtFrom
        Select Case True
         Case IsDate(.Cells(rFrom, 1)) ' Date
          flagDate = True
         Case InStr(.Cells(rFrom, 1), "Projects") > 0 ' Projet
          flagProject = True
         Case Else ' Projet
          flagUser = True
        End Select
       ' Ecriture sur Feuille [Export]
       rTo = rTo + 1
       Select Case True
        Case flagUser: cto = 1
        Case flagDate: cto = 2
        Case flagProject: cto = 3
       End Select
       shtTo.Cells(rTo, cto) = .Cells(rFrom, 1)
       If cto = 2 Then shtTo.Cells(rTo, cto).NumberFormat = "dd/mm/yy;@"
       If cto = 3 Then shtTo.Cells(rTo, 4) = .Cells(rFrom, 2)
       If cto = 3 Then shtTo.Cells(rTo, 4) = .Cells(rFrom, 2)
       End With
      Next
    End Sub
    Sub Methode2()
      ' Init
      Dim rFrom As Long, rTo As Long, cto As Integer
      Dim User$, DateWrk As Date
      With ThisWorkbook
       Set shtFrom = .Worksheets(shtFromName)
       Set shtTo = .Worksheets(shtToName & "2")
      End With
      ' Test sur feuille de base
      For rFrom = 1 To shtFrom.Range("A1").CurrentRegion.Rows.Count
       With shtFrom
        Select Case True
         Case IsDate(.Cells(rFrom, 1)) ' Date
          DateWrk = .Cells(rFrom, 1)
         Case InStr(.Cells(rFrom, 1), "Projects") > 0 ' Projet
          ' Ecriture sur Feuille [Export]
          rTo = rTo + 1
          shtTo.Cells(rTo, 1) = User
          shtTo.Cells(rTo, 2) = DateWrk
          shtTo.Cells(rTo, 2).NumberFormat = "dd/mm/yy;@"
          shtTo.Cells(rTo, 3) = .Cells(rFrom, 1)
          shtTo.Cells(rTo, 4) = .Cells(rFrom, 2)
         Case Else ' User
          User = .Cells(rFrom, 1)
        End Select
       End With
      Next
    End Sub
    Philippe Tulliez
    Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément. (Nicolas Boileau)
    Lorsque vous avez la réponse à votre question, n'oubliez pas de cliquer sur et si celle-ci est pertinente pensez à voter
    Mes tutoriels : Utilisation de l'assistant « Insertion de fonction », Les filtres avancés ou élaborés dans Excel
    Mon dernier billet : Utilisation de la fonction Dir en VBA pour vérifier l'existence d'un fichier

  7. #7
    Rédacteur
    Avatar de Philippe Tulliez
    Homme Profil pro
    Formateur, développeur et consultant Excel, Access, Word et VBA
    Inscrit en
    Janvier 2010
    Messages
    13 152
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur, développeur et consultant Excel, Access, Word et VBA

    Informations forums :
    Inscription : Janvier 2010
    Messages : 13 152
    Billets dans le blog
    53
    Par défaut
    Bonjour,
    J'ai ajouté pour la méthode 2, une mise ne forme conditionnelle qui ainsi ne fera pas apparaître les lignes en double dans les colonnes 1 & 2 ainsi que les étiquettes de colonnes en ligne 1.
    Attention, j'utilise maintenant comme feuille de départ, la feuille nommée [Import].
    Il suffit de modifier les constantes pour changer les noms.
    Attention toutefois que la méthode 2 utilise comme nom de feuille shtToName & "2" donc [Export] devient [Export2]
    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
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    Option Explicit
    Const shtFromName As String = "Import"
    Const shtToName As String = "Export"
    Dim shtFrom As Worksheet, shtTo As Worksheet
     
    Sub Methode2()
      Application.ScreenUpdating = False
      ' Init
      Dim rFrom As Long, rTo As Long, cto As Integer
      Dim User$, DateWrk As Date
      Dim formula As String
      With ThisWorkbook
       Set shtFrom = .Worksheets(shtFromName)
       Set shtTo = .Worksheets(shtToName & "2")
      End With
      ' Etiquettes sur feuille [Export2]
     
      With shtTo
       '.Range("A1").CurrentRegion
       .Cells(1, 1).CurrentRegion.Clear
       .Cells(1, 1) = "User"
       .Cells(1, 2) = "Date"
       .Cells(1, 3) = "Project"
       .Cells(1, 4) = "Qté"
       rTo = rTo + 1
      End With
      '
      ' Test sur feuille de base
      For rFrom = 1 To shtFrom.Range("A1").CurrentRegion.Rows.Count
       With shtFrom
        Select Case True
         Case IsDate(.Cells(rFrom, 1)) ' Date
          DateWrk = .Cells(rFrom, 1)
         Case InStr(.Cells(rFrom, 1), "Projects") > 0 ' Projet
          ' Ecriture sur Feuille [Export]
          rTo = rTo + 1
          shtTo.Cells(rTo, 1) = User
          shtTo.Cells(rTo, 2) = DateWrk
          shtTo.Cells(rTo, 2).NumberFormat = "dd/mm/yy;@"
          shtTo.Cells(rTo, 3) = .Cells(rFrom, 1)
          shtTo.Cells(rTo, 4) = .Cells(rFrom, 2)
         Case Else ' User
          User = .Cells(rFrom, 1)
        End Select
       End With
      Next
      DoEvents
      ' Conditional Formating
      ' Colonne A
      With shtTo.Range(Cells(2, 1), Cells(shtTo.Range("A1").CurrentRegion.Rows.Count, 1))
      .FormatConditions.Add Type:=xlExpression, Formula1:="=$A1=$A2"
      .FormatConditions(1).Font.ColorIndex = 2
      End With
      ' Colonne B
      With shtTo.Range(Cells(2, 2), Cells(shtTo.Range("A1").CurrentRegion.Rows.Count, 2))
      .FormatConditions.Add Type:=xlExpression, Formula1:="=$B1=$B2"
      .FormatConditions(1).Font.ColorIndex = 2
      End With
      Application.ScreenUpdating = False
    End Sub
    Philippe Tulliez
    Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément. (Nicolas Boileau)
    Lorsque vous avez la réponse à votre question, n'oubliez pas de cliquer sur et si celle-ci est pertinente pensez à voter
    Mes tutoriels : Utilisation de l'assistant « Insertion de fonction », Les filtres avancés ou élaborés dans Excel
    Mon dernier billet : Utilisation de la fonction Dir en VBA pour vérifier l'existence d'un fichier

  8. #8
    Membre averti
    Inscrit en
    Juin 2009
    Messages
    20
    Détails du profil
    Informations forums :
    Inscription : Juin 2009
    Messages : 20
    Par défaut
    Merci pour ton aide et ta proposition de code corona,
    malheureusement, j'ai une erreur dans la compilation, voir screenshot :


  9. #9
    Rédacteur
    Avatar de Philippe Tulliez
    Homme Profil pro
    Formateur, développeur et consultant Excel, Access, Word et VBA
    Inscrit en
    Janvier 2010
    Messages
    13 152
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur, développeur et consultant Excel, Access, Word et VBA

    Informations forums :
    Inscription : Janvier 2010
    Messages : 13 152
    Billets dans le blog
    53
    Par défaut
    Bonjour,
    Comme je l'ai écrit hier, cela vient du nom des feuilles, relis mon dernier message et avant dernier tout est expliqué.
    Attention, j'utilise maintenant comme feuille de départ, la feuille nommée [Import].
    Il suffit de modifier les constantes pour changer les noms.
    Attention toutefois que la méthode 2 utilise comme nom de feuille shtToName & "2" donc [Export] devient [Export2]
    La valeur des constantes est à changer ou c'est toi qui change le nom de tes feuilles
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Const shtFromName As String = "Import"
    Const shtToName As String = "Export"
    Philippe Tulliez
    Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément. (Nicolas Boileau)
    Lorsque vous avez la réponse à votre question, n'oubliez pas de cliquer sur et si celle-ci est pertinente pensez à voter
    Mes tutoriels : Utilisation de l'assistant « Insertion de fonction », Les filtres avancés ou élaborés dans Excel
    Mon dernier billet : Utilisation de la fonction Dir en VBA pour vérifier l'existence d'un fichier

  10. #10
    Rédacteur
    Avatar de Philippe Tulliez
    Homme Profil pro
    Formateur, développeur et consultant Excel, Access, Word et VBA
    Inscrit en
    Janvier 2010
    Messages
    13 152
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur, développeur et consultant Excel, Access, Word et VBA

    Informations forums :
    Inscription : Janvier 2010
    Messages : 13 152
    Billets dans le blog
    53
    Par défaut
    Bonjour,
    Désolé je vois dans l'image qu'effectivement le nom des feuilles semble correct.
    La ligne de code où se situe le problème est l'assignation de la variable objet shtFrom.
    Cette feuille doit être dans le classeur où est le code VBA (ThisWorkbook).
    Si ton test se situe sur un autre classeur que celui où se trouve le code, il y a lieu de remplacer ThisWorkBook par Workbooks("Nom du classeur")
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    With ThisWorkbook
       Set shtFrom = .Worksheets(shtFromName)
       Set shtTo = .Worksheets(shtToName & "2")
    End With
    Philippe Tulliez
    Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément. (Nicolas Boileau)
    Lorsque vous avez la réponse à votre question, n'oubliez pas de cliquer sur et si celle-ci est pertinente pensez à voter
    Mes tutoriels : Utilisation de l'assistant « Insertion de fonction », Les filtres avancés ou élaborés dans Excel
    Mon dernier billet : Utilisation de la fonction Dir en VBA pour vérifier l'existence d'un fichier

  11. #11
    Membre averti
    Inscrit en
    Juin 2009
    Messages
    20
    Détails du profil
    Informations forums :
    Inscription : Juin 2009
    Messages : 20
    Par défaut
    Bonjour,

    effectivement il suffisait de mettre le code dans le "ThisWorkBook"

    A priori, cela fonctionne bien

    Merci pour ton aide

    Edit : La méthode 2 est encore mieux

    Super ! Merci

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

Discussions similaires

  1. besoin d'aide sur tri shell
    Par eaglevmt-4 dans le forum Algorithmes et structures de données
    Réponses: 0
    Dernier message: 30/12/2008, 17h35
  2. [D7] Besoin d'aide sur un PChar
    Par bobby-b dans le forum Langage
    Réponses: 6
    Dernier message: 30/06/2004, 16h42
  3. Filemaker ... besoin d'aide sur les Plugin
    Par joange dans le forum Autres SGBD
    Réponses: 3
    Dernier message: 22/04/2004, 10h16
  4. [intermedia] besoin d'aide sur script PL/SQL
    Par SteelBox dans le forum PL/SQL
    Réponses: 8
    Dernier message: 05/01/2004, 19h59
  5. [CR] besoin d'aide sur les formules
    Par GuillaumeDSA dans le forum Formules
    Réponses: 4
    Dernier message: 10/07/2003, 12h19

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