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

Extraction dynamique avec critere en formule

15 réponses
Avatar
Apitos
Bonjour,

Je voudrais extraire des donn=E9es de la colonne A vers la colonne C =E0
l'aide d'une macro, mais dans le parametre CriteriaRange je veux
appliquer une formule.

Est-ce possible ?

Voila la macro :

Sub essai()
'--- cat=E9gorie
If Target.Column =3D 1 And Target.Count =3D 1 Then
Application.EnableEvents =3D False
[A1:A20].AdvancedFilter Action:=3DxlFilterCopy,
CriteriaRange:=3D[E1].Formula =3D "=3DSTXT(A1;CHERCHE(" - ";A1)+1;NBCAR(A1)-
CHERCHE(" - ";A1)-2)", _
CopyToRange:=3DRange("CI:C20"), Unique:=3DTrue
Range("C1:C20").Sort key1:=3DRange("C1")
Application.EnableEvents =3D True
End If
End Sub

Bon le deboggeur me signal une erreur dans la ligne :

If Target.Column =3D 1 And Target.Count =3D 1 Then

Erreur d'execution '424'. Objet requis.

Merci de votre aide.

10 réponses

1 2
Avatar
anonymousA
Bonjour,

pour le débogguer la question est " qu'est ce qu'est target ?" . En fait
ta macro doit être une adapatation d'une procédure evenementielle dans
laquelle par défaut VBA sait que Target est une cellule et même en
connait toutes le propriétés locales auquel cas il n'existe pas de plantage.
Mais quand c'est toi qui écris une procédure ,il faut bien définir ce
qu'est Target car autrement VBA par défaut reconnait bien qu'il s'aggit
d'une varaible de type Variant et sans doute plutot de ctype range car
associée à une propriété Coolumn mais comme Target n'a pas recu
d'affectation par un mot clé Set , alors pour VBA Target est Nothing et
Nothing.column n'a pas de sens.
Tout ce long laius pour te dire qu'il faut que tu affectes quelque chose
de type range à Target avant de lancer ta macro.
Par exemple, set target=range("A1:A10")

A+


Bonjour,

Je voudrais extraire des données de la colonne A vers la colonne C à
l'aide d'une macro, mais dans le parametre CriteriaRange je veux
appliquer une formule.

Est-ce possible ?

Voila la macro :

Sub essai()
'--- catégorie
If Target.Column = 1 And Target.Count = 1 Then
Application.EnableEvents = False
[A1:A20].AdvancedFilter Action:=xlFilterCopy,
CriteriaRange:=[E1].Formula = "=STXT(A1;CHERCHE(" - ";A1)+1;NBCAR(A1)-
CHERCHE(" - ";A1)-2)", _
CopyToRange:=Range("CI:C20"), Unique:=True
Range("C1:C20").Sort key1:=Range("C1")
Application.EnableEvents = True
End If
End Sub

Bon le deboggeur me signal une erreur dans la ligne :

If Target.Column = 1 And Target.Count = 1 Then

Erreur d'execution '424'. Objet requis.

Merci de votre aide.



Avatar
LSteph
Bonjour,

Que cherche tu à désigner par Target ?
(qui s'utilise dans les évenementielles lorsque déclaré dans les param
de la private sub)

également,
Application.EnableEvents = False
As-tu à te préserver d'autres évenementielles?

Dans quels modules tout cela est-il écrit?

Un petit tour par http://cjoint.com serait pas mal.

@+

lSteph

Bonjour,

Je voudrais extraire des données de la colonne A vers la colonne C à
l'aide d'une macro, mais dans le parametre CriteriaRange je veux
appliquer une formule.

Est-ce possible ?

Voila la macro :

Sub essai()
'--- catégorie
If Target.Column = 1 And Target.Count = 1 Then
Application.EnableEvents = False
[A1:A20].AdvancedFilter Action:=xlFilterCopy,
CriteriaRange:=[E1].Formula = "=STXT(A1;CHERCHE(" - ";A1)+1;NBCAR(A1)-
CHERCHE(" - ";A1)-2)", _
CopyToRange:=Range("CI:C20"), Unique:=True
Range("C1:C20").Sort key1:=Range("C1")
Application.EnableEvents = True
End If
End Sub

Bon le deboggeur me signal une erreur dans la ligne :

If Target.Column = 1 And Target.Count = 1 Then

Erreur d'execution '424'. Objet requis.

Merci de votre aide.



Avatar
Apitos
Voila un exemple de ce que je voudrais avoir.

http://cjoint.com/?eimKyN1mvP
Avatar
Alicante
On 8 avr, 12:38, "Apitos" wrote:
Voila un exemple de ce que je voudrais avoir.

http://cjoint.com/?eimKyN1mvP


Voila un code :

Private Sub Worksheet_Change(ByVal Target As Range)

Application.ScreenUpdating = False
Application.EnableEvents = False
[A1:A100].AdvancedFilter Action:=xlFilterCopy,
CriteriaRange:=[J2].Formula = "=STXT(A1;CHERCHE('-';A1)+1;NBCAR(A1)-
CHERCHE('-';A1)-2)", _
CopyToRange:=Range("C2:C100"), Unique:=True
Range("C2:C100").Sort key1:=Range("C2")
Application.EnableEvents = True
Application.ScreenUpdating = True

End Sub

Avatar
Alicante
On 8 avr, 12:38, "Apitos" wrote:
Voila un exemple de ce que je voudrais avoir.

http://cjoint.com/?eimKyN1mvP


Voila un code :

Private Sub Worksheet_Change(ByVal Target As Range)

Application.ScreenUpdating = False
Application.EnableEvents = False
[A1:A100].AdvancedFilter Action:=xlFilterCopy,
CriteriaRange:=[J2].Formula = "=STXT(A1;CHERCHE('-';A1)+1;NBCAR(A1)-
CHERCHE('-';A1)-2)", _
CopyToRange:=Range("C2:C100"), Unique:=True
Range("C2:C100").Sort key1:=Range("C2")
Application.EnableEvents = True
Application.ScreenUpdating = True

End Sub

Avatar
JB
Bonjour,

http://cjoint.com/?eioWDb0C1f

JB

On 8 avr, 14:37, "Alicante" wrote:
On 8 avr, 12:38, "Apitos" wrote:

Voila un exemple de ce que je voudrais avoir.

http://cjoint.com/?eimKyN1mvP


Voila un code :

Private Sub Worksheet_Change(ByVal Target As Range)

Application.ScreenUpdating = False
Application.EnableEvents = False
[A1:A100].AdvancedFilter Action:=xlFilterCopy,
CriteriaRange:=[J2].Formula = "=STXT(A1;CHERCHE('-';A1)+1;NBCAR(A1)-
CHERCHE('-';A1)-2)", _
CopyToRange:=Range("C2:C100"), Unique:=True
Range("C2:C100").Sort key1:=Range("C2")
Application.EnableEvents = True
Application.ScreenUpdating = True

End Sub



Avatar
Apitos
Heureux de te voir JB.

En fait la colonne Produit est remplie dynamiquement par un code que
tu m'as file depuis quelque temps.

J'aimerais aussi que la colonne Produit2 soit faite de la même maniere
tout en vouyant l'extraction de ce qui est entre les (-) se faire en
meme temps.

Merci.
Avatar
JB
Bonsoir,

Je ne suis pas sûr d'avoir compris la question:

-Documente la colonne B (famille) lors de la saisie du produit en
colonne A
-Documente la colonne J (liste des familles sans doublons) lors de la
saisie en colonne A

Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Column = 1 And Target.Count = 1 Then
p1 = InStr(Target, "-")
P2 = InStr(p1 + 1, Target, "-")
If p1 > 0 And P2 > 0 Then
Target.Offset(0, 1) = Mid(Target, p1 + 1, P2 - p1 - 1)
[B1:B1000].AdvancedFilter Action:=xlFilterCopy,
CopyToRange:=[J1], Unique:=True
End If
End If
End Sub

http://cjoint.com/?eiwRZ00phY

Cordialement JB


On 8 avr, 21:42, "Apitos" wrote:
Heureux de te voir JB.

En fait la colonne Produit est remplie dynamiquement par un code que
tu m'as file depuis quelque temps.

J'aimerais aussi que la colonne Produit2 soit faite de la même maniere
tout en vouyant l'extraction de ce qui est entre les (-) se faire en
meme temps.

Merci.


Avatar
Apitos
Bonjour JB,

Quand j'integrerai ton code dnas mon travail rien ne marche ...

Bon voila un exemple :

http://cjoint.com/?ejnCw0xSfQ

Merci.
Avatar
Apitos
Bonjour JB,

Quand j'integrerai ton code dnas mon travail rien ne marche ...

Bon voila un exemple :

http://cjoint.com/?ejnCw0xSfQ

Merci.


Une solution SVP !?

1 2