Extraire des données d'un tableau selon un critère (RESOLU)

chajmi

XLDnaute Occasionnel
Bonjour

J'ai un tableau A dans lequel sont saisies des opérations de comptabilité (comptes pour une association).
En fin de mois, je dois envoyer à la compta un tableau B avec uniquement les opérations du mois en cours.

Je voudrais remplir automatiquement le tableau B en indiquant le N° du mois en J2.

Je ne suis pas trop doué dans les tableaux croisés dynamiques.

Quelle solution puis je trouver ?

merci de votre aide
 

Pièces jointes

  • Essai.xlsx
    45.5 KB · Affichages: 56
  • Essai.xlsx
    45.5 KB · Affichages: 65
  • Essai.xlsx
    45.5 KB · Affichages: 56
Dernière édition:

chajmi

XLDnaute Occasionnel
Re : Extraire des données d'un tableau selon un critère

Sub copieAcoté() ' largement inspiré d'un code que l'on m'a fourni sur ce forum (dsl, je ne sais plus qui)
Dim Nblig, TblDépart, i, J, F ' déclaration des variables
Dim TblFiltré() As Variant
'
Set WS1 = Sheets("Feuil1") ' attribution du nom de la feuille à un objet
Nblig = WS1.Range("B65000").End(xlUp).Row ' Nb de lignes (variables) dans tableau de départ
Nbcol = 7 ' dernière colonne à droite (tableau de départ à gauche)
TblDépart = WS1.Range(Cells(7, 2), Cells(Nblig, 8)) ' on place le tout dans tableau départ
For i = LBound(TblDépart) To UBound(TblDépart) ' boucle de 1 à n ligne
If TblDépart(i, 1) = Range("J2").Value Then ' si la valeur est égale à la semaine demandée
F = F + 1
ReDim Preserve TblFiltré(1 To Nbcol, 1 To F) ' redimmensionner la zone
For J = 1 To UBound(TblDépart, 2) ' de 1 à dernière ligne du tableau mémorisé
TblFiltré(J, F) = TblDépart(i, J) ' passage du premier tableau (le complet) vers un second
Next J
End If
Next i
Range("J7:p" & [J65000].End(xlUp).Row).ClearContents ' effacer la zone de destination
[J7].Resize(UBound(TblFiltré, 2), UBound(TblFiltré, 1)) = Application.Transpose(TblFiltré) ' placer le résultat en J7
End Sub

C'est le double clic qui déclenche la macro ?
 

chajmi

XLDnaute Occasionnel
Re : Extraire des données d'un tableau selon un critère

Bonjour à tous,

Avec ce petit bout de code dans le module de la feuille :
VB:
Option Explicit
Private Sub Worksheet_Change(ByVal Target As Range)
    If Target.Address = "$J$2" Then
        Range("B6:H500").AdvancedFilter Action:=xlFilterCopy, CriteriaRange:=Range( _
        "J1:J2"), CopyToRange:=Range("J6:P500"), Unique:=True
    End If
End Sub

Changer la valeur en J2.
Prévu pour 500 lignes

A+ à tous

Pas mal comme solution !

est ce qu'il est possible quel collage se fasse sur une autre feuille ?
Merci
 

QI dhuitre

XLDnaute Junior
Re : Extraire des données d'un tableau selon un critère

Je vous ai fait la feuille SG en "automatique" . Vous sélectionnez votre mois en T4 et en avant guinguamps!

J'ai pas fait la feuille Cs car il y a des cellules fusionnées un peu partout et c'est pas très pratique pour étirer les formules. défusionnez vos cellules, mettez en forme votre bordereau et on trouvera les formules adéquates egalement
 

Pièces jointes

  • Compta.xls
    165 KB · Affichages: 50
  • Compta.xls
    165 KB · Affichages: 45
  • Compta.xls
    165 KB · Affichages: 41

chajmi

XLDnaute Occasionnel
Re : Extraire des données d'un tableau selon un critère

J'ai revu mes feuilles, supprimé les fusions ....
J'ai créé les nouvelles feuilles.
Inséré une feuille tableau de bord, où je choisi le mois pour toutes les feuilles.
ça fonctionne à peu prés, sauf quelques trucs bizarres en colonne D dans les feuilles "LBP" et "CS"
J'ai du modifier quelque chose ?

Merci de votre aide.
 

Pièces jointes

  • Compta(3).xls
    213 KB · Affichages: 44
  • Compta(3).xls
    213 KB · Affichages: 49
  • Compta(3).xls
    213 KB · Affichages: 53

QI dhuitre

XLDnaute Junior
Re : Extraire des données d'un tableau selon un critère

Bonjour chajmi, le forum.

1) Pour les colonne D,changez le format des cellules et choisissez "standard" (au lieu de date) . :)
2) Pour la feuille CS, pour le nom du bénéficiaire c'est :
Code:
=SI(TYPE.ERREUR(DECALER('Opérations annuelles'!$B$4;PETITE.VALEUR(SI((Moisf=MOIS($I$2)*(Mode="CS"));LIGNE(Moisf));LIGNE()-8)-4;5)) = 6;"";DECALER('Opérations annuelles'!$B$4;PETITE.VALEUR(SI((Moisf=MOIS($I$2)*(Mode="CS"));LIGNE(Moisf));LIGNE()-8)-4;5))

:)
 
Dernière édition:

chajmi

XLDnaute Occasionnel
Re : Extraire des données d'un tableau selon un critère

Bonjour chajmi, le forum.

1) Pour les colonne D,changez le format des cellules et choisissez "standard" (au lieu de date) . :)
2) Pour la feuille CS, pour le nom du bénéficiaire c'est :
Code:
=SI(TYPE.ERREUR(DECALER('Opérations annuelles'!$B$4;PETITE.VALEUR(SI((Moisf=MOIS($I$2)*(Mode="CS"));LIGNE(Moisf));LIGNE()-8)-4;5)) = 6;"";DECALER('Opérations annuelles'!$B$4;PETITE.VALEUR(SI((Moisf=MOIS($I$2)*(Mode="CS"));LIGNE(Moisf));LIGNE()-8)-4;5))

:)

Bonjour

Ben évidemment c'est tellement évident que j'en suis ridicule !
Un très grand merci en tout cas, je vais gagner un temps fou dans ma compta de fin de mois.

Sans vouloir abuser, afin de mieux comprendre ce qui se passe avec les formules que vous avez utilisées, est ce que vous pourriez m'en commenter une ? J'aime bien comprendre !
Je travaille sur Excel depuis 1995 environ, mais je suis toujours resté à un niveau amateur et j'avoue que je plafonne souvent.

J'ai plusieurs projets en cours (dont celui là), mais je n'arrive pas à aboutir.

Alors votre intervention me rebooste.
Est ce que je pourrais me permettre de vous solliciter à nouveau, par ce que vous avez l'air de toucher un max ?? Admiration :)

Cordialement

PETITE QUESTION : Je l'ai eu su mais j'ai oublié : comment remet on les accolades dans la formule ?????
 
Dernière édition:

QI dhuitre

XLDnaute Junior
Re : Extraire des données d'un tableau selon un critère

Vous n'avez pas à vous sentir ridicule pour si peu! Je ne touche pas plus que vous en réalité et les formules que je vous ai donné sont toutes assez "simple" ce sont des fonctions si() avec des recherches matricielles.

Je vais essayer de commenter la dernière mais ne m'en voulez pas si je ne suis pas très tangible dans mes explications car c'est difficile d'exprimer une démarche avant tout "mentale"

En premier lieu j'ai écrit :

Code:
SI((Moisf=MOIS($I$2)*(Mode="CS"));LIGNE(Moisf))
moisf : c'est un "nom" qui contient la liste de toutes les valeurs dans la colonne " Mois de facturation"
Pour ça j'ai utilisé la fonction "decaler" (plus d'info ici : https://support.microsoft.com/en-us/kb/830287/fr )
Mois($i$2) = renvoi un numéro de mois (si i2 est une date).

Donc en validation matricielle cela dit :
Si dans la liste moisf (qui est egale aux valeurs contenu dans la colonne mois de facturation 1;1;1;1;1;1;1;2;2;2;2;3;3;3;3;3) il y une valeur égale à Mois($i$2) (donc qui sera égale à un numéro de 1 à 12 car se sont des numéros de mois (janvier = 1, fevrier = 2 ...) alors j'affiche LIGNE(Moisf) qui signifie : j'affiche le numéro de la ligne où il y a la valeur du mois. hum hum..
EUh...

(dans l'exemple 1;1;1;1;1;1;1;1;2;2;2;2;2;3;3;3;3
cela signifie que dans la matrice en ligne 1 il y a un 1, dans la ligne 2 il y a un 1 etc et à la ligne 9 il y a un 2 et à la ligne 14 il y a un trois)(car si vous compter les position dans la matrice vous verrez que le deux est en 9ieme position...)

Je fais abstraction pour le moment de *(mode="CS") pour essayer d'être succint.

donc
Code:
SI((Moisf=MOIS($I$2);LIGNE(Moisf))
ca va renvoyer une "matrice" , un groupe de valeur qui sera égale à {1;2;3;4;7;8} qui sont en réalité les numéros des lignes (dans la colonne mois de facturation) qui sont égales au mois sélectionné dans $i$2.

Comme on veut le détail de toutes ses lignes une a une alors on va utiliser la fonction petite.valeur
cette fonction permet d'afficher la kieme plus petite valeur. Ex: dans {1;2;3;4;5} la deuxième plus petite valeur sera "2".

Donc dans cette formule petite.valeur je vais y intégrer ma matrice (ma formule qui recherche l'équivalence des mois) qui est --> SI((Moisf=MOIS($I$2);LIGNE(Moisf)) et dans le deuxième parametre qui est k, je vais préciser la kieme valeur que je cherche.

Donc si je veux la deuxième plus petite valeur dans notre matrice j'écris :
Code:
=petite.valeur(SI((Moisf=MOIS($I$2);LIGNE(Moisf));2)

Donc dans la cellule où j'écris cette formule j'aurai la deuxième plus petite valeur de la matrice {1;2;3;4;5}.
Les valeurs dans cette matrice, on l'a dit ce sont des numéros de ligne.

Rentre en jeu la fonction "index" qui permet de renvoyer la valeur d'une cellule avec un numéro de ligne.
Exemple : Index(A1:A5;5) signifie que dans la plage A1:A5 on veut la valeur de la 5 ieme case).

Notre ligne qu'on recherche on l'a connait grace à = petite.valeur(SI((Moisf=MOIS($I$2);LIGNE(Moisf));2)
cette formule là " petite.valeur(SI((Moisf=MOIS($I$2);LIGNE(Moisf));2) " c'est celle que l'on va copier dans d'autres formule pour spécifier la ligne qu'on veut.

Donc index(a1:a5;petite.valeur(SI((Moisf=MOIS($I$2);LIGNE(Moisf));2)) va renvoyer A2 car A2 est la deuxième valeur dans l'index...

hum je m'arrête là et si vous n'avez pas trop mal à la tête je continue...SInon il doit exister des tutos sur le net sur les formules matricielles...

Edit 1 : pour les accolades je m'en rappel plus (j'ai eu un mac il y a quelques années mais je l'ai vendu)
Edit 2 : Oui vous pouvez me/nous solliciter pour d'autres projets (quelque part je suis là pour ça...)
 
Dernière édition:

chajmi

XLDnaute Occasionnel
Re : Extraire des données d'un tableau selon un critère

Merci pour cette belle explication.
Je ne comprends pas tous les détails mais ça me donne une vue d'ensemble.

J'ai reconstruit mon fichier avec les éléments que l'on a travaillé ensemble.
J'ai réintégré les données réelles avec le nom des personnes.
Du coup je ne peux pas le transmettre sur le forum.
Est ce que je peux vous le renvoyer en privé ? et comment dois je faire ?

Cordialement
 

Staple1600

XLDnaute Barbatruc
Re : Extraire des données d'un tableau selon un critère

Bonjour à tous


Pour infos:
- DONNEES CONFIDENTIELLES :
Ne laissez
AUCUNE donnée personnelle ou confidentielle (noms, adresses, N° de téléphone, entreprises...) dans vos pièces jointes.
Vous mettriez Excel-Downloads en contravention avec la loi Informatique et Liberté et votre fichier devrait être enlevé.
[avis personnel]
Ce qui vaut pour le forum, vaut pour ses membres, non ? ;)
Mieux vaut éviter de diffuser sur le net des données confidentielles quel qu'en soit le destinataire.
[/avis personnel]

NB: Et quid des éventuels membres désireux de suivre l'évolution de la question et sa résolution ?
Il est plus simple d'utiliser sur le forum une version anonymisée comme celle utilisée depuis le début du fil.
Charge ensuite à toi sur ton PC (et uniquement sur celui-ci) avec Edition/Remplacer de remettre tes vraies données
 
Dernière édition:

chajmi

XLDnaute Occasionnel
Re : Extraire des données d'un tableau selon un critère

Bonjour à tous


Pour infos:

[avis personnel]
Ce qui vaut pour le forum, vaut pour ses membres, non ? ;)
Mieux vaut éviter de diffuser sur le net des données confidentielles quel qu'en soit le destinataire.
[/avis personnel]


Puis je donner une adresse mail perso à QI huitre pour correspondre directement, ou y a t il une autre solution ?
Pour ce qui est de ma question initiale sur le forum, elle est résolue et je ne sais pas comment fermer le post.
Merci de votre répons.
 

Discussions similaires

Statistiques des forums

Discussions
312 332
Messages
2 087 362
Membres
103 530
dernier inscrit
Chess01