Excel script pour ouvrir un fichier et filtrer les données en fonction de la val

Fermé
Druddy Messages postés 34 Date d'inscription samedi 29 mai 2021 Statut Membre Dernière intervention 29 mars 2023 - 28 sept. 2021 à 11:00
Druddy Messages postés 34 Date d'inscription samedi 29 mai 2021 Statut Membre Dernière intervention 29 mars 2023 - 30 sept. 2021 à 13:49
Bonjour,

J'ai un fichier Excel base de données (Baseline avec des lignes par site XXX-YY) et un autre fichier (Sites avec d'autres informations) avec plusieurs onglets de sites (XXX-YY).
J'aimerais, dans l'onglet du fichier Site, un bouton lié à un script qui ouvre le fichier Baseline et n'affiche que les lignes liées à la valeur du site concerné par l'onglet (XXX-YY).

Pouvez-vous me dire si cela est réalisable ou bien me donner une autre approche ?

Je vous remercie par avance,


Configuration: Windows / Edge 93.0.961.52
A voir également:

5 réponses

yg_be Messages postés 23341 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 21 novembre 2024 Ambassadeur 1 551
28 sept. 2021 à 11:46
bonjour,
je pense qu'avec du travail, tu pourras réaliser cela.
0
Druddy Messages postés 34 Date d'inscription samedi 29 mai 2021 Statut Membre Dernière intervention 29 mars 2023
Modifié le 28 sept. 2021 à 18:50
Bonjour,

Est-ce que la solution de ventilation de données est une bonne approche ?

Merci
0
yg_be Messages postés 23341 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 21 novembre 2024 1 551
28 sept. 2021 à 20:56
peux-tu montrer le code ventilant?
0
Druddy Messages postés 34 Date d'inscription samedi 29 mai 2021 Statut Membre Dernière intervention 29 mars 2023
29 sept. 2021 à 19:28
Bonjour,

Je me suis inspiré du tuto : https://www.youtube.com/watch?v=uWjTidviHis

Dim j As Integer
Dim LastRow As Integer
Dim DerniereLigne As Integer



Sub ventilation()

    Application.ScreenUpdating = False

    'Boucle permettent de lire toutes les feuilles du classeur (5 dans notre exemple)'
    For j = 1 To 5

        Sheets(j).Select
        LastRow = Range("A10000").End(xlUp).Row
        For i = LastRow To 6 Step -1  'Parcourir les lignes en remontant vers le haut sauf titre'
            Sheets(j).Select
            Rows(i).Select
            Selection.Delete shift:=xlUp
        Next i

        Sheets("BASELINE").Select
        DerniereLigne = Range("A10000").End(xlUp).Row
        
        For k = 6 To DerniereLigne

            Sheets("BASELINE").Select
            If Sheets(j).Name = Cells(k, 8).Value Then

                Rows(k).Select
                Selection.Copy

                Sheets(j).Select
                LastRow = Range("A10000").End(xlUp).Row + 1
                Cells(LastRow, 1).Select
                ActiveSheet.Paste
            End If
        Next k

    Next j

    Sheets("BASELINE").Select
    Application.CutCopyMode = False
    Application.ScreenUpdating = True

End Sub

0
Druddy Messages postés 34 Date d'inscription samedi 29 mai 2021 Statut Membre Dernière intervention 29 mars 2023
29 sept. 2021 à 19:33
Bonjour,

Pourtant en faisant à l'identique, j'ai une erreur : 400.
Je ne sais pas comment envoyer mon fichier pour voir l'erreur.

Merci
0
yg_be Messages postés 23341 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 21 novembre 2024 1 551 > Druddy Messages postés 34 Date d'inscription samedi 29 mai 2021 Statut Membre Dernière intervention 29 mars 2023
29 sept. 2021 à 22:35
avant d'envoyer le fichier, précise le texte du message d'erreur, ainsi que la ligne concernée.
0
Druddy Messages postés 34 Date d'inscription samedi 29 mai 2021 Statut Membre Dernière intervention 29 mars 2023 > yg_be Messages postés 23341 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 21 novembre 2024
Modifié le 30 sept. 2021 à 09:12
Bonjour,

Je n'ai rien que l'information 400 et pas de ligne indiquée :
"Erreur d'execution '1004': Erreur définie par l'application ou par l'objet.
0
yg_be Messages postés 23341 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 21 novembre 2024 1 551 > Druddy Messages postés 34 Date d'inscription samedi 29 mai 2021 Statut Membre Dernière intervention 29 mars 2023
30 sept. 2021 à 10:36
ne peux-tu pas choisir "degug" quand tu reçois le message d'erreur? ne vois-tu pas ensuite une ligne de code surlignée?
0
Druddy Messages postés 34 Date d'inscription samedi 29 mai 2021 Statut Membre Dernière intervention 29 mars 2023
30 sept. 2021 à 10:49
Hélas non quand je sélectionne Debug il n'y a pas de ligne en jaune qui apparait.

Ceci dit j'ai trouvé un autre code que j'ai adapté.
Il fait presque bien le boulot car il me copie toutes les données dans les onglets mais toutes pas celles qui ne devraient être dans l'onglet approprié (par Site code : image jointe de la source).
S'il n'y a que les données dans l'onglet associé au site code, c'est gagné !!!

Mais là je pèche.



Option Explicit
'**************************************************************************************************
' NAME : Ventiler (PROCESS)
' DESCRIPTION : A partir d'une liste de Site, le processus va répartir les
' différentes lignes dans les feuilles associées (La jonction se fait par le
' nom de la feuille)
'**************************************************************************************************
Public Sub Ventiler()
 
    Dim oSheetData   As Excel.Worksheet  'Feuille avec le nom du site
    Dim oRangeData   As Excel.Range      'Plage des cellules à copier
    Dim oListSite As Object              'Liste des sites à exporter
    Dim oCellSite As Object              'Cellule du Site actif
    Dim oTestSite As Object              'Liste des Sites déjà testé
    Dim iLastRow     As Integer          'dernière ligne de la colonne 8 (feuille Source)
    Dim iFirstRow    As Integer          'Ligne des entêtes (feuille Source)
    Dim iLastColumn  As Integer          'Dernière colonne non vide sur la ligne des entêtes
    Dim iFirstColumn As Integer          'Première colonne à exporter
    Dim iNumberRow   As Integer          'Nombre de ligne à exporter
 
    Application.ScreenUpdating = False
 
    'Paramétrage
    iFirstRow = 5 ' Saisir la ligne de tes en-têtes
    iFirstColumn = 1 'Saisir la première colonne de copie
 
    Set oTestSite = VBA.CreateObject("Scripting.Dictionary")
 
    With Worksheets("Source")
  
        If .FilterMode Then 'Si il y a un filtre d'activer
            .ShowAllData
        End If
  
        'Calcul de la plage
        iLastRow = .Cells(65000, 8).End(xlUp).Row
        iLastColumn = .Cells(iFirstRow, 255).End(xlToLeft).Column
 
        'Fixation de la plage
        Set oListSite = .Range(.Cells(iFirstRow + 1, 8), .Cells(iLastRow, 8))
 
        For Each oCellSite In oListSite
 
            If Not oTestSite.Exists(oCellSite.Value) Then
                oTestSite(oCellSite.Value) = Empty
 
                'On initialise la feuille de destination
                On Error Resume Next
                Set oSheetData = Worksheets(CStr(oCellSite))
                'Si elle n'existe pas on la créé
                If oSheetData Is Nothing Then
                    Set oSheetData = Sheets.Add(After:=Sheets(Sheets.Count))
                    oSheetData.Name = oCellSite
                End If
 
                'Application du filtre
                .Range(iFirstRow & ":" & iFirstRow).AutoFilter 8, oCellSite
 
                'Fixation de la plage à exporter
                Set oRangeData = .Range(.Cells(iFirstRow, iFirstColumn), _
                                 .Cells(iLastRow, iLastColumn)).SpecialCells(xlCellTypeVisible)
 
                oRangeData.Copy 'Copie des données
 
                'On récupère le nombre de ligne à exporter
                iNumberRow = oRangeData.Rows.Count
 
                'Insertion des lignes dans la nouvelle feuille
                oSheetData.Rows("6:" & 6 + iNumberRow).Insert Shift:=xlDown, CopyOrigin:=xlFormatFromLeftOrAbove
 
                Set oSheetData = Nothing
                Set oRangeData = Nothing
 
            End If
 
        Next oCellSite
 
        .ShowAllData
 
        Set oListSite = Nothing
        Set oTestSite = Nothing
 
    End With
 
End Sub
0
Druddy Messages postés 34 Date d'inscription samedi 29 mai 2021 Statut Membre Dernière intervention 29 mars 2023
Modifié le 30 sept. 2021 à 10:53
Oups j'ai oublié : le RAZ des données précédentes avec entête sinon il ajoute.
0
yg_be Messages postés 23341 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 21 novembre 2024 1 551
30 sept. 2021 à 11:11
c'est bizarre, tu mentionnes "copier", alors qu'au départ tu mentionnais uniquement "afficher".
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Druddy Messages postés 34 Date d'inscription samedi 29 mai 2021 Statut Membre Dernière intervention 29 mars 2023
30 sept. 2021 à 13:49
En effet, une erreur de ma part, je veux copier les informations par site dans l'onglet qui lui est assigné.
0