Copier des lignes automatiquement dans une autre feuille

cool excellent, merci bon appétit chez moi c'est l'heure du goûter

je voudrais tout simplement rajouter à ta macro Inserlignes : mettre dans la première ligne insérée sous chaque nom en colonne J, le total des lignes "andré", "Charles" etc, sachant que le nombre de lignes va augmenter. J'ai cherché cherché, testé pleins de bouts de codes piochés sur différents forums

mais je ne suis vraiment vraiment pas experte, je n'arrive pas ou cela ne fait pas complètement ce que je veux. Ce n'est vraiment pas pour moi les macros

du coup quelqu'un peut m'aider a faire ma macro somme ?

bien entendu quand vous aurez un petit temps à m'accorder, je vais encore chercher sur les forums

mille merci

Bonjour,

Est-ce-que ton Chevalier servant ... est parti vers d'autres conquêtes ... en t'abandonnant ...

non, non, je suis là ; j'ai quelques petites chose à terminer, puis je me remets sur le dossier !

Oui james, vous m'avez tous les deux abandonnés

A mon grand désarroi, j'attend le retour de l'un ou de l'autre

dhanny a l'air "au taquet", j'attends avec impatience son prochain mail

car c'est du chinois pour moi les macros (sauf deux toutes petites que j'ai réussi )

Et pour le final et qui clôturera nos aventures malheureusement, mais mon fichier sera terminé, j'aurai besoin de ton aide james ... c'est une modification de ta parfaite macro avec une autre condition

VALOUB a écrit :

je voudrais tout simplement rajouter à la macro InsertLignes : mettre dans la première ligne insérée sous chaque nom en colonne J,

le total des lignes "André", "Charles" etc, sachant que le nombre de lignes va augmenter.

Je te propose le fichier Excel ci-dessous ; fais Ctrl e ; ça marche uniquement si tu lances cette nouvelle macro

à partir de la feuille "VENTES", et c'est indépendant de la sub InsertLignes() ; alors, c'est ok ?

J'ai d'nouveau faim, alors j'retourne manger ; bon appétit !

coucou tu as encore faim ?

Je viens d'essayer, tu fais du bon travail, je te remercie du temps que tu m'accordes

quand je fais contrôle e je vois le total apparaître dans une petite case et disparaitre, il ne peut pas se mettre en colonne J dans une des premières lignes insérées ?


mince j'ai lu trop vite ton mail, il n'y a donc pas de solutions ?

Ah ben c'est sûr, j'ai encore faim ! et même drôlement !!! j'ai rien mangé depuis c'matin pour faire plein d'choses urgentes

puis ensuite faire ton exo ! j'allais partir manger quand j'ai vu ton message ; j'pensais pas qu't'allais m'répondre aussi

vite !!! au secours !!! tu m'laisses pas le temps d'souffler, ni même d'aller manger !!!


Tu a écrit :

Je viens d'essayer, tu fais du bon travail, je te remercie du temps que tu m'accordes

Merci pour le retour ! ; et pour le temps, y'a pas d'quoi (même si j'meurs d'inanition )


Tu a écrit :

quand je fais contrôle e je vois le total apparaître dans une petite case et disparaître

La « petite case » s'appelle une « boîte de dialogue » (ou MsgBox) et il n'y a aucune raison pour qu'elle disparaisse d'elle-même :

il faut pour cela que tu valides le message : clic sur le bouton OK ; ou appui sur Entrée ou sur barre d'espace ; tu peux aussi

appuyer sur la touche Echap ; tu peux voir plus bas une copie d'écran avec la MsgBox ouverte, et elle est bien toujours là

tant que j'fais pas une des actions décrites précédemment.


il ne peut pas se mettre en colonne J dans une des premières lignes insérées ?

Laisse-moi aller manger, stp, et j'verrai ça après l'repas ; tu vois, j'ai une patience d'ange :

(normal, j'suis Simon Templar, alias Le Saint )

screen

merci, bon appétit, reprends des forces tu vas en avoir besoin avec mes questions "nazes"

donc tu penses qu'il n'y a pas de solution ? que la boite de dialogue qui fonctionne très bien, j'ai du buger !

ça ne peut pas fonctionner avec la macro interligne ? "insérer interligne entre chaque nom différents" et y mettre la somme des lignes dans la colonne J " , pas possible ? dans votre super langage codé ?

Bonjour le fil

Pour information la procédure actuelle (juste la phase calcul/transfert) sans les tris prend environ 3 minutes !

Je viens de découvrir le post, avec une méthode optimisée j'obtiens pour le même traitement 1 seconde et quelques centièmes !

Comme quoi Excel peut être rapide !

(..)

Avec tri VBA (Tri à Bulle non optimisé) 2 secondes et toujours quelques centièmes !

(..)

Avec comptage et saut de lignes au changement de nom : 2 secondes 22 centièmes !

Ce n'est pas l'outil qui compte, c'est la méthode !

bonjour, bienvenue sur le post très animé et joyeux

tu peux expliquer ?

Bonjour VALOUB,

Bonne nouvelle, tout est réglé !

À l'ouverture du fichier, tu seras sur la feuille "VENTES" ;

regarde bien que la colonne J est vide ; Ctrl e ; vu ?

Si tu passes à une autre feuille puis que tu reviens

sur la feuille "VENTES" : idem.

Alors, heureuse ?

Amicalement

bonjour dhanny,

Heureuse, heureuse, tu es formidable, tu as travaille pour moi cette nuit ?

génial, c'est ce que je voulais

C'est votre métier ? à toi et à James ?

en tout cas, c'est remarquable que vous aidiez les gens sur ce forum, sans vous ......

le bénévolat ça prend du temps, j'en fait également partie (mais pas dans l'informatique )

mais c'est une joie.

Dhanny, James007 : une macro finale et je vous laisse tranquille malheureusement c'était sympa

A moins que vous m'expliquiez comment faire, dans une nouvelle feuille après ventes (prendre le module 1 et le modifier : extraire les lignes avec date en H mais qui n'on pas de dates en I)

Bonjour VALOUB, le fil

VALOUB a écrit :

bonjour, bienvenue sur le post très animé et joyeuxtu peux expliquer ?

Evidemment j'explique. J'ai utilisé des tableaux VBA (donc uniquement en mémoire) aucun traitement sur les feuilles de calculs avant que tout ne soit terminé

Démonstration par le code

' Cette structure pour décrire les onglets "RDV"
Public Type typRdv
    nom         As String
    ligFin      As Long
    colFin      As Long
    tabBase     As Variant
End Type

' Dans le fichier actuel il y a 2 onglets RDV
Public Const nbrRdv = 2

' Tableau qui contiendra les elements de chaque onglet
Public tabRdv(1 To nbrRdv) As typRdv

' Nouvelle Extraction
Sub NewExtract()
Dim cptRdv              ' Compteur de Rdv
Dim cptLig, cptCol      ' Compteur des lignes et colonnes
Dim tabRest()           ' Le tableau qui sera restitué comme résultat
Dim nbrLig              ' Nombre de ligne dans le tableau résultat
Dim ligFin              ' Dernière ligne de l'onglet VENTES

Dim tpsStart, tpsFinal  ' Pour afficher les temps de traitement

    tpsStart = Timer        ' Temps de départ

    InitRdv "rdv 2016", 1   ' Intégrer en mémoire les rdv 2016
    InitRdv "rdv 2017", 2   ' idem pour 2017

    ' Au depart 0 ligne
    nbrLig = 0
    ' Pour le nombre de rdv connu
    For cptRdv = 1 To nbrRdv
        ' Pour chaque onglet de rdv
        With tabRdv(cptRdv)
            ' Pour le nombre de lignes de chaque rdv
            For cptLig = 1 To .ligFin - 1
                ' Si la date "n'est pas vide"
                If Not (.tabBase(cptLig, 9) = "") And Not (.tabBase(cptLig, 9) = "-") Then
                    ' Ajouter une ligne au tableau resultat
                    nbrLig = nbrLig + 1
                    ' Redimensionner le tableau resultat
                    ' =>    Attention pour pouvoir être redimensionné ce tableau est à l'envers !
                    ' =>    Il y a une colonne de plus pour intégrer directement le comptage et permettre le tri
                    '       tout cela en mémoire
                    ReDim Preserve tabRest(1 To .colFin + 1, 1 To nbrLig)
                    ' Pour toutes les colonnes connues
                    For cptCol = 1 To .colFin
                        ' Le tableau résultat = le tableau de base
                        tabRest(cptCol, nbrLig) = .tabBase(cptLig, cptCol)
                    Next
                    ' Intégration d'une clef pour permettre le tri (NOM + DATE inversée)
                    tabRest(cptCol, nbrLig) = .tabBase(cptLig, 1) & Format(.tabBase(cptLig, 8), "YYYYMMDD")
                End If
            Next
        End With
    Next

    ' Trier le tableau résultat et le découper ensuite (saut de ligne au changement de nom
    tabRest = DecouperRdv(TrierRdv(tabRest))

    ' Dans l'onglet VENTES
    With Worksheets("VENTES")
        ' Chercher la dernière ligne pour effacer les anciennes données
        ligFin = .Cells(Rows.Count, 1).End(xlUp).Row
        Range(.Cells(2, 1), .Cells(IIf(ligFin > 1, ligFin, 2), 10)).ClearContents
        ' Copîer le tableau résultat
        .Cells(2, 1).Resize(UBound(tabRest, 1), UBound(tabRest, 2)) = tabRest
    End With

    ' Calculer et afficher le temps d'exécution
    tpsFinal = Timer - tpsStart
    MsgBox tpsFinal

End Sub

Function DecouperRdv(tablo)
Dim tabTemp()           ' Tableau temporaire
Dim cptLig, cptCol      ' Compteur de lignes et colonnes
Dim cliRef              ' Le client de reference pour pouvoiur faire les sauts de ligne
Dim nbrLig              ' nouveau nombre de ligne du tableau découpé
Dim cptTot              ' pour calculer directement snas passer par des formules

    ' au départ une seule ligne
    nbrLig = 1
    ' prendre en compte le premier client
    cliRef = tablo(1, 1)
    ' redimensionner le tableau temporaire et intégrer tds la 1ère ligne
    ' =>    Attention ce tableau est à l'envers pour permettre de le rendre dynamique
    ReDim tabTemp(1 To UBound(tablo, 1), 1 To nbrLig)
    For cptCol = 1 To UBound(tablo, 1)
        tabTemp(cptCol, 1) = tablo(cptCol, 1)
    Next

    ' Le compteur est à 1 au début pour permettre le comptage de la 1ère ligne
    cptTot = 1

    ' Pour chaque ligne (à partir de la 2ème puisque la 1ère sert de comparaison)
    For cptLig = 2 To UBound(tablo, 2)
        ' Si la ligne en cours est différente de la clef
        If Not (tablo(1, cptLig) = cliRef) Then
            ' Initialiser cette ligne comme étant la clef suivante
            cliRef = tablo(1, cptLig)
            ' Intégrer tds le comptage
            tabTemp(UBound(tabTemp, 1), nbrLig) = cptTot
            ' Remettre le compteur à 0 (zero)
            cptTot = 0
            ' AJouter une ligne (vide) dans le tableau pour faire les saut entre chaque nom
            nbrLig = nbrLig + 1
            ReDim Preserve tabTemp(1 To UBound(tabTemp, 1), 1 To nbrLig)
            For cptCol = 1 To UBound(tabTemp, 1)
                tabTemp(cptCol, nbrLig) = ""
            Next
        End If
        ' Ajouter une ligne
        nbrLig = nbrLig + 1
        ReDim Preserve tabTemp(1 To UBound(tabTemp, 1), 1 To nbrLig)
        ' Copier les informations de la ligne en cours
        For cptCol = 1 To UBound(tabTemp, 1)
            tabTemp(cptCol, nbrLig) = IIf(cptCol = UBound(tabTemp), "", tablo(cptCol, cptLig))
        Next
        ' et 1 de plus
        cptTot = cptTot + 1
    Next

    ' En profiter pour remettre le tableau dans le bon sens
    DecouperRdv = WorksheetFunction.Transpose(tabTemp)

End Function

Function TrierRdv(tablo)
Dim cptAct, cptTri
Dim cptCol
Dim bidon

    For cptAct = 1 To UBound(tablo, 2)
        For cptTri = cptAct To UBound(tablo, 2)
            If tablo(UBound(tablo, 1), cptAct) > tablo(UBound(tablo, 1), cptTri) Then
                For cptCol = 1 To UBound(tablo, 1)
                    bidon = tablo(cptCol, cptAct)
                    tablo(cptCol, cptAct) = tablo(cptCol, cptTri)
                    tablo(cptCol, cptTri) = bidon
                Next
            End If
        Next
    Next

    TrierRdv = tablo

End Function

Sub InitRdv(nomRdv, numRdv)

    With Worksheets(nomRdv)
        tabRdv(numRdv).nom = nomRdv
        tabRdv(numRdv).ligFin = .Cells(Rows.Count, 1).End(xlUp).Row
        tabRdv(numRdv).colFin = .Cells(1, Columns.Count).End(xlToLeft).Column
        tabRdv(numRdv).tabBase = Range(.Cells(2, 1), .Cells(tabRdv(numRdv).ligFin, tabRdv(numRdv).colFin))
    End With

End Sub

Bonjour à tous,

Si je comprends bien ... tout a été repris à Zéro ...

Bonjour James007,

Je te laisse lire mon message de 10:01 et la réponse de VALOUB de 10:31 :

c'est ok pour ce qu'elle demandait concernant les Stats : une macro que j'ai

ajoutée en plus des autres ; elle peut être appelée par l'utilisateur via Ctrl e

et elle est aussi appelée automatiquement par le code la feuille.

Je vais aller d'abord faire une longue pause avant de voir sa nouvelle demande,

puis je lui répondrai ; mais si tu veux continuer toi-même ta macro Extract(),

je t'en prie...

Cordialement

merci dhanny, ta macro fonctionne parfaitement à l'ouverture

j'ai même réussi à l'adapter à mon vrai fichier, miracle mais ce n'était pas très compliqué tu as fait tout le travail

je n'ai eu qu'un petit changement à faire

voilà...... , il ne reste plus qu'une dernière macro et plus de messages de ma part sur ce forum,

ça va être triste mais reposant pour vous

rebonjour,

Je crois qu'il va falloir que je demande une formation excel parce que là, ça me dépasse...

je suis en train de lire le cours sur le site (je ferai un entraînement ce week end)

ce qui est simple pour vous n'est pas forcément pour moi, suis novice


c'était pour NCC 1701

Rechercher des sujets similaires à "copier lignes automatiquement feuille"