Bonsoir forum ,
je reviens vers vous pour m'aider à ajouter une petite correction a ce code qui a pour objectif de découper une base selon les pays , en fichier excel le code fonctionne mais la largeur des colonnes du résultat ne s'adapte pas au contenu , ou au moins garde la même largeur de la base global j’espère avoir bien expliquer le problème
merci pour tout retour de vos parts
Option Explicit
Sub decouper_dans_fichier()
Dim plage As Range, t, collPays As New Collection, i&, wbk As Workbook, P, fichier
Application.ScreenUpdating = False 'on fige l'écran
With Sheets("Fichier Import")
If .FilterMode Then .ShowAllData 'si filtre alors on affiche tout
Set plage = .Range("a1").CurrentRegion 'plage est la plage des données source
plage.Sort key1:=.Cells(1, "D"), order1:=xlAscending, Header:=xlYes 'Tri de la plage selon le pays
t = plage.Columns(4) 'transfert dans le tableau t de la colonne des entité de la plage
On Error Resume Next ' si erreur (pays déjà dans la collection collPays), on continue
For i = 2 To UBound(t) 'boucle sur tous les pays de la plage (tableau t)
collPays.Add Item:=t(i, 1), Key:=t(i, 1) 'on ajoute le pays dans la collection collPays
Next i
Application.DisplayAlerts = False 'on se dispense des messages d'alerte
Set wbk = Workbooks.Add 'on ajoute un nouveau classeur
For i = wbk.Sheets.Count To 2 Step -1: Sheets(i).Delete: Next 'on ne garde que la feuille 1
For Each P In collPays 'pour chaque pays p de la collection collPays
'on construit le nom du fichier correspondant au xlsx de l'entité
'puis on détruit le fichier sur le disque
fichier = ThisWorkbook.Path: If Right(fichier, 1) <> "\" Then fichier = fichier & "\"
fichier = fichier & P: Kill fichier
plage.AutoFilter Field:=4, Criteria1:=P 'on filtre la plage sur le pays p
wbk.Sheets(1).Cells.Clear 'on efface la feuille 1 du nouveau classeur
'on copie la plage filtrée dans le nouveau classeur
plage.SpecialCells(xlCellTypeVisible).Copy wbk.Sheets(1).Range("a1")
'on sauvegarde le nouveau classeur sous format
wbk.SaveAs Filename:=fichier, CreateBackup:=False
wbk.Sheets(1).Columns("A:O").AutoFit
Next P
wbk.Close savechanges:=False 'on ferme le nouveau classeur
.ShowAllData
End With
Application.DisplayAlerts = True
End Sub
je reviens vers vous pour m'aider à ajouter une petite correction a ce code qui a pour objectif de découper une base selon les pays , en fichier excel le code fonctionne mais la largeur des colonnes du résultat ne s'adapte pas au contenu , ou au moins garde la même largeur de la base global j’espère avoir bien expliquer le problème
merci pour tout retour de vos parts
Option Explicit
Sub decouper_dans_fichier()
Dim plage As Range, t, collPays As New Collection, i&, wbk As Workbook, P, fichier
Application.ScreenUpdating = False 'on fige l'écran
With Sheets("Fichier Import")
If .FilterMode Then .ShowAllData 'si filtre alors on affiche tout
Set plage = .Range("a1").CurrentRegion 'plage est la plage des données source
plage.Sort key1:=.Cells(1, "D"), order1:=xlAscending, Header:=xlYes 'Tri de la plage selon le pays
t = plage.Columns(4) 'transfert dans le tableau t de la colonne des entité de la plage
On Error Resume Next ' si erreur (pays déjà dans la collection collPays), on continue
For i = 2 To UBound(t) 'boucle sur tous les pays de la plage (tableau t)
collPays.Add Item:=t(i, 1), Key:=t(i, 1) 'on ajoute le pays dans la collection collPays
Next i
Application.DisplayAlerts = False 'on se dispense des messages d'alerte
Set wbk = Workbooks.Add 'on ajoute un nouveau classeur
For i = wbk.Sheets.Count To 2 Step -1: Sheets(i).Delete: Next 'on ne garde que la feuille 1
For Each P In collPays 'pour chaque pays p de la collection collPays
'on construit le nom du fichier correspondant au xlsx de l'entité
'puis on détruit le fichier sur le disque
fichier = ThisWorkbook.Path: If Right(fichier, 1) <> "\" Then fichier = fichier & "\"
fichier = fichier & P: Kill fichier
plage.AutoFilter Field:=4, Criteria1:=P 'on filtre la plage sur le pays p
wbk.Sheets(1).Cells.Clear 'on efface la feuille 1 du nouveau classeur
'on copie la plage filtrée dans le nouveau classeur
plage.SpecialCells(xlCellTypeVisible).Copy wbk.Sheets(1).Range("a1")
'on sauvegarde le nouveau classeur sous format
wbk.SaveAs Filename:=fichier, CreateBackup:=False
wbk.Sheets(1).Columns("A:O").AutoFit
Next P
wbk.Close savechanges:=False 'on ferme le nouveau classeur
.ShowAllData
End With
Application.DisplayAlerts = True
End Sub