Regrouper données de 2 colonnes selon valeurs ds cellules de la 2e ligne

Bonjour à Tous,

Malgré plusieurs tentatives, impossible de trouver la bonne solution et c’est pour cela que je m’adresse à vous.

Je vous demande si c’est possible d’avoir une solution avec un code vba

Voici les détails de ma demande :

La zone où sont stockés les informations sont : La Colonne ‘BX’ et colonne ‘BZ’, leurs longueurs est variable.

La colonne BY contient des formules servant à autre chose, ne pas prendre donc cette colonne en considération.

La colonne BX, regroupe toutes les cellules finissant par l’année de naissance des sujets ainsi que leurs sexes, dans ce cas, c’est la lettre F pour sujets Féminins

La colonne BZ, regroupe toutes les cellules finissant par l’année de naissance des sujets ainsi que leurs sexes, dans ce cas, c’est la lettre M pour sujets masculins

Les critères de recherche se trouvent dans les cellules suivantes : (CC2 jusqu’à CN2), ils changent selon les années et c’est l’utilisateur qui les mentionne.

Prenons un exemple :

Je cherche la valeur dans la cellule CC2, il s’agit de la valeur : "2012 M", il s’agit donc d’un sujet né en 2012 et de sexe Masculin.

Comme il s’agit d’un sujet d’un sexe masculin, on va chercher seulement dans la colonne BZ.

Les cellules finissant par ce critère sont au nombre de 3, on le retrouve exactement dans les cellules suivantes : BZ5, BZ11 et BZ65. On va récupérer les valeurs de ces 3 cellules pour les mettre dans la colonne CC, à partir de la ligne 3.

On fait de même pour les valeurs à se trouvant dans les cellules CD2 jusqu’à CN2.

Je reste à votre disposition pour d’autres informations.

Merci d’avance.

15regroupe.xlsm (19.58 Ko)

Salut Harzer,

une façon de faire...

  • tu modifies une valeur de [CC2] à ... et le calcul s'actualise ;
  • tu double-cliques sur n'importe quelle valeur de [CC2 à ... et toutes les colonnes sont recalculées.
Public Sub Recherche(ByVal sSexe As String, iCol As Integer)
'
sCol = IIf(sSexe = "F", "BX", "BZ")
iRow = Range(sCol & Rows.Count).End(xlUp).Row
sCol1 = Split(Columns(iCol).Address(ColumnAbsolute:=False), ":")(1)
'
iLig = Range(sCol1 & Rows.Count).End(xlUp).Row
Range(sCol1 & 3 & ":" & sCol1 & IIf(iLig < 3, 3, iLig)).ClearContents
For x = 3 To iRow
    If Right(Range(sCol & x), 6) = Cells(2, iCol) Then
        iLig = IIf(Range(sCol1 & 3).Value <> "", Range(sCol1 & 2).End(xlDown).Row + 1, 3)
        Cells(iLig, iCol) = Range(sCol & x).Value
    End If
Next
Columns(sCol1).AutoFit
'
End Sub

A tester, comme on dit...

Joyeuses Fêtes

15regroupe.xlsm (25.64 Ko)

Bonjour curulis57,

Merci pour votre contribution,

A vrai dire, le code que vous me proposer fonctionne parfaitement sur le fichier que j’ai mis, ce dernier ne comporte aucun code, si ce n’est ce que vous me proposer.

Pour résoudre certains problèmes sur mon fichier (qui est assez lourd), j’ai déjà utilisé les traitements suivants :

Private Sub Worksheet_BeforeDoubleClick

Private Sub Worksheet_Change

Private Sub Worksheet_SelectionChange

Lorsque j’ai ajouté le code que vous avez mis pour Private Sub Worksheet_BeforeDoubleClick, à celui qui existait déjà, résultat : il n’y a plus rien qui fonctionne, ni le code de Private Sub Worksheet_BeforeDoubleClick qui existait et qui fonctionnait chez moi avant, ni le vôtre.

Pour apporter une solution à mon fichier, y’aurait-il pas moyen de résoudre ce problème avec des boucles qui parcourt les deux colonnes pour mettre les résultats dans les colonnes concernées ?

Cordiale poignée de mains.

Bien à vous.

Salut Harzer,

ce sont déjà des boucles...

Mais, on peut "fusionner" les événements de façon appropriée.

Envoie les procédures en expliquant leur fonction et j'essaierai de faire ça au mieux.

A+

Bonjour,

J'ai allégé ma feuille ('oiseaux') en enlevant toutes les informations superflues.

J'ai laissé mon code comme il était avant de faire la demande.

Vous trouverais en pièce jointe le nouveau fichier dans la feuille 'oiseaux' et c'est à l'intérieur de cette dernière qu'il est souhaitable de fusionner les deux codes afin qu'il puisse cohabiter ensemble.

Bonne programmation.

Merci de votre soutien.

14regroupe-v1.xlsm (463.28 Ko)

Bonjour

Attention j'ai supprimé toutes les macros et n'ai gardé que la mienne qui fait ce que tu demandes

Teste ce fichier et remet si nécessaire les macros qui te sont utiles ma macro s'appelle remplir , tu peux l'exécuter à partir de ton bouton dans feuil1

28regroupe-v2.xlsm (435.52 Ko)

Joyeux Noël

A +

Bonjour Patty5046 et le forum,

Merci pour votre réponse.

J’ai inclus votre code au mien, il fonctionne sans aucun problème sauf qu’il est très très lent à s’exécuter et pourtant la longueur des deux colonnes n’est pas conséquente.

Je continue à chercher de mon coté à trouver une solution, en espérant qu’une âme charitable en ce jour de Noël me propose une solution plus rapide

Joyeux Noël à vous aussi et à tous les membres.

Bonjour

Peux-tu me joindre ton fichier entier avec tes macros incorporées à la mienne afin que j'y mette le nez pour essayer de comprendre de ce qui ralentit

Merci

Pas trop dur le réveillon ??

A+

Bonsoir Patty5046,

Le réveillon s’est bien passé (Merci) en famille, entourés des enfants et petits-enfants et espère pour vous de même.

Je me suis emmêlé les pinceaux en faisant mes premiers tests.

J’ai refait les tests bien tranquillement et surtout en partant sur de bonne base et là tout fonctionne correctement. Pour moi le problème est résolu grâce à vous.

Merci pour votre soutien et votre patience.

D’avance je vous souhaite une bonne fin d’année et un bon début également.

Cordiale poignée de mains.

Rechercher des sujets similaires à "regrouper donnees colonnes valeurs ligne"