Trier recopier

Bonjour

J'ai une base dans laquelle je doit recopier les lignes pour chaque resultat non nul (cellule non vide, quoi)

mon fichier

la logique est:

si j'ai une cellule non vide pour la colonne H ET la colonne F = "B"

alors recopier dans une autre feuille (nommee "le nom de la colonne H")

puis de meme pour colonne F = "G"

La partie recopier j'ai deja tout ecrit.

Par contre la premiere partie, j'y arrive pas.

Avez vous des suggestions

Merci a vous

Bonsoir,

Pas trop clair !

envoie un fichier + explicite, avec des exemples avant/après

annotations et couleurs éviteront une mauvaise interprétation

à te relire

Claude.

voici le nouveau fichier

en espérant que cela est assez clair

merci

re,

c'est déjà plus la même structure !

envoie le fichier réel avec toutes les colonnes et en-têtes

quelques lignes suffisent

Combien de feuilles au total ?

édit: et combien de lignes sur feuille DATA ? (environ)

Claude.

voici grand maître

72 feuilles (epreuves differentes)

environ 1500 lignes quand ce sera complet.

sachant que j'utilise déjà ta macro menage pour alleger le tout...

re,

tu dois bien te douter que ce n'est pas une macro de débutant à mettre en place !

Qu'est-ce qu'on fait avec la Feuil1 ?

C'est de la feuille Data que je parlais, avec toutes les colonnes,

ne m'oblige pas à me répéter

Il faudra que les onglets soit toujours à la même place (ordre), car avec les noms à rallonge

qu'ils ont, je vais boucler sur leur N° d'emplacement, (Sheets(3);(Sheets(4);(Sheets(5) etc...

Je suppose que les onglets existent déjà ?

essaye de t'impliquer un peu +, que je n'ai pas besoin de t'arracher les renseignements,

déjà que c'est en allemand !

à te relire

Claude.

voici le classeur tel qu'il est créé par la macro que j'ai écrite

si j'ai bien compté il y a 72 feuilles (plus la DATA)

désolé pour la feuil1 du pécedent fichier c'était un bug

Les 1500 lignes seront sur la feuille DATA (grace à une macro copier coller depuis la base réelle)

Merci et désolé de l'incompréhension

re,

Avant de me lancer dans l'usine à gaz, je vais te faire une proposition:

[color=blue]

un seul onglet (DATA)

avec une liste déroulante des 36 disciplines + une liste "garçon/fille"

j'aurais le même résultat sur la feuille "DATA" filtrée sur place et en masquant les colonnes

non concernées.

+ rapide et + simple, enfin faut voir !

Si çà ne te convient pas, on reviendra aux 72 onglets

ton avis ?

Claude.

ca me parrait pas mal du tout mais il y a aussi une raison aux 72 feuilles:

j'ai besoin que cela devienne imprimable

et ce avec une mise en forme specifique (macro deja crée) et un nombre de colonne limité (5 en fait)

en fait c'est une epreuve = une page, parce qu'il y a un titre inseré en en tête chaque fois differement...

mais peut être que je fais fausse route...

Bonjour à tous,

Fichier:

https://www.excel-pratique.com/~files/doc2/Categories_Sport.xls

mais peut être que je fais fausse route...

Surement, je ne ferais pas la solution "72 onglets" !

Sur tes postes soldés, merci de remplir la petite formalité (à gauche en bas de page)

en étant connecté.

0sWJwresolu

Amicalement

Claude.

1text.xlsx (10.52 Ko)

Bonjour @ tous

J'ai mis un bon moment à essayer de comprendre la super macro de Grand Maître Dubois (et d'ailleurs j'ai pas tout compris... )

FInalement avec l'aide d'un ami j'ai réussi à écrire quelque chose de moins moche pour que ça tourne (et ça marche)

Si vous voulez je post le code.

Merci encore à tous

Théodore

Bonjour à tous,

FInalement avec l'aide d'un ami j'ai réussi à écrire quelque chose de moins moche

pour que ça tourne (et ça marche)

Vu ta réponse, j'aurais surement moins d'empressement à suivre tes futurs postes !

désolé pour le "moche"

Salutations

Claude.

Bonjour

Comme je te comprend Claude !

UltrA_KichE, ne pas comprendre un code ne veut pas dire qu'il soit "moche"

Ce que tu gagnes avec de tels propos, c'est qu'il ne va te rester que l'aide de ton ami pour tes futurs besoins.

Nad

Mais non !

On s'est mal compris ! (disons plutôt que je me suis mal exprimé).

Evidement que le code de Maître Dubois est pas "moche" il est même tellement beau qu'à mon niveau je ne comprend pas bien comment ça marche: c'est ce que j'ai voulu dire.

J'ai dit que MON code d'origine (qui n'était qu'une macro d'enregistrement puis modifiée) était MOCHE.

Et que ce que j'ai réussit à écrire (avec l'aide d'un ami, vous voyez que je ne cherche pas à m'attribuer les mérites) est donc MOINS MOCHE que ce que J'AI écrit.

Encore une fois désolé pour ce malentendu, et merci beaucoup pour vos nombreuses contributions.

PS voici le code:

Sub filtre_copypaste_by_event()

    Windows(dernierClasseur).Activate

    Dim i As Integer

    i = 7

    Do While Worksheets("DATA").Cells(1, i).Value <> ""

        Dim j As Integer
        j = 2
        Do While Worksheets("DATA").Cells(j, 1).Value <> ""

            If Worksheets("DATA").Cells(j, i).Value <> "" Then

                Dim nomDeLaFeuille As String

                If Worksheets("DATA").Cells(j, 5).Value = "G" Then
                    nomDeLaFeuille = Worksheets("DATA").Cells(j, 6).Value & "_Girls_" & Worksheets("DATA").Cells(1, i)
                Else
                    nomDeLaFeuille = Worksheets("DATA").Cells(j, 6).Value & "_Boys_" & Worksheets("DATA").Cells(1, i)
                End If

                If (Worksheets(nomDeLaFeuille).Cells(1, 1).Value = "") Then
                    Worksheets("DATA").Rows("1:1").Range("A1:F1").Copy (Worksheets(nomDeLaFeuille).Cells(1, 1))
                    Worksheets("DATA").Cells(1, i).Copy (Worksheets(nomDeLaFeuille).Cells(1, 7))
                End If

                Dim k As Integer
                k = 1
                Do While Worksheets(nomDeLaFeuille).Cells(k, 1).Value <> ""
                    k = k + 1
                Loop

                Worksheets("DATA").Cells(j, 1).Range("A1:F1").Copy (Worksheets(nomDeLaFeuille).Cells(k, 1))
                Worksheets("DATA").Cells(j, i).Copy (Worksheets(nomDeLaFeuille).Cells(k, 7))
            End If

            j = j + 1
        Loop

        i = i + 1
    Loop

    For i = 2 To ActiveWorkbook.Worksheets.Count Step 1

      If (Worksheets(i).Cells(1, 1).Value <> "") Then
        Worksheets(i).Columns("e:e").Delete Shift:=xlToLeft
        Worksheets(i).Columns("e:e").Delete Shift:=xlToLeft
        k = 1
        Do While Worksheets(i).Cells(k + 1, 1).Value <> ""
            k = k + 1
        Loop
        Worksheets(i).Cells(k + 1, 4).Value = "Total"
        Worksheets(i).Cells(k + 1, 5).Value = k - 1
      End If
    Next

    MsgBox ("Copy paste in each event COMPLETED"), vbOKOnly, "Theodore"

End Sub

Bonjour au forum,

Théodore,

Comme quoi il est bon de se relire avant de poster.

l'incident est clos !

Explications sur mon code:

1er filtre (discipline)

La variable "CL" indique le N° de colonne correspondant au choix de la liste "Discipline"

CL = [MATCH(g2,h5:ar5,0)] + 7

ensuite, sur la ligne 4 (ligne de critères) j'écris >"0" pour filtrer cette colonne

Cells(4, CL).Formula = ">""0"""

2ème filtre (fille/garçon)

même principe, en F4: formule = F2 (liste) B ou G

ce 2ème filtre est indépendant du 1er et activé par:

Private Sub Worksheet_Change(ByVal Target As Excel.Range)
    If Not Application.Intersect(Target, Range("f2")) Is Nothing Then
        Call Filtre
    End If
End Sub

Voilou, c'est quand même autre chose que les 72 onglets prévus d'origine !

Amicalement

Claude.

Merci pour les explications.

Encore désolé pour le malentendu.

En tout cas ma chef est contente avec ces quarante-douze pages qu'on peut imprimer (la déforestation çay mal xD) parce que pour elle, vérifier, c'est forcément sur papier...

Encore merci pour ton aide

Théodore

re,

N'oublie pas la petite formalité,

en bas à gauche et en étant connecté

WKwECresolu

à+.... Claude.

Rechercher des sujets similaires à "trier recopier"