Excel script pour ouvrir un fichier et filtrer les données en fonction de la val
Druddy
Messages postés
34
Statut
Membre
-
Druddy Messages postés 34 Statut Membre -
Druddy Messages postés 34 Statut Membre -
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
- Ouvrir un fichier .dat - Guide
- Comment ouvrir un fichier docx ? - Guide
5 réponses
yg_be
Messages postés
24281
Date d'inscription
Statut
Contributeur
Dernière intervention
Ambassadeur
1 585
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