bonjour mromain,
je viens de retester votre fonction et est-il possible de l'adapter pour masquer les lignes vides des jours.
merci d'avance
RE mromain,
effectivement j'aurais du expliquer mieux mon souhait. pour plus d'explication:
1) j'ai un tableau ou sont regroupés le planning général comme déja mentionné sur post départ
2) je répartis ce planning sur différentes feuilles pour le faire parvenir aux différents fournisseurs concernés
3) il y a un fournisseur à qui je fourni aussi le planning d'un autre fournisseur avec.
en espérant avoir apporté les infos nécessaires.
@+
Re bonjour,
Juste pour info...
As-tu jeté un œil sur le lien de mon précédent post ?
Si tu l'as vu, ne pourrais-tu pas modifier ton fichier afin d'enlever les cellules fusionnées - que ça ressemble à une "BDD".Car les cellules fusionnées sont assez lourdes/chiantes à traiter (que ce soit en formule, ou en macro).
En général, il vaut mieux séparer le "stockage" et la "visualisation" de l'information.
En l'occurrence, sur ton fichier, il faudrait une ligne par évènement (ne pas mettre le détail sur plusieurs lignes) - l'affichage, on verra plus tard...
Rque: Cela te permettrai en plus, d'avoir dans ta "BDD" des données sur plus d'une semaine (pour pouvoir les exploiter, faire des indicateurs, ...).
Qu'en penses-tu ?
a+
Private Sub Workbook_SheetActivate(ByVal Sh As Object)
Dim zoneFournisseurs As Range, nomFourn() As String, iFourn As Long, searchC As Range, memAdr As String, iL As Long
'ne pas traiter les onglets GENERAL et Liste
If Sh.Name = "GENERAL" Or Sh.Name = "Listes" Then Exit Sub
'récupérer le nom de l'onglet composé de noms de fournisseurs (1 ou plusieurs
' séparés par un tiret "-") dans un tableau
nomFourn = Split(Sh.Name, "-")
'effacer les données
Sh.Range("2 : " & Sh.Rows.Count).Clear
iL = 1
'récupérer la "zone fournisseur" de l'onglet général (colonne C)
With ThisWorkbook.Sheets("GENERAL")
Set zoneFournisseurs = .Range("C1", .Range("C" & .Rows.Count).End(xlUp))
End With
'boucler sur chaque fournisseur (nom de l'onglet)
For iFourn = LBound(nomFourn) To UBound(nomFourn)
'rechercher dans la zoneFournisseurs
Set searchC = zoneFournisseurs.Find(nomFourn(iFourn), , xlValues, xlWhole)
'si une cellule est trouvée
If Not searchC Is Nothing Then
memAdr = searchC.Address
Do
iL = iL + 1
searchC.EntireRow.Copy Sh.Range("A" & iL)
Set searchC = zoneFournisseurs.FindNext(searchC)
Loop Until memAdr = searchC.Address
End If
Next iFourn
End Sub
Pour ce, modifie le code comme ça :est-il possible de rajouter un classement automatique par jours lorsque nous avons 2 fournisseurs concernés
Private Sub Workbook_SheetActivate(ByVal Sh As Object)
Dim zoneFournisseurs As Range, nomFourn() As String, iFourn As Long, searchC As Range, memAdr As String, iL As Long
'ne pas traiter les onglets GENERAL et Liste
If Sh.Name = "GENERAL" Or Sh.Name = "Listes" Then Exit Sub
'récupérer le nom de l'onglet composé de noms de fournisseurs (1 ou plusieurs
' séparés par un tiret "-") dans un tableau
nomFourn = Split(Sh.Name, "-")
'effacer les données
Sh.Range("2 : " & Sh.Rows.Count).Clear
iL = 1
'récupérer la "zone fournisseur" de l'onglet général (colonne C)
With ThisWorkbook.Sheets("GENERAL")
Set zoneFournisseurs = .Range("C1", .Range("C" & .Rows.Count).End(xlUp))
End With
'boucler sur chaque fournisseur (nom de l'onglet)
For iFourn = LBound(nomFourn) To UBound(nomFourn)
'rechercher dans la zoneFournisseurs
Set searchC = zoneFournisseurs.Find(nomFourn(iFourn), , xlValues, xlWhole)
'si une cellule est trouvée
If Not searchC Is Nothing Then
memAdr = searchC.Address
Do
iL = iL + 1
searchC.EntireRow.Copy Sh.Range("A" & iL)
Set searchC = zoneFournisseurs.FindNext(searchC)
Loop Until memAdr = searchC.Address
End If
Next iFourn
'trier les données par date
Sh.Range("A2:E" & iL).Sort Sh.Range("A2"), xlAscending
End Sub
Ça, c'est plus compliqué à faire...si une journée aucune intervention ou si férié l'indiqué.
Private Sub Workbook_SheetActivate(ByVal Sh As Object)
Dim zoneFournisseurs As Range, nomFourn() As String, iFourn As Long, searchC As Range, memAdr As String, iL As Long
'ne pas traiter les onglets GENERAL et Liste
If Sh.Name = "GENERAL" Or Sh.Name = "Listes" Or Sh.Name = "Modele" Then Exit Sub
'récupérer le nom de l'onglet composé de noms de fournisseurs (1 ou plusieurs
' séparés par un tiret "-") dans un tableau
nomFourn = Split(Sh.Name, "-")
'effacer les données
Sh.Range("3 : " & Sh.Rows.Count).Clear
iL = 2
'récupérer la "zone fournisseur" de l'onglet général (colonne C)
With ThisWorkbook.Sheets("GENERAL")
Set zoneFournisseurs = .Range("C1", .Range("C" & .Rows.Count).End(xlUp))
End With
'boucler sur chaque fournisseur (nom de l'onglet)
For iFourn = LBound(nomFourn) To UBound(nomFourn)
'rechercher dans la zoneFournisseurs
Set searchC = zoneFournisseurs.Find(nomFourn(iFourn), , xlValues, xlWhole)
'si une cellule est trouvée
If Not searchC Is Nothing Then
memAdr = searchC.Address
Do
iL = iL + 1
searchC.EntireRow.Copy Sh.Range("A" & iL)
Set searchC = zoneFournisseurs.FindNext(searchC)
Loop Until memAdr = searchC.Address
End If
Next iFourn
'trier les données par date
Sh.Range("A2:E" & iL).Sort Sh.Range("A2"), xlAscending
End Sub
Une fois de plus, je ne comprends pas grand choses...est -il possible de lier un n° tel avec un nom d'onglet et quand j'imprime ma feuille
comme suivant model joint 'sauf qu'il me met le nom de l'onglet au milieu de la feuille ???