élément de bd triée par onglet
#1
Aspirant XLPages

Inscription: 20/04/2010

Messages: 28

Système d'exploitation:
PC
Version Excel utilisée:
2007
Posté le : 09-05-2010 21h12
 Bonsoir le Forum,

je souhaite à partir de ma macro "enregistrement" renseigner d'une part une base de données(ça c'est ok) et ensuite faire le tri par tour et le coller dans l'onglet correspondant.

merci de jeter un oeil sur le fichier joint qui sera j'espère plus parlant.

cordialement

wilplan


Pièce jointe:
xlsm locsam.xlsm   [ Taille: 23.43 Ko - Téléchargements: 423 ]
Hors Ligne
Rapport   Haut 

Re: élément de bd triée par onglet
#2
Webmestre

Inscription: 18/05/2006
De Saône-et-Loire (71)

Messages: 1539

Système d'exploitation:
PC
Version Excel utilisée:
97, 2000, 2002, 2003, 2007, 2010, 2013, 2016 et 365
Posté le : 09-05-2010 22h30
Bonsoir wilplan et bienvenue sur XLpages.com
Bonsoir le Forum,

Questions :
  • Le traitement doit-il être réalisé à la suite de ta macro (évènement déclencheur : clic sur bouton "enregistrement") ? Dans ce cas, ça signifie donc qu'on ne traite qu'une ligne à la fois ?
  • "de b5 à f5" : pourquoi en ligne 5 ? A l'occurrence suivante, ligne 6 et ainsi de suite ?

Cordialement,

Didier_mDF
Image redimensionnée
Le Webmaster

La réponse vous satisfait ? Merci de revenir solder le sujet en [résolu], voir ce lien
Hors Ligne
Rapport   Haut 

Re: élément de bd triée par onglet
#3
Accro XLPages

Inscription: 23/05/2008
De La Varenne Saint-Hilaire

Messages: 356

Système d'exploitation:
PC
Version Excel utilisée:
2010
Posté le : 10-05-2010 02h00
Bonsoir myDearFriend, wilplan

Ca sera effectivement plus clair quand tu auras pris soin de répondre aux questions posées par myDearFriend.

En attendant voici un premier jet avec ce que j'ai compris, c'est à dire en supposant que la macro était indépendante de la première, et que les enregistrements étaient copiés dans les onglets les uns à la suite des autres ... ?

J'ai mis les explications dans le code (en vert):
Sub trfonglet()

Dim i As Long, lig As Long, j As Long, exist As Long
Dim sh As Variant, Feuille As Worksheet

'Pour ne pas doublonner par erreur, efface le contenu des onglets autres
' que "bd" et "enregistrement" de la ligne 5 à la fin

For Each Feuille In ThisWorkbook.Worksheets
    If Feuille.Name <> "bd" And Feuille.Name <> "enregistrement" Then
        'Sélectionne de la ligne 5 à la dernière ligne remplie et efface le contenu
        Feuille.Range("A5").CurrentRegion.ClearContents
    End If
Next

'Trouve la dernière ligne remplie de la colonne B de l'onglet "bd"
lig = Sheets("bd").Range("B65536").End(xlUp).Row

'Boucle, de ligne 2 à ce numéro de ligne
For i = 2 To lig + 1
    ' le nom de l'onglet est le nom figurant dans la cellule traitée (B2, B3, etc ...)
    sh = Sheets("bd").Range("B" & i)
        'si cellule vide, on passe au suivant en allant directement à "Suite"
        If sh = "" Then GoTo suite
            'teste si l'onglet existe, en mettant une variable exist à zéro, puis ajoute 1 si l'onglet est trouvé
            'boucle sur tous les onglets du fichier
            exist = 0
                For j = 1 To Sheets.Count
                    If Sheets(j).Name = sh Then exist = exist + 1
                Next j
                If exist = 0 Then GoTo suite
           
        'Si cellule non vide, on copie la ligne i; dans l'onglet "bd", première ligne vide
        '(en partant du bas et en remontant jusqu'à première cellule vide colonne A)
        Sheets("bd").Range("A1:F1").Copy Sheets(sh).Range("A5:F5")
        Sheets("bd").Rows(i).Copy Sheets(sh).Range("A65536").End(xlUp).Offset(1, 0)
suite: i = i
Next i

End Sub
 

avec ton fichier en PJ.
Bien sûr, on doit pouvoir écrire bien mieux que ça (souvent fachée avec le VBA moi ) mais cela peut peut-être te donner un premier éclairage.

Bien à toi,

Mth
Pièce jointe:
zip locsam2.zip   [ Taille: 23.27 Ko - Téléchargements: 471 ]
Hors Ligne
Rapport   Haut 

Re: élément de bd triée par onglet
#4
Aspirant XLPages

Inscription: 20/04/2010

Messages: 28

Système d'exploitation:
PC
Version Excel utilisée:
2007
Posté le : 10-05-2010 06h49
Bonjour myDearFriend, Mth, le forum


Je vais essayer d'être plus clair et de ne plus me tromper.

pour les deux interrogations de myDearFriend:
  • je souhaiterai que le tri soit réalisé après avoir cliqué sur le bouton "enregistrement".
  • quand je parlais de b5 à f5, déjà j'aurai du dire b6 à f6, car j'avais rajouté un enregistrement sans apporter de correctif à mon explication,désolé. Je voulais simplement qu'à partir d'A1 dans les onglets correspondant, s'affiche les lignes sans la clé 

Merci Mth pour ton travail qui est proche de ce que je recherche et tes explications toujours aussi précises. 

je vous souhaite une bonne journée 




Hors Ligne
Rapport   Haut 

Re: élément de bd triée par onglet
#5
Webmestre

Inscription: 18/05/2006
De Saône-et-Loire (71)

Messages: 1539

Système d'exploitation:
PC
Version Excel utilisée:
97, 2000, 2002, 2003, 2007, 2010, 2013, 2016 et 365
Posté le : 10-05-2010 10h09
Bonjour Wilplan, Mth, le Forum,

Tout d'abord, bravo à Mth qui commence à maitriser "VBA" comme elle maitrise déjà le côté "formule" Excel. Belle polyvalence que beaucoup vont jalouser (et moi le premier ! ).

Si j'ai bien compris le problème (pas sûr cela dit encore), tu trouveras en pièce jointe mon interprétation de la situation.

J'ai utilisé le code ci-dessous en lieu et place du tien :
Option Explicit

Sub Enregistrement()
'myDearFriend!  -  www.mdf-xlpages.com
Dim Fcible As Worksheet
Dim Rcible As Range
Dim NomCible As String
Dim L As Long
    'Vérifie d'abord si l'onglet correspondant à "Tour" existe bien
    NomCible = Cells(5, 4).Value
    On Error Resume Next
    Set Fcible = Sheets(NomCible)
    On Error GoTo 0
   
    'Si l'onglet n'existe pas : on quitte
    If Fcible Is Nothing Then
        MsgBox "L'onglet " & NomCible & " n'existe pas !"
        Exit Sub
    End If
    'Si l'onglet existe...
   
    'Maj onglet "bd"
    With Sheets("bd")
        .Rows(2).Insert
        .Cells(2, 1).Value = Application.Max(.Columns(1)) + 1
        .Cells(2, 2).Value = Cells(5, 4).Value
        .Cells(2, 3).Value = Cells(7, 4).Value
        .Cells(2, 4).Value = Cells(9, 4).Value
        .Cells(2, 5).Value = Cells(11, 4).Value
        .Cells(2, 6).Value = Cells(11, 5).Value
        'on copie les données récoltées
        Set Rcible = .Range("B2:F2")
    End With
   
    'Maj onglet cible
    With Fcible
        'Quelle est la prochaine ligne libre dans l'onglet cible ?
        L = .Cells(.Rows.Count, 1).End(xlUp).Row + 1
        'Maj ligne
        .Range(.Cells(L, 1), .Cells(L, 5)).Value = Rcible.Value
    End With
   
    'RAZ zone de saisie
    Range("D5:E11").ClearContents
    MsgBox "Enregistrement réalisé !"
End Sub

Cordialement,

Nb: je me suis également permis de convertir ton classeur au format .xls, compatible aux versions Excel antérieures à 2007, afin de permettre l'accès au plus grand nombre de visiteurs intéressés.

Pièce jointe:
zip PourWilplan.zip   [ Taille: 21.44 Ko - Téléchargements: 404 ]

Didier_mDF
Image redimensionnée
Le Webmaster

La réponse vous satisfait ? Merci de revenir solder le sujet en [résolu], voir ce lien
Hors Ligne
Rapport   Haut 

Re: élément de bd triée par onglet
#6
Aspirant XLPages

Inscription: 20/04/2010

Messages: 28

Système d'exploitation:
PC
Version Excel utilisée:
2007
Posté le : 10-05-2010 15h32
Re Bonjour myDearFriend, le forum,

 Quel talent! c'est exactement ce que je recherchais.

Mon problème est maintenant résolu, mais je vais devoir m'employer à comprendre le code Vba . C'est de l'Hébreu, non!!

Encore une petite question pour clore ce fil, et commencer à comprendre, Pourquoi je ne vois pas la macro s'exécuter lorsque je la lance par le bouton enregistrement?
Je ne vois rien dans le code vba qui puisse figer l'écran pendant sa réalisation. 

Merci et à bientôt

Cordialement,

Wilplan


Hors Ligne
Rapport   Haut 

Re: élément de bd triée par onglet
#7
Webmestre

Inscription: 18/05/2006
De Saône-et-Loire (71)

Messages: 1539

Système d'exploitation:
PC
Version Excel utilisée:
97, 2000, 2002, 2003, 2007, 2010, 2013, 2016 et 365
Posté le : 10-05-2010 16h40
Re,

Citation :
wilplan a écrit :
Pourquoi je ne vois pas la macro s'exécuter lorsque je la lance par le bouton enregistrement?
Je ne vois rien dans le code vba qui puisse figer l'écran pendant sa réalisation.

Figer l'écran (à l'aide de la propriété ScreenUpdating en particulier), c'est bien, mais souvent c'est utilisé comme un cache-misère...

Avant tout, on ne le répètera jamais assez dans les forums, en VBA tu n'as pas besoin de faire de Select de feuilles, plages ou cellules pour pouvoir agir dessus.

Par exemple, plutôt que :
   Sheets("bd").Select
    Rows("2:2").Select
    Selection.Insert Shift:=xlDown

Il conviendrait d'écrire simplement :
   Sheets("bd").Rows("2:2").Insert Shift:=xlDown

Que tu peux même ensuite simplifier encore par :
   Sheets("bd").Rows(2).Insert

En t'affranchissant des Select :
  • tu gagnes en rapidité d'exécution puisque VBA n'a plus besoin de gérer l'affichage de la sélection (ce qui évite aussi le clignotement désagréable de l'écran quand ton programme s'exécute).
  • tu évites le déclenchement inopiné d'évènements comme Worksheet_SelectionChange() qui, dans des projets plus étoffés peuvent semer le bazar dans ton programme.
  • tu optimises ton code et le rends plus léger, plus fluide et invisible pour l'utilisateur.

Le réflexe a adopter donc :


N'hésite pas si tu as besoin d'explications supplémentaires.

Cordialement,

Didier_mDF
Image redimensionnée
Le Webmaster

La réponse vous satisfait ? Merci de revenir solder le sujet en [résolu], voir ce lien
Hors Ligne
Rapport   Haut 

Re: élément de bd triée par onglet
#8
Aspirant XLPages

Inscription: 20/04/2010

Messages: 28

Système d'exploitation:
PC
Version Excel utilisée:
2007
Posté le : 10-05-2010 21h32
 Un grand Merci myDearFriend pour la qualité de tes réponses
 Salutations XLDiennes

Wilplan
Hors Ligne
Rapport   Haut 


Vous pouvez voir les sujets.
Vous ne pouvez pas débuter de nouveaux sujets.
Vous ne pouvez pas répondre aux contributions.
Vous ne pouvez pas éditer vos contributions.
Vous ne pouvez pas effacez vos contributions.
Vous ne pouvez pas ajouter de nouveaux sondages.
Vous ne pouvez pas voter en sondage.
Vous ne pouvez pas attacher des fichiers à vos contributions.
Vous ne pouvez pas poster sans approbation.

[Recherche avancée]


Qui consulte actuellement ce sujet ?   1 Utilisateur(s) anonymes