Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

Extraction de Données

21 réponses
Avatar
JulieH
Bonjour à toutes et tous,

Cela fait un bon bout de temps que je n'ai pas eu besoin d'aide mais
cette fois-ci je ne m'en sors pas.

J'ai un fichier avec de nombreuses dates (la même date est aussi
utilisée plusieurs fois) et je souhaite en extraire une série. J'ai donc
réalisé une page d'accueil ou je note une date Début et une date Fin de
manière à extraire toutes les dates entre les deux (Début et Fin incluses).

J'utilise le code suivant :
'Recherche et supprime les valeurs inférieures
n = Columns(4).Find(What:=Début, After:=Range("D6"),
LookIn:=xlFormulas, LookAt _
:=xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext,
MatchCase:= _
False, SearchFormat:=False).Row
Rows("6:" & n - 1).Delete

Tout fonctionne de manière parfaite lorsque Début n'est pas la première
date du Fichier. Par exemple, Début est le 22/06 et il y a 16 fois cette
date. S'il y a dans le fichier une date inférieure au 22/06, j'ai bien
les 16 lignes. Si, en revanche, le 22/06 est la première date du
fichier, je ne récupère que 15 lignes.

N.B : j'ai le même problème pour la Fin.

Si quelqu'un peut m'aider, merci par avance.


Julie

10 réponses

1 2 3
Avatar
JulieH
J'ai bien pensé à cela et cela permet de résoudre le problème pour le
15, mais cela ne fonctionne plus lorsqu'on teste pour les dates
différentes du 15/06.

Julie

Daniel.C a écrit :
Le pb vient de ton code.
Si la 1ere lligne est sélectionnée,
Rows("6:" & n - 1).Delete
supprime la 1ere ligne et la ligne d'entête (n-1=5).
Daniel

Bonjour et merci également,

Je dois avoir un autre problème car dans le fichier Cjoint, si je
change D6 par D5 uniquement, je me retrouve avec la ligne de titres en
moins et toujours pas de 78.

Julie

MichDenis a écrit :
Bonjour Julie,

n = Columns(4).Find(What:=Début, After:=Range("D5"),
LookIn:=xlFormulas, LookAt _
:=xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext,
MatchCase:= _
False, SearchFormat:úlse).Row

Par défaut, la méthode Find débute sa recherche à partir de la
cellule suivante spécifiée
avec le paramètre "After" ou après la première cellule de la plage
sur laquelle est effectue
sa recherche si le paramètre "After" n'est pas défini.

Au lieu de débuter ta recherche en D6, spécifie la cellule D5 et tu
obtiendras ce que tu désires.

(voir l'aide d'Excel sur le sujet)


"JulieH" a écrit dans le message
de groupe de discussion : O3YgviK#
Le voilà :

http://cjoint.com/?gDm3IBGUz2

Julie

Daniel.C a écrit :
J'ai du mal à comprendre. Peux-tu mettre un classeur eemple sur
www.cijoint.fr ?
Daniel

Bonjour et merci pour t'intéresser à mon problème,

Voici mon code, j'ai simplifié mais j'espère avoir mis le
nécessaire :

Sub Prépa_Envoi_Essai()

Application.ScreenUpdating = False
'Préparation de la suppression des lignes hors du créneau
de date
Début = CDate([Feuil8].[B14].Value)
Fin = CDate([Feuil8].[D14].Value)

ActiveWorkbook.Sheets("Copie").Activate 'Tri les données pour
les avoir à coup sùr dans l'ordre.
x = [D65000].End(xlUp).Row
Range("A5:Y" & x).Sort Key1:=Range("D6"), Order1:=xlAscending,
Header:= _
xlGuess, OrderCustom:=1, MatchCase:úlse,
Orientation:=xlTopToBottom, _
DataOption1:=xlSortNormal

'Recherche et supprime les valeurs inférieures
n = Columns(4).Find(What:=Début, After:=Range("D6"),
LookIn:=xlFormulas, LookAt _
:=xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext,
MatchCase:= _
False, SearchFormat:úlse).Row

Rows("6:" & n - 1).Delete

'Recherche et supprime les valeurs supérieures
z = Sheets("Copie").Range("D65000").End(xlUp).Row

m = Columns(4).Find(What:=Fin, After:=Range("D6"),
LookIn:=xlFormulas, LookAt _
:=xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext,
MatchCase:= _
False, SearchFormat:úlse).Row

Range("J1").FormulaR1C1 =
"=COUNTIF(R[5]C[-6]:R[19999]C[-6],RC[-2])"
p = Range("J1").Value
o = m + p
Rows(o & ":" & z + 1).Delete
End Sub


En attendant, j'ai trouvé une solution qui crée une ligne au début
du fichier avec une date inférieure à Début et à la Fin une date
supérieure à Fin. Ce n'est pas l'idéal mais cela fonctionne.

Julie


Daniel.C a écrit :
Bonjour.
Poste, s'il te plaît, la totalité de ta boucle.
Cordialement.
Daniel

Bonjour à toutes et tous,

Cela fait un bon bout de temps que je n'ai pas eu besoin d'aide
mais
cette fois-ci je ne m'en sors pas.

J'ai un fichier avec de nombreuses dates (la même date est aussi
utilisée plusieurs fois) et je souhaite en extraire une série. J'ai
donc
réalisé une page d'accueil ou je note une date Début et une date
Fin de
manière à extraire toutes les dates entre les deux (Début et Fin
incluses).

J'utilise le code suivant :
'Recherche et supprime les valeurs inférieures
n = Columns(4).Find(What:=Début, After:=Range("D6"),
LookIn:=xlFormulas, LookAt _
:=xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext,
MatchCase:= _
False, SearchFormat:úlse).Row
Rows("6:" & n - 1).Delete

Tout fonctionne de manière parfaite lorsque Début n'est pas la
première
date du Fichier. Par exemple, Début est le 22/06 et il y a 16 fois
cette
date. S'il y a dans le fichier une date inférieure au 22/06, j'ai
bien les 16 lignes. Si, en revanche, le 22/06 est la première date
du fichier, je ne récupère que 15 lignes.

N.B : j'ai le même problème pour la Fin.

Si quelqu'un peut m'aider, merci par avance.


Julie
















Avatar
MichDenis
J'ai répondu spécifiquement à ta question initiale et je t'ai
donné l'explication quant au pourquoi :

| Début est le 22/06 et il y a 16 fois cette date. S'il y a
| dans le fichier une date inférieure au 22/06, j'ai bien
| les 16 lignes. Si, en revanche, le 22/06 est la première
| date du fichier, je ne récupère que 15 lignes.

Je n'ai pas corrigé le reste de ta procédure... mais au besoin en
tenant compte de mon message précédent, tu pourrais utiliser
cette ligne de code pour supprimer la plage de cellules

n = Columns(4).Find(What:=Début, After:=Range("D5"), LookIn:=xlFormulas, LookAt _
:=xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext, MatchCase:= _
False, SearchFormat:úlse).Row

Range("D6").Resize(N).Delete

Attention : Si la date recherchée n'existe pas, la méthode Find génère une erreur #91
conséquence, plantage sur la ligne N = ... et évidemment si N n'est pas défini la ligne
de code suivante va générer aussi une erreur !



"MichDenis" a écrit dans le message de groupe de discussion :
#DG66uK#
Bonjour Julie,

n = Columns(4).Find(What:=Début, After:=Range("D5"), LookIn:=xlFormulas, LookAt _
:=xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext, MatchCase:= _
False, SearchFormat:úlse).Row

Par défaut, la méthode Find débute sa recherche à partir de la cellule suivante spécifiée
avec le paramètre "After" ou après la première cellule de la plage sur laquelle est
effectue
sa recherche si le paramètre "After" n'est pas défini.

Au lieu de débuter ta recherche en D6, spécifie la cellule D5 et tu obtiendras ce que tu
désires.

(voir l'aide d'Excel sur le sujet)


"JulieH" a écrit dans le message de groupe de
discussion : O3YgviK#
Le voilà :

http://cjoint.com/?gDm3IBGUz2

Julie

Daniel.C a écrit :
J'ai du mal à comprendre. Peux-tu mettre un classeur eemple sur
www.cijoint.fr ?
Daniel

Bonjour et merci pour t'intéresser à mon problème,

Voici mon code, j'ai simplifié mais j'espère avoir mis le
nécessaire :

Sub Prépa_Envoi_Essai()

Application.ScreenUpdating = False
'Préparation de la suppression des lignes hors du créneau
de date
Début = CDate([Feuil8].[B14].Value)
Fin = CDate([Feuil8].[D14].Value)

ActiveWorkbook.Sheets("Copie").Activate 'Tri les données pour
les avoir à coup sùr dans l'ordre.
x = [D65000].End(xlUp).Row
Range("A5:Y" & x).Sort Key1:=Range("D6"), Order1:=xlAscending,
Header:= _
xlGuess, OrderCustom:=1, MatchCase:úlse,
Orientation:=xlTopToBottom, _
DataOption1:=xlSortNormal

'Recherche et supprime les valeurs inférieures
n = Columns(4).Find(What:=Début, After:=Range("D6"),
LookIn:=xlFormulas, LookAt _
:=xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext,
MatchCase:= _
False, SearchFormat:úlse).Row

Rows("6:" & n - 1).Delete

'Recherche et supprime les valeurs supérieures
z = Sheets("Copie").Range("D65000").End(xlUp).Row

m = Columns(4).Find(What:=Fin, After:=Range("D6"),
LookIn:=xlFormulas, LookAt _
:=xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext,
MatchCase:= _
False, SearchFormat:úlse).Row

Range("J1").FormulaR1C1 = "=COUNTIF(R[5]C[-6]:R[19999]C[-6],RC[-2])"
p = Range("J1").Value
o = m + p
Rows(o & ":" & z + 1).Delete
End Sub


En attendant, j'ai trouvé une solution qui crée une ligne au début
du fichier avec une date inférieure à Début et à la Fin une date
supérieure à Fin. Ce n'est pas l'idéal mais cela fonctionne.

Julie


Daniel.C a écrit :
Bonjour.
Poste, s'il te plaît, la totalité de ta boucle.
Cordialement.
Daniel

Bonjour à toutes et tous,

Cela fait un bon bout de temps que je n'ai pas eu besoin d'aide
mais
cette fois-ci je ne m'en sors pas.

J'ai un fichier avec de nombreuses dates (la même date est aussi
utilisée plusieurs fois) et je souhaite en extraire une série. J'ai
donc
réalisé une page d'accueil ou je note une date Début et une date Fin de
manière à extraire toutes les dates entre les deux (Début et Fin
incluses).

J'utilise le code suivant :
'Recherche et supprime les valeurs inférieures
n = Columns(4).Find(What:=Début, After:=Range("D6"),
LookIn:=xlFormulas, LookAt _
:=xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext,
MatchCase:= _
False, SearchFormat:úlse).Row
Rows("6:" & n - 1).Delete

Tout fonctionne de manière parfaite lorsque Début n'est pas la
première
date du Fichier. Par exemple, Début est le 22/06 et il y a 16 fois
cette
date. S'il y a dans le fichier une date inférieure au 22/06, j'ai
bien les 16 lignes. Si, en revanche, le 22/06 est la première date
du fichier, je ne récupère que 15 lignes.

N.B : j'ai le même problème pour la Fin.

Si quelqu'un peut m'aider, merci par avance.


Julie












Avatar
JulieH
Merci (ainsi qu'à Daniel) pour ces nouvelles réponses.

Je ne sais pas si vous les avez testées dans mon fichier. En tous cas,
pour moi, cela ne fonctionne pas. Je fais sans doute une erreur quelque
part.
Merci de me renvoyer le code en entier ou le fichier par Cjoint si vous
trouvez quelque chose qui fonctionne.

Julie

MichDenis a écrit :
J'ai répondu spécifiquement à ta question initiale et je t'ai
donné l'explication quant au pourquoi :

| Début est le 22/06 et il y a 16 fois cette date. S'il y a
| dans le fichier une date inférieure au 22/06, j'ai bien
| les 16 lignes. Si, en revanche, le 22/06 est la première
| date du fichier, je ne récupère que 15 lignes.

Je n'ai pas corrigé le reste de ta procédure... mais au besoin en
tenant compte de mon message précédent, tu pourrais utiliser
cette ligne de code pour supprimer la plage de cellules

n = Columns(4).Find(What:=Début, After:=Range("D5"), LookIn:=xlFormulas, LookAt _
:=xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext, MatchCase:= _
False, SearchFormat:úlse).Row

Range("D6").Resize(N).Delete

Attention : Si la date recherchée n'existe pas, la méthode Find génère une erreur #91
conséquence, plantage sur la ligne N = ... et évidemment si N n'est pas défini la ligne
de code suivante va générer aussi une erreur !



"MichDenis" a écrit dans le message de groupe de discussion :
#DG66uK#
Bonjour Julie,

n = Columns(4).Find(What:=Début, After:=Range("D5"), LookIn:=xlFormulas, LookAt _
:=xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext, MatchCase:= _
False, SearchFormat:úlse).Row

Par défaut, la méthode Find débute sa recherche à partir de la cellule suivante spécifiée
avec le paramètre "After" ou après la première cellule de la plage sur laquelle est
effectue
sa recherche si le paramètre "After" n'est pas défini.

Au lieu de débuter ta recherche en D6, spécifie la cellule D5 et tu obtiendras ce que tu
désires.

(voir l'aide d'Excel sur le sujet)


"JulieH" a écrit dans le message de groupe de
discussion : O3YgviK#
Le voilà :

http://cjoint.com/?gDm3IBGUz2

Julie

Daniel.C a écrit :
J'ai du mal à comprendre. Peux-tu mettre un classeur eemple sur
www.cijoint.fr ?
Daniel

Bonjour et merci pour t'intéresser à mon problème,

Voici mon code, j'ai simplifié mais j'espère avoir mis le
nécessaire :

Sub Prépa_Envoi_Essai()

Application.ScreenUpdating = False
'Préparation de la suppression des lignes hors du créneau
de date
Début = CDate([Feuil8].[B14].Value)
Fin = CDate([Feuil8].[D14].Value)

ActiveWorkbook.Sheets("Copie").Activate 'Tri les données pour
les avoir à coup sùr dans l'ordre.
x = [D65000].End(xlUp).Row
Range("A5:Y" & x).Sort Key1:=Range("D6"), Order1:=xlAscending,
Header:= _
xlGuess, OrderCustom:=1, MatchCase:úlse,
Orientation:=xlTopToBottom, _
DataOption1:=xlSortNormal

'Recherche et supprime les valeurs inférieures
n = Columns(4).Find(What:=Début, After:=Range("D6"),
LookIn:=xlFormulas, LookAt _
:=xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext,
MatchCase:= _
False, SearchFormat:úlse).Row

Rows("6:" & n - 1).Delete

'Recherche et supprime les valeurs supérieures
z = Sheets("Copie").Range("D65000").End(xlUp).Row

m = Columns(4).Find(What:=Fin, After:=Range("D6"),
LookIn:=xlFormulas, LookAt _
:=xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext,
MatchCase:= _
False, SearchFormat:úlse).Row

Range("J1").FormulaR1C1 = "=COUNTIF(R[5]C[-6]:R[19999]C[-6],RC[-2])"
p = Range("J1").Value
o = m + p
Rows(o & ":" & z + 1).Delete
End Sub


En attendant, j'ai trouvé une solution qui crée une ligne au début
du fichier avec une date inférieure à Début et à la Fin une date
supérieure à Fin. Ce n'est pas l'idéal mais cela fonctionne.

Julie


Daniel.C a écrit :
Bonjour.
Poste, s'il te plaît, la totalité de ta boucle.
Cordialement.
Daniel

Bonjour à toutes et tous,

Cela fait un bon bout de temps que je n'ai pas eu besoin d'aide
mais
cette fois-ci je ne m'en sors pas.

J'ai un fichier avec de nombreuses dates (la même date est aussi
utilisée plusieurs fois) et je souhaite en extraire une série. J'ai
donc
réalisé une page d'accueil ou je note une date Début et une date Fin de
manière à extraire toutes les dates entre les deux (Début et Fin
incluses).

J'utilise le code suivant :
'Recherche et supprime les valeurs inférieures
n = Columns(4).Find(What:=Début, After:=Range("D6"),
LookIn:=xlFormulas, LookAt _
:=xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext,
MatchCase:= _
False, SearchFormat:úlse).Row
Rows("6:" & n - 1).Delete

Tout fonctionne de manière parfaite lorsque Début n'est pas la
première
date du Fichier. Par exemple, Début est le 22/06 et il y a 16 fois
cette
date. S'il y a dans le fichier une date inférieure au 22/06, j'ai
bien les 16 lignes. Si, en revanche, le 22/06 est la première date
du fichier, je ne récupère que 15 lignes.

N.B : j'ai le même problème pour la Fin.

Si quelqu'un peut m'aider, merci par avance.


Julie












Avatar
MichDenis
J'aurais plutôt dû proposer ceci :

Ceci évite les cas où la date recherchée n'existe pas.
et cela corrige l'oubli du "+1"
'------------------------------------
Dim N as Range

'Recherche et supprime les valeurs inférieures
Set N = Columns(4).Find(What:=Début, After:=Range("D5"), LookIn:=xlFormulas, LookAt _
:=xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext, MatchCase:= _
False, SearchFormat:úlse)
If Not N Is Nothing Then
Range("D6").Resize(N.Row + 1).EntireRow.Select
End If
'------------------------------------



"MichDenis" a écrit dans le message de groupe de discussion :
e3tHuLL#
J'ai répondu spécifiquement à ta question initiale et je t'ai
donné l'explication quant au pourquoi :

| Début est le 22/06 et il y a 16 fois cette date. S'il y a
| dans le fichier une date inférieure au 22/06, j'ai bien
| les 16 lignes. Si, en revanche, le 22/06 est la première
| date du fichier, je ne récupère que 15 lignes.

Je n'ai pas corrigé le reste de ta procédure... mais au besoin en
tenant compte de mon message précédent, tu pourrais utiliser
cette ligne de code pour supprimer la plage de cellules

n = Columns(4).Find(What:=Début, After:=Range("D5"), LookIn:=xlFormulas, LookAt _
:=xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext, MatchCase:= _
False, SearchFormat:úlse).Row

Range("D6").Resize(N).Delete

Attention : Si la date recherchée n'existe pas, la méthode Find génère une erreur #91
conséquence, plantage sur la ligne N = ... et évidemment si N n'est pas défini la ligne
de code suivante va générer aussi une erreur !



"MichDenis" a écrit dans le message de groupe de discussion :
#DG66uK#
Bonjour Julie,

n = Columns(4).Find(What:=Début, After:=Range("D5"), LookIn:=xlFormulas, LookAt _
:=xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext, MatchCase:= _
False, SearchFormat:úlse).Row

Par défaut, la méthode Find débute sa recherche à partir de la cellule suivante spécifiée
avec le paramètre "After" ou après la première cellule de la plage sur laquelle est
effectue
sa recherche si le paramètre "After" n'est pas défini.

Au lieu de débuter ta recherche en D6, spécifie la cellule D5 et tu obtiendras ce que tu
désires.

(voir l'aide d'Excel sur le sujet)


"JulieH" a écrit dans le message de groupe de
discussion : O3YgviK#
Le voilà :

http://cjoint.com/?gDm3IBGUz2

Julie

Daniel.C a écrit :
J'ai du mal à comprendre. Peux-tu mettre un classeur eemple sur
www.cijoint.fr ?
Daniel

Bonjour et merci pour t'intéresser à mon problème,

Voici mon code, j'ai simplifié mais j'espère avoir mis le
nécessaire :

Sub Prépa_Envoi_Essai()

Application.ScreenUpdating = False
'Préparation de la suppression des lignes hors du créneau
de date
Début = CDate([Feuil8].[B14].Value)
Fin = CDate([Feuil8].[D14].Value)

ActiveWorkbook.Sheets("Copie").Activate 'Tri les données pour
les avoir à coup sùr dans l'ordre.
x = [D65000].End(xlUp).Row
Range("A5:Y" & x).Sort Key1:=Range("D6"), Order1:=xlAscending,
Header:= _
xlGuess, OrderCustom:=1, MatchCase:úlse,
Orientation:=xlTopToBottom, _
DataOption1:=xlSortNormal

'Recherche et supprime les valeurs inférieures
n = Columns(4).Find(What:=Début, After:=Range("D6"),
LookIn:=xlFormulas, LookAt _
:=xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext,
MatchCase:= _
False, SearchFormat:úlse).Row

Rows("6:" & n - 1).Delete

'Recherche et supprime les valeurs supérieures
z = Sheets("Copie").Range("D65000").End(xlUp).Row

m = Columns(4).Find(What:=Fin, After:=Range("D6"),
LookIn:=xlFormulas, LookAt _
:=xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext,
MatchCase:= _
False, SearchFormat:úlse).Row

Range("J1").FormulaR1C1 = "=COUNTIF(R[5]C[-6]:R[19999]C[-6],RC[-2])"
p = Range("J1").Value
o = m + p
Rows(o & ":" & z + 1).Delete
End Sub


En attendant, j'ai trouvé une solution qui crée une ligne au début
du fichier avec une date inférieure à Début et à la Fin une date
supérieure à Fin. Ce n'est pas l'idéal mais cela fonctionne.

Julie


Daniel.C a écrit :
Bonjour.
Poste, s'il te plaît, la totalité de ta boucle.
Cordialement.
Daniel

Bonjour à toutes et tous,

Cela fait un bon bout de temps que je n'ai pas eu besoin d'aide
mais
cette fois-ci je ne m'en sors pas.

J'ai un fichier avec de nombreuses dates (la même date est aussi
utilisée plusieurs fois) et je souhaite en extraire une série. J'ai
donc
réalisé une page d'accueil ou je note une date Début et une date Fin de
manière à extraire toutes les dates entre les deux (Début et Fin
incluses).

J'utilise le code suivant :
'Recherche et supprime les valeurs inférieures
n = Columns(4).Find(What:=Début, After:=Range("D6"),
LookIn:=xlFormulas, LookAt _
:=xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext,
MatchCase:= _
False, SearchFormat:úlse).Row
Rows("6:" & n - 1).Delete

Tout fonctionne de manière parfaite lorsque Début n'est pas la
première
date du Fichier. Par exemple, Début est le 22/06 et il y a 16 fois
cette
date. S'il y a dans le fichier une date inférieure au 22/06, j'ai
bien les 16 lignes. Si, en revanche, le 22/06 est la première date
du fichier, je ne récupère que 15 lignes.

N.B : j'ai le même problème pour la Fin.

Si quelqu'un peut m'aider, merci par avance.


Julie












Avatar
Daniel.C
salut, Denis.
Ne serait-ce pas plutôt :

Set N = Columns(4).Find(What:=Début, After:=Range("D5"),
LookIn:=xlFormulas, LookAt _
:=xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext,
MatchCase:= _
False, SearchFormat:úlse)
If Not N Is Nothing Then
Range("D6").Resize(N.Row - 6).EntireRow.Delete
End If

et de même pour les valeurs postérieures ?

Daniel

Set N = Columns(4).Find(What:=Début, After:=Range("D6"), LookIn:=xlFormulas,
LookAt _
:=xlPart, SearchOrder:=xlByRows, SearchDirection:=xlPrevious,
MatchCase:= _
False, SearchFormat:úlse)
If Not N Is Nothing Then
Range("D6").Resize(N.Row).EntireRow.Delete
End If


Avatar
JulieH
Merci à tous les deux pour votre aide. Je n'y comprends plus rien car
rien ne fonctionne et les deux codes font planter la suppression des
valeurs supérieures.

Je repars sur mon idée initiale (non satisfaisante) en créant par la
macro une date avant Début et 1 autre après Fin. On verra bien ce qui va
se passer.

Julie.

Daniel.C a écrit :
salut, Denis.
Ne serait-ce pas plutôt :

Set N = Columns(4).Find(What:=Début, After:=Range("D5"),
LookIn:=xlFormulas, LookAt _
:=xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext,
MatchCase:= _
False, SearchFormat:úlse)
If Not N Is Nothing Then
Range("D6").Resize(N.Row - 6).EntireRow.Delete
End If

et de même pour les valeurs postérieures ?

Daniel

Set N = Columns(4).Find(What:=Début, After:=Range("D6"),
LookIn:=xlFormulas, LookAt _
:=xlPart, SearchOrder:=xlByRows, SearchDirection:=xlPrevious,
MatchCase:= _
False, SearchFormat:úlse)
If Not N Is Nothing Then
Range("D6").Resize(N.Row).EntireRow.Delete
End If






Avatar
MichDenis
Pourquoi tiens-tu à utiliser la méthode Find, tu peux avoir la même chose
avec la méthode Autofilter :

Ceci supprime les lignes inférieur à la date "Début" Et
ou supérieur à la date "fin"

With Range("A6:A" & Range("A65536").End(xlUp).Row).CurrentRegion
.AutoFilter field:=4, Criteria1:="<" & début * 1, _
Operator:=xlOr, Criteria2:=">" & fin * 1
.SpecialCells(xlCellTypeVisible).EntireRow.Delete
End With




"JulieH" a écrit dans le message de groupe de
discussion : OGHAw8L#
Merci à tous les deux pour votre aide. Je n'y comprends plus rien car
rien ne fonctionne et les deux codes font planter la suppression des
valeurs supérieures.

Je repars sur mon idée initiale (non satisfaisante) en créant par la
macro une date avant Début et 1 autre après Fin. On verra bien ce qui va
se passer.

Julie.

Daniel.C a écrit :
salut, Denis.
Ne serait-ce pas plutôt :

Set N = Columns(4).Find(What:=Début, After:=Range("D5"),
LookIn:=xlFormulas, LookAt _
:=xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext,
MatchCase:= _
False, SearchFormat:úlse)
If Not N Is Nothing Then
Range("D6").Resize(N.Row - 6).EntireRow.Delete
End If

et de même pour les valeurs postérieures ?

Daniel

Set N = Columns(4).Find(What:=Début, After:=Range("D6"),
LookIn:=xlFormulas, LookAt _
:=xlPart, SearchOrder:=xlByRows, SearchDirection:=xlPrevious,
MatchCase:= _
False, SearchFormat:úlse)
If Not N Is Nothing Then
Range("D6").Resize(N.Row).EntireRow.Delete
End If






Avatar
JulieH
Voilà une autre idée (évidemment plus simple) à tester. A première vue,
cela fonctionne, il me reste à adapter.

Merci à nouveau pour l'aide.

Julie

MichDenis a écrit :
Pourquoi tiens-tu à utiliser la méthode Find, tu peux avoir la même chose
avec la méthode Autofilter :

Ceci supprime les lignes inférieur à la date "Début" Et
ou supérieur à la date "fin"

With Range("A6:A" & Range("A65536").End(xlUp).Row).CurrentRegion
.AutoFilter field:=4, Criteria1:="<" & début * 1, _
Operator:=xlOr, Criteria2:=">" & fin * 1
.SpecialCells(xlCellTypeVisible).EntireRow.Delete
End With




"JulieH" a écrit dans le message de groupe de
discussion : OGHAw8L#
Merci à tous les deux pour votre aide. Je n'y comprends plus rien car
rien ne fonctionne et les deux codes font planter la suppression des
valeurs supérieures.

Je repars sur mon idée initiale (non satisfaisante) en créant par la
macro une date avant Début et 1 autre après Fin. On verra bien ce qui va
se passer.

Julie.

Daniel.C a écrit :
salut, Denis.
Ne serait-ce pas plutôt :

Set N = Columns(4).Find(What:=Début, After:=Range("D5"),
LookIn:=xlFormulas, LookAt _
:=xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext,
MatchCase:= _
False, SearchFormat:úlse)
If Not N Is Nothing Then
Range("D6").Resize(N.Row - 6).EntireRow.Delete
End If

et de même pour les valeurs postérieures ?

Daniel

Set N = Columns(4).Find(What:=Début, After:=Range("D6"),
LookIn:=xlFormulas, LookAt _
:=xlPart, SearchOrder:=xlByRows, SearchDirection:=xlPrevious,
MatchCase:= _
False, SearchFormat:úlse)
If Not N Is Nothing Then
Range("D6").Resize(N.Row).EntireRow.Delete
End If







Avatar
MichDenis
La difficulté est de tenter de corriger une procédure d'après
un code qui ne fonctionne pas. Ce que le demandeur veut
elle ne l'a pas exprimée clairement.

Pour Set N ....
J'ai utilisé le paramètre
SearchDirection:=xlPrevious

Mais pour M, comme semble-t-il, elle veut supprimer
toutes les lignes supérieures à la date "fin", La méthode Find n'est
pas la méthode la plus appropriée, car la recherche part
de D6 et non de la ligne D6 + le nombre de ligne trouvée
pour N. En plus, cela suppose que les données soient triées
par ordre croissant.

Me semble-t-il que la méthode "Autofilter" est beaucoup plus facile d'application
Avatar
Péhemme
Pardonnez-moi de m'immiscer.
Moi j'aime bien les filtres élaborés.
Si l'idée est de copier sur la feuille Copie les informations comprises
entre la date Début incluse et la date fin incluse, si cela peut aider, je
me permets de proposer la macro suivante.
Au préalable, il faut modifier les formules de
Envoi!B14 = SI(B13="";"";TEXTE(DROITE(B13;11);"jj/mm/aaaa"))
en : =SI(B13="";"";TEXTE(DROITE(B13;10);"jj/mm/aaaa"))
Pareil pour D14 de la feuille Envoi.
J'utilise ces 2 informations pour alimenter mes critères en D1 et D2 de la
feuille Données.
Il faut également veiller à ce que la colonne D de la feuille Données soit
bien une Date et non pas un String
Le reste, merci à Denis qui m'avait bien aidé en 2004 (notamment le coup des
"Resize")...
Michel


Sub FiltrerEntreDates()
'=================================================== 'Pour apurement de la Base de Données et mise en *
'archives des dossiers clos selon critères de dates
*
'=================================================== Dim Sh1 As Worksheet, Sh2 As Worksheet, MaPlage As Range, Dest As Range
Dim DateDébut As Long, DateFin As Long, R As Long

Set Sh1 = Worksheets("Données")
Set Sh2 = Worksheets("Copie")
Set MaPlage = Sh1.Range("a5").CurrentRegion
R = Sh2.Range("d65536").End(xlUp).Row + 1
Set Dest = Sh2.Range("a" & R)

Sh1.Range("d1") = CDate(Range("Envoi!b14"))
Sh1.Range("d2") = CDate(Range("Envoi!d14"))

DateDébut = CLng(Sh1.Range("d1"))
DateFin = CLng(Sh1.Range("d2"))

MaPlage.AutoFilter Field:=4, Criteria1:=">=" & DateDébut, Operator:= _
xlAnd, Criteria2:="<=" & DateFin

Sh1.Range("_FilterDatabase").Resize(Sh1.Range("_FilterDatabase") _
.Rows.Count - 1).Offset(1).SpecialCells(xlCellTypeVisible).Copy Dest

'Si tu veux enlever de tes données les lignes copiées
'Sh1.Range("_FilterDatabase").Resize(Sh1.Range("_FilterDatabase") _
' .Rows.Count -
1).Offset(1).SpecialCells(xlCellTypeVisible).EntireRow.Delete

MaPlage.AutoFilter

Set Sh1 = Nothing
Set Sh2 = Nothing
Set MaPlage = Nothing
Set Dest = Nothing

End Sub




"JulieH" a écrit dans le message de
news:OarEsyI%
Bonjour à toutes et tous,

Cela fait un bon bout de temps que je n'ai pas eu besoin d'aide mais
cette fois-ci je ne m'en sors pas.

J'ai un fichier avec de nombreuses dates (la même date est aussi
utilisée plusieurs fois) et je souhaite en extraire une série. J'ai donc
réalisé une page d'accueil ou je note une date Début et une date Fin de
manière à extraire toutes les dates entre les deux (Début et Fin
incluses).

J'utilise le code suivant :
'Recherche et supprime les valeurs inférieures
n = Columns(4).Find(What:=Début, After:=Range("D6"),
LookIn:=xlFormulas, LookAt _
:=xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext,
MatchCase:= _
False, SearchFormat:úlse).Row
Rows("6:" & n - 1).Delete

Tout fonctionne de manière parfaite lorsque Début n'est pas la première
date du Fichier. Par exemple, Début est le 22/06 et il y a 16 fois cette
date. S'il y a dans le fichier une date inférieure au 22/06, j'ai bien les
16 lignes. Si, en revanche, le 22/06 est la première date du fichier, je
ne récupère que 15 lignes.

N.B : j'ai le même problème pour la Fin.

Si quelqu'un peut m'aider, merci par avance.


Julie


1 2 3