Copier ou Transposer des données si conditions est respectée
Bonjour à tous,
Mon range qui se compose de plusieurs lignes et colonnes, il peut varier en lignes et colonnes, d’où la nécessité de déterminer sa dernière ligne et sa dernière colonne.
Actuellement, mon Range commence à la cellule "L2" et finit à la cellule "AE23".
Descriptions des données :
La colonne "L" contient les noms des mâles pour mon élevage, la liste des mâles commence à partir de la cellule "L3" jusqu’à la cellule "L23"
La ligne numéro 2 contient les noms des femelles pour mon élevage, la liste des femelles commence à "M2" et finit à "AE2".
Les cellules qui se trouvent dans le range ("M3:AE23") représentent le taux de consanguinité des descendants de chaque mâle du Range ("L2:L23") par rapport à chaque femelle se trouvant dans le range ("M2:AE2")
Ce que je souhaite faire, c’est copier uniquement les noms des mâles en colonne "AG" et des femelles en colonne "AH" dont le taux de consanguinité des descendants est compris entre 0% et <=0.25% .
Comment j’ai déterminé la colonne à partir de laquelle je vais copier mes données ?
Cette colonne est égale à la dernière colonne de mon range ("L2:AE23") + 2, la dernière colonne du Range "L2:AE23" = colonne 31 + 2 = 33, la colonne 33 est la colonne "AG".
Sauf erreur de ma part, vous trouverez le résultat pour le mâle "ABE27-022/2022 M" par rapport à toutes les femelles du range ("M2:AE2") dans les colonnes "AG", "AH" et "AI".
Je me permets de vous demander une solution en vba car je vais utiliser la même Marco (identique) dans d’autres feuilles.
Dans mon exemple, j’ai coloré en rouge les données à ne pas copier et en vert les données à copier.
Je reste à votre disposition pour toute information supplémentaire.
D’avance merci pour vos contributions.
bonjour Harzer,
Sub Consang()
Dim aA, SCA, N, i, j, sp, Tbl
With Sheets("Nouveaux Couples")
With .Range("L2")
i1 = .End(xlDown).Row - .Row + 1 'nombre de lignes
i2 = .End(xlToRight).Column - .Column + 1 'nombre de colonnes
aA = .Resize(i1, i2).Value2 'lire plage
End With
Set SCA = CreateObject("system.collections.arraylist")
For i = 2 To UBound(aA)
For j = 2 To UBound(aA, 2)
If aA(i, j) < 0.25 Then SCA.Add Format(aA(i, j), "0.0000|") & aA(1, j) & "|" & aA(i, 1) 'pourcentage, mère, père
Next
Next
SCA.Sort 'trier SCA ascendant
aA = SCA.toarray 'lire vers matrice
ReDim Tbl(0 To UBound(aA), 0 To 2) 'préparer matrice résultat
For i = 0 To UBound(aA) 'boucler données SCA
sp = Split(aA(i), "|") 'séparer sur le "|"
For j = 0 To 2
If j = 0 Then Tbl(i, 2 - j) = CDbl(sp(j)) Else Tbl(i, 2 - j) = sp(j) 'assigner vers Tbl
Next
Next
With .Range("AG3").Resize(UBound(Tbl) + 1, UBound(Tbl, 2) + 1) 'plage résultat
.Resize(500).ClearContents 'RAZ pour être sûr que la plage est vide
.Value = Tbl 'coller matrice
.Columns(3).NumberFormat = "0.00%" '3eme colonne est pourcentage
End With
End With
End SubEDIT: salut JFL
Bonjour JFL et BsAlv,
Merci pour vos retours.
Je réponds en premier à JFL :
Je ne sais pas du tout utiliser le Power Query, surtout que je dois l’utiliser dans d’autres feuilles du même genre.
Comme je veux toujours apprendre et toucher aux autres outils livrés avec Excel, je souhaite voir votre proposition pour regarder comment vous l’avez construit. En espérant je vais savoir manipuler le Power Query.
En attendant, je vous remercie pour votre retour.
Maintenant je réponds à BsAlv.
J’ai testé votre code, il fonctionne très bien et réponds à mes attentes, cerise sur le gâteau, il s’exécute très rapidement.
Salutations à tous les deux.
Bonjour à tous !
Je ne sais pas du tout utiliser le Power Query, surtout que je dois l’utiliser dans d’autres feuilles du même genre.
Comme je veux toujours apprendre et toucher aux autres outils livrés avec Excel, je souhaite voir votre proposition pour regarder comment vous l’avez construit. En espérant je vais savoir manipuler le Power Query.
Comme demandé, le classeur joint intègre une proposition Power Query.
Celle-ci a été réalisée uniquement via l'interface utilisateur (avec la souris et sans coder !).
Pour prendre connaissance des retraitements (peu nombreux) appliqués : ALT F12. La fenêtre de l'éditeur Power Query s'ouvrira et vous trouverez les retraitements à droite :
Pour chacune des étapes, un code (langage M) a été généré :
Vous apprécierez très certainement la concision du langage ! (Et ce d'autant plus que le code présenté (via IU) n'est pas optimisé...)
L'interface utilisateur permet aux débutants de se familiariser avec l'environnement. C'est une disposition importante avant que de pouvoir coder directement.
EDIT : Il existe, sur le Net, une foultitude de tutoriels. A consulter sans modération !
EDIT 2 : Hello BsAlv !
Bonjour JFL.
Merci pour votre retour et le fichier joint.
J’ai essayé de créer à mon tour un tableau comme le vôtre avec Power Query à partir de mes données réelles mais malheureusement je ne suis pas parvenu.
Il faut dire que mon tableau source est un tableau croisé dynamique.
La question que je me pose est la suivante : peut-on utiliser directement un tableau croisé dynamique comme source de données ?
Merci de votre réponse.
Bien à vous.
Bonsoir à tous !
A ma connaissance, il n'est pas possible d'intégrer un TCD du même classeur. (Chevauchement entre les plages).
Si le TCD est sur un classeur externe, c'est possible d'en lire le contenu. Cela étant, je n'en vois pas l'intérêt. Il est préférable d'intégrer directement la source.
Bonsoir JFL,
Merci pour votre réponse et les explications.
Je vais essayer de faire le même tableau que le vôtre à partir d’un tableau normal, histoire d’apprendre un peu plus sur le Power Query
Salutations et bien à vous.
