Excel script pour ouvrir un fichier et filtrer les données en fonction de la val
Druddy
Messages postés
34
Date d'inscription
Statut
Membre
Dernière intervention
-
Druddy Messages postés 34 Date d'inscription Statut Membre Dernière intervention -
Druddy Messages postés 34 Date d'inscription Statut Membre Dernière intervention -
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,
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:
- Excel script pour ouvrir un fichier et filtrer les données en fonction de la val
- Comment ouvrir un fichier epub ? - Guide
- Comment ouvrir un fichier bin ? - Guide
- Comment réduire la taille d'un fichier - Guide
- Fonction si et - Guide
- Ouvrir un fichier .dat - Guide
5 réponses
yg_be
Messages postés
23541
Date d'inscription
Statut
Contributeur
Dernière intervention
Ambassadeur
1 584
bonjour,
je pense qu'avec du travail, tu pourras réaliser cela.
je pense qu'avec du travail, tu pourras réaliser cela.
Bonjour,
Je me suis inspiré du tuto : https://www.youtube.com/watch?v=uWjTidviHis
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
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.

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
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question