XL 2019 remplissage automatique

kae

XLDnaute Nouveau
Bonsoir à tous,
stp je suis nouvelle apprenante et j'ai enormement besoin de votre aide...
J'ai mis un fichier en PJ et je souhaiterais que toutes les cellules de la feuille NON LIVRES puissent se remplir automatiquement en PRENANT EN COMPTE dans la feuille LIVRÉE les colis avec durée réception...
Aide moi stp, cela fais 1 semaine que je cherche une solution désespérément ...
 

Pièces jointes

  • SUIVI LIVRAISON.xlsx
    16.7 KB · Affichages: 9

job75

XLDnaute Barbatruc
Bonsoir kae, bienvenue sur XLD, bonsoir goube,

Voyez le fichier joint et cette macro dans la feuille NON LIVRES (clic droit sur l'onglet et Visualiser le code) :
VB:
Private Sub Worksheet_Activate()
Dim tablo, resu(), i&, n&, j%
tablo = Sheets("LIVRES").[A1].CurrentRegion.Resize(, 8)
ReDim resu(1 To UBound(tablo), 1 To 5)
For i = 2 To UBound(tablo)
    If IsNumeric(tablo(i, 8)) Then
        n = n + 1
        For j = 1 To 4: resu(n, j) = tablo(i, j): Next j
        resu(n, 5) = tablo(i, 8)
    End If
Next i
'---restitution---
If FilterMode Then ShowAllData 'si la feuille est filtrée
With [A2] '1ère cellule de destination
    If n Then
        .Resize(n, 5) = resu
        .Resize(n, 5).Borders.Weight = xlThin 'bordures
    End If
    .Offset(n).Resize(Rows.Count - n - .Row + 1, 5).Delete xlUp 'RAZ en dessous
End With
With UsedRange: End With 'actualise la barre de défilement verticale
End Sub
Elle se déclenche automatiquement quand on active la feuille.

Elle est très rapide car elle utilise des tableaux VBA.

A+
 

Pièces jointes

  • SUIVI LIVRAISON(1).xlsm
    24.1 KB · Affichages: 12

goube

XLDnaute Impliqué
Re, bonsoir job75,

Se positionner sur une cellule du tableau de l'onglet LIVRES
Onglet Données, Récupérer et transformer des données, A partir d'un tableau ou d'une plage
Ouverture de la fenêtre Power Query
Sélectionner les colonnes à garder, clic droit Supprimer les autres colonnes
Filtrer la colonne Durée réception sur les valeurs autres que –
Clic en haut à gauche de chaque colonne pour définir le type ou sélectionner une ou plusieurs colonnes, Onglet Accueil, Transformer, Type de données, sélectionner le bon type
Onglet Accueil, Fermer, Fermer et charger, Fermer et charger.

Un peu de documentation :
http://www.excel-formations.fr/trucs-et-astuces.php

https://www.developpez.net/forums/b...ve-efficace-filtre-avance-dynamique-surcroit/

https://www.youtube.com/playlist?list=PLGvckt9NEpieN5i0xf9PEGcKyjBWNkSKL

Cordialement
 

job75

XLDnaute Barbatruc
Bonjour kae, goube,

Je constate que Power Query n'est pas très rapide.

Pour tester j'ai recopié le tableau source A2:H45 sur 44 000 lignes :

- actualisation des résultats sur Power Query, post #2 => 3 secondes

- macro du post #4 => 0,3 seconde.

A+
 

job75

XLDnaute Barbatruc
Bonsoir mapomme,

Non j'ai testé plusieurs fois avec la macro :
VB:
Sub a()
t = Timer
ThisWorkbook.RefreshAll
MsgBox Timer - t
End Sub
Attention, il faut tester avec le tableau des résultats non mis à jour (19 lignes).

A+
 

job75

XLDnaute Barbatruc
Bonjour kae, goube, mapomme, le forum,

Une autre solution dans ce fichier (2) avec le filtre avancé :
VB:
Private Sub Worksheet_Activate()
Application.ScreenUpdating = False
Range("A2:H" & Rows.Count).Clear 'RAZ
With Sheets("LIVRES")
    .[K2] = "=ISNUMBER(H2)" 'critère
    .[A1].CurrentRegion.AdvancedFilter xlFilterCopy, .[K1:K2], [A1:E1] 'filtre avancé copié
    .[K2] = ""
End With
End Sub
On notera que la MFC n'est pas copiée.

Sur 44 000 lignes la macro s'exécute chez moi en 0,25 seconde.

A+
 

Pièces jointes

  • SUIVI LIVRAISON(2).xlsm
    23.6 KB · Affichages: 3

kae

XLDnaute Nouveau
Bonsoir kae, bienvenue sur XLD, bonsoir goube,

Voyez le fichier joint et cette macro dans la feuille NON LIVRES (clic droit sur l'onglet et Visualiser le code) :
VB:
Private Sub Worksheet_Activate()
Dim tablo, resu(), i&, n&, j%
tablo = Sheets("LIVRES").[A1].CurrentRegion.Resize(, 8)
ReDim resu(1 To UBound(tablo), 1 To 5)
For i = 2 To UBound(tablo)
    If IsNumeric(tablo(i, 8)) Then
        n = n + 1
        For j = 1 To 4: resu(n, j) = tablo(i, j): Next j
        resu(n, 5) = tablo(i, 8)
    End If
Next i
'---restitution---
If FilterMode Then ShowAllData 'si la feuille est filtrée
With [A2] '1ère cellule de destination
    If n Then
        .Resize(n, 5) = resu
        .Resize(n, 5).Borders.Weight = xlThin 'bordures
    End If
    .Offset(n).Resize(Rows.Count - n - .Row + 1, 5).Delete xlUp 'RAZ en dessous
End With
With UsedRange: End With 'actualise la barre de défilement verticale
End Sub
Elle se déclenche automatiquement quand on active la feuille.

Elle est très rapide car elle utilise des tableaux VBA.

A+
Merci infiniment à TOUS ! c'est très cool de sentir entouré.. merci encore .. je me suis penché depuis dimanche sur des tutos de VBA pour mieux comprendre les lignes de codes... suis encore à la phase niveau "très nul" .. Tous les conseils pour m'orienter, accélérer et faciliter ma formation en excel VBA sont les biens venus..
Encore merci pour votre aide à tous !
 

job75

XLDnaute Barbatruc
Bonjour kae, le forum,

Pour faire bon poids voyez ce fichier (3) et la macro qui utilise le filtre automatique :
VB:
Private Sub Worksheet_Activate()
Application.ScreenUpdating = False
Range("A2:H" & Rows.Count).Clear 'RAZ
With Sheets("LIVRES").[A1].CurrentRegion
    .AutoFilter 8, ">0" 'filtre automatique
    .Copy [A1]
    With [A1].CurrentRegion
        .Columns(8) = .Columns(8).Value 'supprime les formules
        .Columns(5).Resize(, 3).Delete xlToLeft
    End With
    .AutoFilter 'ôte le filtre
End With
End Sub
On notera que la MFC est copiée.

Chez moi sur 44 000 lignes :

- avec la MFC => 32 secondes

- sans la MFC => 0,5 seconde.

A+
 

Pièces jointes

  • SUIVI LIVRAISON(3).xlsm
    24 KB · Affichages: 7

Discussions similaires

Réponses
4
Affichages
259
Réponses
4
Affichages
263

Statistiques des forums

Discussions
312 025
Messages
2 084 735
Membres
102 648
dernier inscrit
radhwane taibi