Voil=E0 un code que j'ai r=E9cup=E9r=E9 de l'internet, que je voulais modif=
ier
pour afficher dans une MsgBox, =E9l=E9ment par =E9l=E9ment pour voir ce qu'=
il
contient comme valeur, mais une erreur est signal=E9e :
Incompatibilit=E9 de type.
Les donn=E9es :
A2: 10
A3:11
A4:aa10
A5 10bb
A6:12
Le code :
'------------------------------------------
Sub suppr_FiltreElabore()
Dim rF As Range
With ActiveSheet
.Range("C2").FormulaR1C1 =3D
"=3DOR(COUNTIF(RC[-2],""10""),COUNTIF(RC[-2],""*10*""))"
.Range("A1:A" & [A65536].End(xlUp).Row).AdvancedFilter
Action:=3DxlFilterInPlace, CriteriaRange:=3DRange("C1:C2"), Unique:=3DFalse
Set rF =3D .Range("_FilterDataBase")
rF.Select
MsgBox "rF.rows.count-1 =3D " & rF.Rows.Count - 1
'rF.Offset(1, 0).Resize(rF.Rows.Count -
1).SpecialCells(xlCellTypeVisible).EntireRow.Delete
i =3D 1
For Each c In rF
'MsgBox "element " + i + " =3D " + c.Value
i =3D i + 1
Next c
.ShowAllData
'.Range("C2").Clear
End With
End Sub
'-------------------------------
'--------------------------------------------------- Sub suppr_FiltreElabore() Dim Rg As Range, Sh As Worksheet Dim DerLig As Long, I As Long Set Sh = ActiveSheet
Application.ScreenUpdating = False With Sh .Range("C2").FormulaR1C1 = _ "=OR(COUNTIF(RC[-2],""10""),COUNTIF(RC[-2],""*10*""))" DerLig = .Range("A65536").End(xlUp).Row With .Range("A1:A" & DerLig) .AdvancedFilter Action:=xlFilterInPlace, _ CriteriaRange:=Sh.Range("C1:C2"), Unique:úlse End With Set Rg = .Range("_FilterDataBase") On Error Resume Next I = 1 With Rg.Offset(1).Resize(Rg.Rows.Count - 1). _ SpecialCells(xlCellTypeVisible) For Each c In .Cells MsgBox "element " & I & " = " & c.Value I = I + 1 Next c .EntireRow.Delete End With .Range("C2").Clear .ShowAllData End With End Sub '---------------------------------------------------
.
'---------------------------------------------------
Sub suppr_FiltreElabore()
Dim Rg As Range, Sh As Worksheet
Dim DerLig As Long, I As Long
Set Sh = ActiveSheet
Application.ScreenUpdating = False
With Sh
.Range("C2").FormulaR1C1 = _
"=OR(COUNTIF(RC[-2],""10""),COUNTIF(RC[-2],""*10*""))"
DerLig = .Range("A65536").End(xlUp).Row
With .Range("A1:A" & DerLig)
.AdvancedFilter Action:=xlFilterInPlace, _
CriteriaRange:=Sh.Range("C1:C2"), Unique:úlse
End With
Set Rg = .Range("_FilterDataBase")
On Error Resume Next
I = 1
With Rg.Offset(1).Resize(Rg.Rows.Count - 1). _
SpecialCells(xlCellTypeVisible)
For Each c In .Cells
MsgBox "element " & I & " = " & c.Value
I = I + 1
Next c
.EntireRow.Delete
End With
.Range("C2").Clear
.ShowAllData
End With
End Sub
'---------------------------------------------------
'--------------------------------------------------- Sub suppr_FiltreElabore() Dim Rg As Range, Sh As Worksheet Dim DerLig As Long, I As Long Set Sh = ActiveSheet
Application.ScreenUpdating = False With Sh .Range("C2").FormulaR1C1 = _ "=OR(COUNTIF(RC[-2],""10""),COUNTIF(RC[-2],""*10*""))" DerLig = .Range("A65536").End(xlUp).Row With .Range("A1:A" & DerLig) .AdvancedFilter Action:=xlFilterInPlace, _ CriteriaRange:=Sh.Range("C1:C2"), Unique:úlse End With Set Rg = .Range("_FilterDataBase") On Error Resume Next I = 1 With Rg.Offset(1).Resize(Rg.Rows.Count - 1). _ SpecialCells(xlCellTypeVisible) For Each c In .Cells MsgBox "element " & I & " = " & c.Value I = I + 1 Next c .EntireRow.Delete End With .Range("C2").Clear .ShowAllData End With End Sub '---------------------------------------------------
.
Apitos
Bonjour mechdenis,
Ca marche pour l'affichage des cellules correspondantes au test sauf pour la dernière cellule qui A2:12 et A2:10bb est ignorée, pourtant elle contient un "10" ...
Merci.
Bonjour mechdenis,
Ca marche pour l'affichage des cellules correspondantes au test sauf
pour la dernière cellule qui A2:12 et A2:10bb est ignorée, pourtant
elle contient un "10" ...
Ca marche pour l'affichage des cellules correspondantes au test sauf pour la dernière cellule qui A2:12 et A2:10bb est ignorée, pourtant elle contient un "10" ...
Merci.
michdenis
Je ne peux pas reproduire l'oubli que tu reproches à la procédure
La plage où s'applique le filtre dans la procédure débute en A1 par une étiquette de la colonne...les données suivent en A2...
"Apitos" a écrit dans le message de news:
Bonjour mechdenis,
Ca marche pour l'affichage des cellules correspondantes au test sauf pour la dernière cellule qui A2:12 et A2:10bb est ignorée, pourtant elle contient un "10" ...
Merci.
Je ne peux pas reproduire l'oubli que tu reproches à la procédure
La plage où s'applique le filtre dans la procédure débute en A1
par une étiquette de la colonne...les données suivent en A2...
"Apitos" <apitos@gmail.com> a écrit dans le message de news:
8e61747d-95d3-40c8-98b4-b083919f169a@34g2000hsh.googlegroups.com...
Bonjour mechdenis,
Ca marche pour l'affichage des cellules correspondantes au test sauf
pour la dernière cellule qui A2:12 et A2:10bb est ignorée, pourtant
elle contient un "10" ...
Je ne peux pas reproduire l'oubli que tu reproches à la procédure
La plage où s'applique le filtre dans la procédure débute en A1 par une étiquette de la colonne...les données suivent en A2...
"Apitos" a écrit dans le message de news:
Bonjour mechdenis,
Ca marche pour l'affichage des cellules correspondantes au test sauf pour la dernière cellule qui A2:12 et A2:10bb est ignorée, pourtant elle contient un "10" ...
Merci.
Apitos
Bonjour mechdenis,
Pas grave, je vais éssayer de trouver ou est l'erreur.
Grand merci à toi mechdenis.
Bonjour mechdenis,
Pas grave, je vais éssayer de trouver ou est l'erreur.
Pas grave, je vais éssayer de trouver ou est l'erreur.
Grand merci à toi mechdenis.
Apitos
Salut,
J'ai trouvé également une des tes macros :
'--------------------------------- Sub Filtre()
Dim Rg As Range, Rg1 As Range, DL As Long
With Worksheets("Feuil1") 'Plage sur laquelle s'effecture le filtre Set Rg = .Range("A1:B" & .Range("B65536").End(xlUp).Row) 'Zone de critère .Range("J1") = "" 'pour être sûr .Range("J2").Formula = "=(A2 06)*(B2=""s"")" 'Attribution d'un nom à la plage de critère .Range("J1:J2").Name = "Crit"
'le filtre élaboré : With Rg .AdvancedFilter Action:=xlFilterInPlace, _ CriteriaRange:=Range("Crit") 'Définir la plage à copier Set Rg1 = .Offset(1).Resize(.Rows.Count - 1). _ SpecialCells(xlCellTypeVisible) End With
'Où copier le résultat du filtre With Worksheets("Feuil3") 'Identifier la dernière ligne +1 de la plage A:A DL = .Range("A:A").Find(What:="*", _ LookIn:=xlFormulas, _ SearchOrder:=xlByRows, _ SearchDirection:=xlPrevious).Row + 1
'copier les données du filtre Rg1.Copy .Range("A" & DL) End With
'afficher toutes les données .ShowAllData End With 'Supprime le NOM de la zone de critère Application.Names("Crit").Delete 'Libère la mémoire des objets Set Rg = Nothing: Set Rg1 = Nothing End Sub '----------------------------------------
Elle bien détaillée.
Salut,
J'ai trouvé également une des tes macros :
'---------------------------------
Sub Filtre()
Dim Rg As Range, Rg1 As Range, DL As Long
With Worksheets("Feuil1")
'Plage sur laquelle s'effecture le filtre
Set Rg = .Range("A1:B" & .Range("B65536").End(xlUp).Row)
'Zone de critère
.Range("J1") = "" 'pour être sûr
.Range("J2").Formula = "=(A2=2006)*(B2=""s"")"
'Attribution d'un nom à la plage de critère
.Range("J1:J2").Name = "Crit"
'le filtre élaboré :
With Rg
.AdvancedFilter Action:=xlFilterInPlace, _
CriteriaRange:=Range("Crit")
'Définir la plage à copier
Set Rg1 = .Offset(1).Resize(.Rows.Count - 1). _
SpecialCells(xlCellTypeVisible)
End With
'Où copier le résultat du filtre
With Worksheets("Feuil3")
'Identifier la dernière ligne +1 de la plage A:A
DL = .Range("A:A").Find(What:="*", _
LookIn:=xlFormulas, _
SearchOrder:=xlByRows, _
SearchDirection:=xlPrevious).Row +
1
'copier les données du filtre
Rg1.Copy .Range("A" & DL)
End With
'afficher toutes les données
.ShowAllData
End With
'Supprime le NOM de la zone de critère
Application.Names("Crit").Delete
'Libère la mémoire des objets
Set Rg = Nothing: Set Rg1 = Nothing
End Sub
'----------------------------------------
With Worksheets("Feuil1") 'Plage sur laquelle s'effecture le filtre Set Rg = .Range("A1:B" & .Range("B65536").End(xlUp).Row) 'Zone de critère .Range("J1") = "" 'pour être sûr .Range("J2").Formula = "=(A2 06)*(B2=""s"")" 'Attribution d'un nom à la plage de critère .Range("J1:J2").Name = "Crit"
'le filtre élaboré : With Rg .AdvancedFilter Action:=xlFilterInPlace, _ CriteriaRange:=Range("Crit") 'Définir la plage à copier Set Rg1 = .Offset(1).Resize(.Rows.Count - 1). _ SpecialCells(xlCellTypeVisible) End With
'Où copier le résultat du filtre With Worksheets("Feuil3") 'Identifier la dernière ligne +1 de la plage A:A DL = .Range("A:A").Find(What:="*", _ LookIn:=xlFormulas, _ SearchOrder:=xlByRows, _ SearchDirection:=xlPrevious).Row + 1
'copier les données du filtre Rg1.Copy .Range("A" & DL) End With
'afficher toutes les données .ShowAllData End With 'Supprime le NOM de la zone de critère Application.Names("Crit").Delete 'Libère la mémoire des objets Set Rg = Nothing: Set Rg1 = Nothing End Sub '----------------------------------------
Elle bien détaillée.
michdenis
Tu as bien raision de la reproduire... De nos jours, c'est rare le travail bien fait !!!
;-))
"Apitos" a écrit dans le message de news:
Salut,
J'ai trouvé également une des tes macros :
'--------------------------------- Sub Filtre()
Dim Rg As Range, Rg1 As Range, DL As Long
With Worksheets("Feuil1") 'Plage sur laquelle s'effecture le filtre Set Rg = .Range("A1:B" & .Range("B65536").End(xlUp).Row) 'Zone de critère .Range("J1") = "" 'pour être sûr .Range("J2").Formula = "=(A2 06)*(B2=""s"")" 'Attribution d'un nom à la plage de critère .Range("J1:J2").Name = "Crit"
'le filtre élaboré : With Rg .AdvancedFilter Action:=xlFilterInPlace, _ CriteriaRange:=Range("Crit") 'Définir la plage à copier Set Rg1 = .Offset(1).Resize(.Rows.Count - 1). _ SpecialCells(xlCellTypeVisible) End With
'Où copier le résultat du filtre With Worksheets("Feuil3") 'Identifier la dernière ligne +1 de la plage A:A DL = .Range("A:A").Find(What:="*", _ LookIn:=xlFormulas, _ SearchOrder:=xlByRows, _ SearchDirection:=xlPrevious).Row + 1
'copier les données du filtre Rg1.Copy .Range("A" & DL) End With
'afficher toutes les données .ShowAllData End With 'Supprime le NOM de la zone de critère Application.Names("Crit").Delete 'Libère la mémoire des objets Set Rg = Nothing: Set Rg1 = Nothing End Sub '----------------------------------------
Elle bien détaillée.
Tu as bien raision de la reproduire...
De nos jours, c'est rare le travail bien fait !!!
;-))
"Apitos" <apitos@gmail.com> a écrit dans le message de news:
fc449818-68d0-4864-96ab-4769cbabae23@m44g2000hsc.googlegroups.com...
Salut,
J'ai trouvé également une des tes macros :
'---------------------------------
Sub Filtre()
Dim Rg As Range, Rg1 As Range, DL As Long
With Worksheets("Feuil1")
'Plage sur laquelle s'effecture le filtre
Set Rg = .Range("A1:B" & .Range("B65536").End(xlUp).Row)
'Zone de critère
.Range("J1") = "" 'pour être sûr
.Range("J2").Formula = "=(A2 06)*(B2=""s"")"
'Attribution d'un nom à la plage de critère
.Range("J1:J2").Name = "Crit"
'le filtre élaboré :
With Rg
.AdvancedFilter Action:=xlFilterInPlace, _
CriteriaRange:=Range("Crit")
'Définir la plage à copier
Set Rg1 = .Offset(1).Resize(.Rows.Count - 1). _
SpecialCells(xlCellTypeVisible)
End With
'Où copier le résultat du filtre
With Worksheets("Feuil3")
'Identifier la dernière ligne +1 de la plage A:A
DL = .Range("A:A").Find(What:="*", _
LookIn:=xlFormulas, _
SearchOrder:=xlByRows, _
SearchDirection:=xlPrevious).Row +
1
'copier les données du filtre
Rg1.Copy .Range("A" & DL)
End With
'afficher toutes les données
.ShowAllData
End With
'Supprime le NOM de la zone de critère
Application.Names("Crit").Delete
'Libère la mémoire des objets
Set Rg = Nothing: Set Rg1 = Nothing
End Sub
'----------------------------------------
Tu as bien raision de la reproduire... De nos jours, c'est rare le travail bien fait !!!
;-))
"Apitos" a écrit dans le message de news:
Salut,
J'ai trouvé également une des tes macros :
'--------------------------------- Sub Filtre()
Dim Rg As Range, Rg1 As Range, DL As Long
With Worksheets("Feuil1") 'Plage sur laquelle s'effecture le filtre Set Rg = .Range("A1:B" & .Range("B65536").End(xlUp).Row) 'Zone de critère .Range("J1") = "" 'pour être sûr .Range("J2").Formula = "=(A2 06)*(B2=""s"")" 'Attribution d'un nom à la plage de critère .Range("J1:J2").Name = "Crit"
'le filtre élaboré : With Rg .AdvancedFilter Action:=xlFilterInPlace, _ CriteriaRange:=Range("Crit") 'Définir la plage à copier Set Rg1 = .Offset(1).Resize(.Rows.Count - 1). _ SpecialCells(xlCellTypeVisible) End With
'Où copier le résultat du filtre With Worksheets("Feuil3") 'Identifier la dernière ligne +1 de la plage A:A DL = .Range("A:A").Find(What:="*", _ LookIn:=xlFormulas, _ SearchOrder:=xlByRows, _ SearchDirection:=xlPrevious).Row + 1
'copier les données du filtre Rg1.Copy .Range("A" & DL) End With
'afficher toutes les données .ShowAllData End With 'Supprime le NOM de la zone de critère Application.Names("Crit").Delete 'Libère la mémoire des objets Set Rg = Nothing: Set Rg1 = Nothing End Sub '----------------------------------------
Elle bien détaillée.
Apitos
Bonsoir mechdenis,
C'est gràce à vous que nous apprenions de plus en plus le VBA.
Merci pour tous vos efforts.
J'ai fait de nouveaux testes pour la boucle : '------ I = 1 For Each c In Rg MsgBox "élement " & I & " = " & c.Value I = I + 1 Next c '------
SI je laisse [A3] vide les lignes extraites viennent se superposeés l'une sur l'autre et il ne reste à la fin qu'une seule ligne, parce que ActiveCell.End(xlDown).Row qui doit trouver la dernière ligne vide, ne fonctionne pas correctement.
Merci.
Bonjour michdenis,
Dernière chance...
Elle restera comme dette et je vais la saisir une autre fois si tu
acceptes bien sur, parce que j'ai trouvé la solution.
Seulement il y a quelques problèmes dans mon exemple :
SI je laisse [A3] vide les lignes extraites viennent se superposeés
l'une sur l'autre et il ne reste à la fin qu'une seule ligne, parce
que ActiveCell.End(xlDown).Row qui doit trouver la dernière ligne
vide, ne fonctionne pas correctement.
SI je laisse [A3] vide les lignes extraites viennent se superposeés l'une sur l'autre et il ne reste à la fin qu'une seule ligne, parce que ActiveCell.End(xlDown).Row qui doit trouver la dernière ligne vide, ne fonctionne pas correctement.
Merci.
michdenis
C'est possible que tu aies quelques petites retouches à faire mais le principe général est là :
http://cjoint.com/?jxoN5aL3uU
P.S. Les trucs comme "activesheet" sont à éviter. TOI, tu sais sur quelle feuille se passe l'activité et ces feuilles ont un nom... pourquoi ne pas les utiliser ? Dans la procédure filtre, Feuil1 et Feuil2 représente la propriété "Name" des objets feuille dans la fenêtre de l'éditeur de code et non le nom des onglets des feuilles.
"Apitos" a écrit dans le message de news:
Bonjour michdenis,
Dernière chance...
Elle restera comme dette et je vais la saisir une autre fois si tu acceptes bien sur, parce que j'ai trouvé la solution.
Seulement il y a quelques problèmes dans mon exemple :
SI je laisse [A3] vide les lignes extraites viennent se superposeés l'une sur l'autre et il ne reste à la fin qu'une seule ligne, parce que ActiveCell.End(xlDown).Row qui doit trouver la dernière ligne vide, ne fonctionne pas correctement.
Merci.
C'est possible que tu aies quelques petites retouches à faire
mais le principe général est là :
http://cjoint.com/?jxoN5aL3uU
P.S. Les trucs comme "activesheet" sont à éviter. TOI, tu sais
sur quelle feuille se passe l'activité et ces feuilles ont un nom...
pourquoi ne pas les utiliser ?
Dans la procédure filtre, Feuil1 et Feuil2 représente la propriété
"Name" des objets feuille dans la fenêtre de l'éditeur de code et
non le nom des onglets des feuilles.
"Apitos" <apitos@gmail.com> a écrit dans le message de news:
fe40f345-658a-42ba-b0b6-0138c4195571@e39g2000hsf.googlegroups.com...
Bonjour michdenis,
Dernière chance...
Elle restera comme dette et je vais la saisir une autre fois si tu
acceptes bien sur, parce que j'ai trouvé la solution.
Seulement il y a quelques problèmes dans mon exemple :
SI je laisse [A3] vide les lignes extraites viennent se superposeés
l'une sur l'autre et il ne reste à la fin qu'une seule ligne, parce
que ActiveCell.End(xlDown).Row qui doit trouver la dernière ligne
vide, ne fonctionne pas correctement.
C'est possible que tu aies quelques petites retouches à faire mais le principe général est là :
http://cjoint.com/?jxoN5aL3uU
P.S. Les trucs comme "activesheet" sont à éviter. TOI, tu sais sur quelle feuille se passe l'activité et ces feuilles ont un nom... pourquoi ne pas les utiliser ? Dans la procédure filtre, Feuil1 et Feuil2 représente la propriété "Name" des objets feuille dans la fenêtre de l'éditeur de code et non le nom des onglets des feuilles.
"Apitos" a écrit dans le message de news:
Bonjour michdenis,
Dernière chance...
Elle restera comme dette et je vais la saisir une autre fois si tu acceptes bien sur, parce que j'ai trouvé la solution.
Seulement il y a quelques problèmes dans mon exemple :
SI je laisse [A3] vide les lignes extraites viennent se superposeés l'une sur l'autre et il ne reste à la fin qu'une seule ligne, parce que ActiveCell.End(xlDown).Row qui doit trouver la dernière ligne vide, ne fonctionne pas correctement.