Extraire données cochées d'un tableau via macro

Bonjour,

Je souhaite extraire et classer les données renseignées d'un tableau.

Le tableau s'articule comme suit :

  • en colonne A et B : une action et son détail (ex : manger / pizza)
  • à partir de la colonne C : des personnes qui vont réaliser ces actions
Un "X" vient matérialiser le fait que l'action est réalisée.

L'idée est donc de réaliser une macro permettant d'extraire les actions par personne les unes à la suite des autres.

<=> pour une colonne personne, si valeur ="X" alors afficher l'action. Sinon ne pas afficher.

Par exemple (cf fichier pj) : Sur les 8 actions saisies, la colonne de KEVIN a un "X" en face de 3 actions => manger/pizza - boire/vodka - payer/cb.

L'objectif est d'obtenir les 3 lignes d'actions de KEVIN (sans faire apparaitre celles non cochées).

Les contraintes que je souhaite dans le tableau de résultat :

  • 1ère colonne : le nom des personnes
  • 2ème colonne : l'action
  • 3ème colonne : le détail de l'action
  • un couple action/détail = une ligne
  • les actions se suivent dans l'ordre du cochage
  • un espace sépare chaque groupe d'actions par personne
  • le tableau de résultat est dans un nouvel onglet avec un bouton de lancement
  • si possible : la possibilité d'agrandir le tableau initial où sont saisies les données c'est à dire : ajouter des acteurs en colonne et des actions en ligne sans avoir à modifier la macro.

Ci-joint un fichier d'exemple avec le tableau à renseigner et le résultat attendu.

J'ai bien tenté le coup sans macro à coup de INDEX, PETITE.VALEUR, INDIRECT et LIGNE(S) : ça fonctionne mais ça explose le temps de calcul dès qu'on manipule un peu trop de données.

Merci d'avance.

Bonjour,

le plus simple est d'utiliser un filtre avancé permettant même parfois de s'affranchir d'un code !

SALUT

je n'ai pas bien compris mais regarder ça avant

MERCI

Marc L a écrit :

Bonjour,

le plus simple est d'utiliser un filtre avancé permettant même parfois de s'affranchir d'un code !

L'idée est d'obtenir tous les couples Personnes / Actions à la fois et non pas l'un après l'autre.

J'ai pris un exemple avec des noms pour que ce soit parlant mais dans l'utilisation que j'en fais, je peux avoir 30 ou 40 colonnes.

On conviendra que filtrer colonne par colonne pour copier/coller chaque action dans un nouvel onglet n'est pas franchement une solution optimale !

L'objectif n'est pas d'effectuer 50 ou 60 opérations à la main mais d'obtenir un résultat quasi instantané (ce qui est un peu le principe des formules et macro Excel) !

AMIR a écrit :

SALUT

je n'ai pas bien compris mais regarder ça avant

MERCI

Ok, je jète un oeil


AMIR a écrit :

SALUT

je n'ai pas bien compris mais regarder ça avant

MERCI

Toutes les cellules sont en liste déroulante/validation de données, ok, mais les données ne sont pas interchangeables pour commencer.

Boire/pizza par exemple, ça ne fonctionne pas !

Ensuite je ne comprends pas vraiment comment obtenir mon tableau final en saisissant les données de la sorte.

Une action (ex: manger/pizza) peut être associée ("X") ou pas (vide) à une personne.

La saisie doit rester simple et conserver cette logique : je coche, l'action est réalisée par la personne. Je ne coche pas elle ne l'est pas et par conséquent elle n'apparaît pas dans le récapitulatif des actions souhaitées.

salut

regarder ça si te convient

dit moi parceque est tres lente et je peux trouver une solution pour le rendre rapide

merci

Salut Amir,

La macro tourne jusqu'à 98/99% puis boucle et ne ramène rien, je suis obligé de l'arrêter au bout de quelques minutes.

Je ne peux donc pas te dire si ça marche ou pas. Par contre je te confirme que c'est lent !

Y'a t-il un intérêt à passer tous les champs en validation de donnée, je ne saisi pas trop l'idée.

L'objectif à terme c'est de conserver une certaine évolutivité du fichier en rajoutant des champs, que ce soit au niveau des actions (qui sont toutes en validation) et des personnes (à partir de la colonne C).

SALUT

J'AI FAIT LE PREMIER RAPIDEMENT

J'etait tres ocupé alors regarder ça

elle s'aproche de ce que vous vouler non ?

34tableauges.xlsm (26.62 Ko)

Pour une simple copie de cellules, au delà d'une cinquantaine de lignes de code, le problème n'a certainement pas été compris !

Qui plus est avant de livrer une « solution », AMIR le minimum est de vérifier si elle correspond au besoin …

Effectuer une boucle sur chaque ligne est ce qu'il y a de moins performant ‼

Ne pas oublier les fonctions de feuille de calculs et, en activant le Générateur de macros puis en effectuant

une recherche puis une copie des données, le squelette du code est livré en moins d'une minute !

Reste à optimiser et voici une p'tite démonstration efficace de moins de 30 lignes !

Sub Demo()
    Dim Rg As Range
    Application.ScreenUpdating = False

    With Feuil2
           R& = .Cells(.Rows.Count, 3).End(xlUp).Row
        If R > 1 Then Range(.Cells(2, 1), .Cells(R, 3)).ClearContents: R = 1
    End With

    With Feuil1.Cells(1).CurrentRegion
        For C& = 3 To .Columns.Count
               Set Rg = .Columns(C).Find("X")
            If Not Rg Is Nothing Then
                   P& = Rg.Row
                Do
                                                       R = R + 1
                                Feuil2.Cells(R, 1).Value = .Cells(C).Value
                    Feuil2.Cells(R, 2).Resize(, 2).Value = .Cells(Rg.Row, 1).Resize(, 2).Value
                                                  Set Rg = .Columns(C).FindNext(Rg)
                Loop Until Rg.Row = P

                R = R + 1
            End If
        Next

        Set Rg = Nothing
    End With
End Sub

AMIR a écrit :

SALUT

J'AI FAIT LE PREMIER RAPIDEMENT

J'etait tres ocupé alors regarder ça

elle s'aproche de ce que vous vouler non ?

Il y a du mieux dans le sens où cette fois la macro a réussi à donner quelque chose.

Il reste quand même de gros problèmes de lenteurs pour si peu de données. Je n'imagine même pas devoir la lancer avec un tableau en 100 x 30 comme j'ai régulièrement.

S'agissant du contenu, il y a un masquage automatique de la zone de résultat ce qui n'est pas hyper pratique.

Le filtre sur les données cochées est correct mais je souhaiterais qu'elles soit triées par Nom avec un espace entre chaque groupe si possible.

Reste toujours cet inconnu sur les plages systématiquement en validation de données qui pose problème dans le sens où le tableau est amené à évoluer. Cela oblige à chaque fois à redéfinir les plages et est pénalisant lors d'une saisie à la volée (j'insère une ligne et j'ajoute des champs).

EDIT : arf, un nouveau message entre temps, je regarde ça Marc et je vous dis.


Après intégration du code de Marc, je vous confirme que le résultat est nickel !

C'est exactement ce que je voulais, tout y est !

Tout sauf le bouton mais ça je vais me le tenter tout seul, je pense que c'est dans mes cordes !

Encore merci.

Conformément aux règles de ce forum,

sur mon message contenant le code (au fait je l'ai complété) …

Rechercher des sujets similaires à "extraire donnees cochees tableau via macro"