Vous utilisez un navigateur obsolète. Il se peut que ce site ou d'autres sites Web ne s'affichent pas correctement. Vous devez le mettre à jour ou utiliser un navigateur alternatif.
Extraire des données d'un tableau selon un critère (RESOLU)
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.
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" & [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
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
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
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 ?
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 :
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 :
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 ?????
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 :
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...)
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 ?
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
[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.
Ce site utilise des cookies pour personnaliser le contenu, adapter votre expérience et vous garder connecté si vous vous enregistrez.
En continuant à utiliser ce site, vous consentez à notre utilisation de cookies.