extractions en VBA

jcf6464

XLDnaute Occasionnel
bonsoir, le forum

le VBA et moi cela fait 2

je n'arrive pas à faire fonctionner cette extraction trouver sur le net,

je désire récupérer des informations relative suivant schéma

N°""Nom""Prénom "Rando" "ALPI" "Escalade" "Via Ferrata" "VTT" "Canyon" "Alpi hiver" "RQT" "Hiver""SKI ALPI hiver"

1 le nom
2 le prénom
3 le x suivant les catégories activités

merci d'avance

fichier ci-joint

jcf64
 

Pièces jointes

  • Essai_extractions_V1.xlsm
    38.8 KB · Affichages: 47
Dernière édition:

Robert

XLDnaute Barbatruc
Repose en paix
Re : extractions en VBA

Bonjour le fil, bonjour le forum,

Ton code ne pouvait pas fonctionner car il utilisait un [Tableau] et les cellules de la plage nommée TableauP n'étaient pas un tableau mais une plage normale. J'ai donc créé un tableau (Tableau1) et utilisé la macro événementielle BeforeDoubleClick qui agit au double-clic dans l'onglet TrieActivités.
Le filtre se fait au double-clic dans une des cellules de la plage D1:L1. Les données sont effacées au double-clic dans la celluel B1.
Le code :

Code:
Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean) 'au double-clic dans l'onglet
If Target.Address = "$B$1" Then 'si le double-clic a lieu dans la cellule B1
    Cancel = True 'évite le mode étition lié au double-clic
    Range("D2:L2").Clear 'efface les "x:  dans la ligne des critères
    Range("A6:L" & Application.Rows.Count).Clear 'vide les éventuelles anciennes données
    Exit Sub 'sort de la procédure
End If
'si le double-clic a lieu ailleurs que dans dans la plage D1:L1; sort de la procédure
If Application.Intersect(Target, Range("D1:L1")) Is Nothing Then Exit Sub
Cancel = True 'évite le mode étition lié au double-clic
Range("D2:L2").Clear 'efface les "x:  dans la ligne des critères
Target.Offset(1, 0).Value = "x" 'met un "x" dans la cellule en-dessous de la cellue double-cliquée
Range("A6:L" & Application.Rows.Count).Clear 'efface d'éventuelles anciennes données
'filtre avancé du tableau [Tableau1], avec comme critère la cellule double-cliquée et la cellule en dessous, copie dans la plage A5:L5
Sheets("Participants").Range("Tableau1[#All]").AdvancedFilter xlFilterCopy, Range(Target, Target.Offset(1, 0)), Range("A5:L5"), Unique:=True
End Sub
Le fichier :
 

Pièces jointes

  • JCF_v01.xlsm
    38.8 KB · Affichages: 48
Dernière édition:

jcf6464

XLDnaute Occasionnel
Re : extractions en VBA

Bonsoir Robert,

merci de ta réponse cela me va très bien, je vais faire les éditions

Mais je voudrais comprendre ce code (Nettoyage)
Sub Nettoyage()
Set F1 = Sheets("TrieActivités")
maplage = [H13].Value
F1.Range(maplage).Clear

End Sub

F1
H13
maplage

bonne soirée au forum

merci jcf64
 

Robert

XLDnaute Barbatruc
Repose en paix
Re : extractions en VBA

Bonsoir JCF, bonsoir le forum,

Je pense que tu as pioché des bouts de code à droite, à gauche, pour obtenir quelque chose de si peu cohérent !...
D'abord, pour bien comprendre le code, je rajoute la déclaration des variables en haut du module :

Code:
Option Explicit
Dim mondico
Dim f, a, F1()
Déjà les variables sont mal déclarées puisque le type n'est pas spécifié et donc elle prennent le type par défaut qui est Variant.
• La variable mondico devrait être déclarée de type Object si, comme je le pressens, elle est issue d'un code de Jacques BOISGONTIER... Mais comme elle n'est pas utilisée dans le code elle ne devrait même pas figurer...
• Idem pour la variable f, déclarée mais non utilisée. On peut la supprimer.
• Idem pour la variable a, déclarée mais non utilisée. On peut la supprimer.
• et, banane sur le gâteau, F1 déclarée non pas comme une variable mais comme un tableau de variables indexées avec ().
Ça, se sont les premières incohérences...
Ensuite le code :

Code:
Sub Nettoyage()
Set F1 = Sheets("TrieActivités")
maplage = [H13].Value
F1.Range(maplage).Clear
'F1.Range("C8:E" & [C65536].End(xlUp).Row).Clear
End Sub
• La variable F1 est définie comme un onglet ce qui est complètement incohérent avec sa déclaration (tableau)...
• la variable maplage, qui n'est pas déclarée, correspond à la valeur de la cellule H13 (de quel onglet ? Ça n'est pas spécifié d'où risque de plantage...). Cela sous entend que la valeur de la cellule H13 doit contenir un mot correspondant à une plage nommée. Par exemple, la plage A1:A50 a été nommé Clients et la valeur de la cellule H13 est Clients.
• du coup, la plage nommé Clients de l'onglet F1 va être effacée par la ligne : F1.Range(maplage).Clear
Voilà comment j'aurais écrit le code :

Code:
Sub Nettoyage()
Dim F1 As Object 'déclare la variable F1 de type Object
Dim maplage As String 'déclare la variable maplage de type texte

Set F1 = Sheets("TrieActivités") 'définit l'onglet F1
maplage = F1.Range("H13").Value 'définit le texte maplage
F1.Range(maplage).Clear 'efface le contenu de la plage nommée (nom = texte dans la cellule H13) de l'onglet F1
End Sub
Il est vrai qu'avec tant d'incohérence tu ne risques pas de comprendre...
 

Discussions similaires

Membres actuellement en ligne

Aucun membre en ligne actuellement.

Statistiques des forums

Discussions
312 177
Messages
2 085 972
Membres
103 073
dernier inscrit
MSCHOE16