Aide sur Power Query
re
Utilise le mode débug
met un point d'arrêt sur la ligne "rng.Select" avant le PB et vérifie l'adresse de rng (mettre un espion rng.address)
Si rng est totalement vide de données, on ne peut resizer car sa hauteur est 1 et donc 0 e marche pas
A noter que pour tester ici ATraiter doit se référer à l'une des colonne de filtre et non 16 (j'avais préciser la nécessité d'adapter au contexte)
Mais de façon générale si tu filtres des Tableaux structurés il faudrait un code adapté aux tableaux et plus utiliser ActiveSheet.Range("A1").CurrentRegion
Le plus simple serait donc de mettre le 1er tableau aussi en tableau structuré pour tout gérer de même...
Il marche, j'avais une ligne vide c'est pour cela qu'il ne fonctionnait pas. Merci pour les précisions.
Re,
Désolé pour la montée d'espoir, mais j'obtiens une nouvelle erreur qu'est : erreur d’exécution 1004 la méthode autofilter de la classe range a échoué.
Sub Filtrer()
Dim rng As Range
Dim lastline As Long
Dim Atraiter As Long
'Pour sélectionner l'onglet source
ThisWorkbook.Worksheets("Entrée").Activate
Set rng = ActiveSheet.Range("A1").CurrentRegion
rng.Select
'Filtrer la sélection
rng.AutoFilter Field:=16, Criteria1:="V"
rng.AutoFilter Field:=18, Criteria1:="V"
'Tester si la feuille est vide
Set rng = rng.Offset(1, 0).Resize(rng.Rows.Count - 1, rng.Columns.Count)
Atraiter = Application.WorksheetFunction.Subtotal(103, Range(rng.Columns(16).Address))
If Atraiter > 0 Then
'Copier la sélection filtrée vers la feuille cible
With Worksheets("B2, Méd, Psy").ListObjects(1)
.ListRows.Add
y = .ListRows.Count
rng.Copy Destination:=.ListColumns(1).DataBodyRange.Cells(y, 1)
End With
'Supprimer les lignes importées
rng.Rows.EntireRow.Delete
End If
'Désactiver le filtre
ActiveSheet.ShowAllData
'Pour sélectionner l'onglet source
Set rng = ActiveSheet.Range("A1").CurrentRegion
rng.Select
'Filtrer la sélection
rng.AutoFilter Field:=16, Criteria1:="NV"
'Tester si la feuille est vide
Set rng = rng.Offset(1, 0).Resize(rng.Rows.Count - 1, rng.Columns.Count)
Atraiter = Application.WorksheetFunction.Subtotal(103, Range(rng.Columns(16).Address))
If Atraiter > 0 Then
'Copier la sélection filtrée vers la feuille cible
With Worksheets("NV").ListObjects(1)
.ListRows.Add
y = .ListRows.Count
rng.Copy Destination:=.ListColumns(1).DataBodyRange.Cells(y, 1)
End With
'Supprimer les lignes importées
rng.Rows.EntireRow.Delete
End If
'Désactiver le filtre
ActiveSheet.ShowAllData
'Pour sélectionner l'onglet source
Set rng = ActiveSheet.Range("A1").CurrentRegion
rng.Select
'Filtrer la sélection
rng.AutoFilter Field:=18, Criteria1:="NV"
'Tester si la feuille est vide
Set rng = rng.Offset(1, 0).Resize(rng.Rows.Count - 1, rng.Columns.Count)
Atraiter = Application.WorksheetFunction.Subtotal(103, Range(rng.Columns(16).Address))
If Atraiter > 0 Then
'Copier la sélection filtrée vers la feuille cible
With Worksheets("NV").ListObjects(1)
.ListRows.Add
y = .ListRows.Count
rng.Copy Destination:=.ListColumns(1).DataBodyRange.Cells(y, 1)
End With
'Supprimer les lignes importées
rng.Rows.EntireRow.Delete
End If
'Désactiver le filtre
ActiveSheet.ShowAllData
Call Partie2
End Sub
Sub Partie2()
Dim rng As Range
Dim lastline As Long
Dim Atraiter As Long
'Pour sélectionner l'onglet source
ThisWorkbook.Worksheets("B2, Méd, Psy").Activate
Set rng = ActiveSheet.Range("A1").CurrentRegion
rng.Select
'Filtrer la sélection
rng.AutoFilter Field:=24, Criteria1:="V" '------------------------ > ICI
rng.AutoFilter Field:=25, Criteria1:="V"
rng.AutoFilter Field:=26, Criteria1:="V"
'Tester si la feuille est vide
Set rng = rng.Offset(1, 0).Resize(rng.Rows.Count - 1, rng.Columns.Count)
Atraiter = Application.WorksheetFunction.Subtotal(103, Range(rng.Columns(16).Address))
If Atraiter > 0 Then
'Copier la sélection filtrée vers la feuille cible
With Worksheets("V").ListObjects(1)
.ListRows.Add
y = .ListRows.Count
rng.Copy Destination:=.ListColumns(1).DataBodyRange.Cells(y, 1)
End With
'Supprimer les lignes importées
rng.Rows.EntireRow.Delete
End If
'Désactiver le filtre
ActiveSheet.ShowAllData
'Pour sélectionner l'onglet source
Set rng = ActiveSheet.Range("A1").CurrentRegion
rng.Select
'Filtrer la sélection
rng.AutoFilter Field:=24, Criteria1:="NV"
'Tester si la feuille est vide
Set rng = rng.Offset(1, 0).Resize(rng.Rows.Count - 1, rng.Columns.Count)
Atraiter = Application.WorksheetFunction.Subtotal(103, Range(rng.Columns(16).Address))
If Atraiter > 0 Then
'Copier la sélection filtrée vers la feuille cible
With Worksheets("NV").ListObjects(1)
.ListRows.Add
y = .ListRows.Count
rng.Copy Destination:=.ListColumns(1).DataBodyRange.Cells(y, 1)
End With
'Supprimer les lignes importées
rng.Rows.EntireRow.Delete
End If
'Désactiver le filtre
ActiveSheet.ShowAllData
'Pour sélectionner l'onglet source
Set rng = ActiveSheet.Range("A1").CurrentRegion
rng.Select
'Filtrer la sélection
rng.AutoFilter Field:=25, Criteria1:="NV"
'Tester si la feuille est vide
Set rng = rng.Offset(1, 0).Resize(rng.Rows.Count - 1, rng.Columns.Count)
Atraiter = Application.WorksheetFunction.Subtotal(103, Range(rng.Columns(16).Address))
If Atraiter > 0 Then
'Copier la sélection filtrée vers la feuille cible
With Worksheets("NV").ListObjects(1)
.ListRows.Add
y = .ListRows.Count
rng.Copy Destination:=.ListColumns(1).DataBodyRange.Cells(y, 1)
End With
'Supprimer les lignes importées
rng.Rows.EntireRow.Delete
End If
'Désactiver le filtre
ActiveSheet.ShowAllData
'Pour sélectionner l'onglet source
Set rng = ActiveSheet.Range("A1").CurrentRegion
rng.Select
'Filtrer la sélection
rng.AutoFilter Field:=26, Criteria1:="NV"
'Tester si la feuille est vide
Set rng = rng.Offset(1, 0).Resize(rng.Rows.Count - 1, rng.Columns.Count)
Atraiter = Application.WorksheetFunction.Subtotal(103, Range(rng.Columns(16).Address))
If Atraiter > 0 Then
'Copier la sélection filtrée vers la feuille cible
With Worksheets("NV").ListObjects(1)
.ListRows.Add
y = .ListRows.Count
rng.Copy Destination:=.ListColumns(1).DataBodyRange.Cells(y, 1)
End With
'Supprimer les lignes importées
rng.Rows.EntireRow.Delete
End If
'Désactiver le filtre
ActiveSheet.ShowAllData
End SubEDIT : C'est bon ça marche j'ai rien dit.
RE
Il faut vraiment apprendre à te servir du mode debug...
En plus tu n'as pas tenu compte de ma remarque
à propos de Atraiter
ni à propos de la notion de tableau nécessitant de revoir le code
Tu confonds vitesse et précipitation...
Pose les choses et leur logique avant de coder...
De plus le code sans le fichier et son contexte au moment de l'erreur ne permet pas de t'aider
RE
Il faut vraiment apprendre à te servir du mode debug...
En plus tu n'as pas tenu compte de ma remarque
à propos de Atraiter
ni à propos de la notion de tableau nécessitant de revoir le code
Tu confonds vitesse et précipitation...
Pose les choses et leur logique avant de coder...
De plus le code sans le fichier et son contexte au moment de l'erreur ne permet pas de t'aider
Je vois.
Je voulais upload le fichier, mais il était bien trop volumineux. Concernant la revue du code pour l'adapter aux tableaux, pourquoi pas, mais je n'ai pas de grande notion du VBA, je me démerde un peu car j'ai fais auparavant du python (ce qui m'a aidé à créer le premier code et sa structure) et j'ai suivi quelques tutos basiques pour le VBA. Je n'ai aucune connaissance poussé du VBA et c'est totalement nouveau pour moi.
Là le code fonctionne à priori et est plus rapide que le mien sans oublier que j'ai plus de problème, tout cela grâce toi et je t'en remercie.
Ça fait plus d'une semaine que j'essaye de trouver une solution à mon problème, et maintenant j'ai réussi. C'est tout ce qui compte pour moi. Je dis pas non pour l'optimiser, par exemple je suis bien intrigué par le Atraiter (si tu pouvais bien m'expliquer un peu plus en détail ce que tu voulais dire dans ton ancien message), par contre si c'est pour revoir tout le code pour le réadapter aux tableaux, là je ne pourrais pas malheureusement, car je n'ai pas de connaissance poussé en VBA comme je l'ai dit et je ne peux pas perdre plus de temps pour reprogrammer le code (si le réadapter signifie ça bien-sur, c'est à dire revoir tout le code sinon pourquoi pas si ça ne prend pas de temps).
Et tant que c'est fonctionnel, ça me va.
Merci encore pour ton aide précieuse.
RE
Mets le sur cjoint et poste le lien
RE
Mets le sur cjoint et poste le lien
RE
Ton fichier en retour avec le code dedans (allégé grâce à l'approche tableau structuré)
Pour Atraiter il faut soit se référer à la colonne qui sert de filtre 16 ou 24 ... au dessus, soit si nom est toujours rempli, à la colonne 2
RE
Ton fichier en retour avec le code dedans (allégé grâce à l'approche tableau structuré)
Pour Atraiter il faut soit se référer à la colonne qui sert de filtre 16 ou 24 ... au dessus, soit si nom est toujours rempli, à la colonne 2
Oh merci, ah oui c'est largement plus rapide !!
Merci encore pour tout Chris !
Le sujet est donc résolu.