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.

Bonsoir à tous !

Si VBA n'est pas un horizon indépassable, sachez que via Power Query et en quelques clics, on obtient ceci :

image

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 Sub

EDIT: 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 :

image

Pour chacune des étapes, un code (langage M) a été généré :

image

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.

Rechercher des sujets similaires à "copier transposer donnees conditions respectee"