XL 2016 Transfert de données sous conditions

olivier.leconte

XLDnaute Nouveau
Bonjour a vous,

Je sollicite votre aide après plusieurs échecs, j'ai déjà regardé plusieurs aides sur le sujet mais aucune ne correspond a mon besoin. J'étais partis sur une fonction si et dynamique croisé mais échec. J'ai tenté les macro mais après plusieurs tutos je suis encore plus perdu.

Dans ma feuille base de données (anonymée) je rentre la colonne Nom, prénom, date de naissance, âge (formule), téléphone et date bilan et je mets un X dans les colonnes correspondant aux ateliers auxquelles les personne vont.

Mon objectif et que les Nom, prénom, date de naissance, âge, téléphone et date bilan soit automatiquement retransférés dans le feuilles correspondantes aux ateliers auxquels ils participent. Une ligne est susceptible d'être copier dans plusieurs autres feuilles. Cette base de données est enrichis régulièrement de nouvelles personnes.

Dans ces feuilles nous rajouterons manuellement le numéro du groupe, le mois du début de l'atelier, puis les dates des ateliers.

En vous remerciant pour l'aide ou les astuces que vous pourriez me fournir. ou un lien si la question a déjà été traité antérieurement.

Olivier
 

Pièces jointes

  • repartition activitées.xls
    61.5 KB · Affichages: 3
Solution
Bonjour Olivier, et bienvenu sur XLD,
Un essai en PJ avec cette macro :
VB:
Sub Exporter()
Application.ScreenUpdating = False
For L = 2 To [A1000].End(xlUp).Row                              ' Pour toutes les lignes
    For C = 7 To 20                                             ' De la colonne G à T
        If LCase(Cells(L, C)) = "x" Then                        ' Si l'atelier est concerné
            Nom = Cells(L, "A")                                 ' On récupère le nom
            Feuille = Cells(1, C)                               ' et le nom de l'activité
            With Sheets(Feuille)                                ' Avec la feuille correspondante à l'atelier
                If Application.CountIf(.[C:C], Nom) = 0 Then    ' Si le...

sylvanu

XLDnaute Barbatruc
Supporter XLD
Bonjour Olivier, et bienvenu sur XLD,
Un essai en PJ avec cette macro :
VB:
Sub Exporter()
Application.ScreenUpdating = False
For L = 2 To [A1000].End(xlUp).Row                              ' Pour toutes les lignes
    For C = 7 To 20                                             ' De la colonne G à T
        If LCase(Cells(L, C)) = "x" Then                        ' Si l'atelier est concerné
            Nom = Cells(L, "A")                                 ' On récupère le nom
            Feuille = Cells(1, C)                               ' et le nom de l'activité
            With Sheets(Feuille)                                ' Avec la feuille correspondante à l'atelier
                If Application.CountIf(.[C:C], Nom) = 0 Then    ' Si le nom n'existe pas dans la feuille
                    PL = .[C65500].End(xlUp).Row + 1            ' Première ligne où écrire
                    For Colonne = 1 To 5                        ' On recopie les 5 valeurs
                        .Cells(PL, Colonne + 2) = Cells(L, Colonne)
                    Next
                End If
            End With
        End If
    Next C
Next L
End Sub
J'ai modifié l'âge de façon à avoir vraiment l'âge en nombre et pas sous forme de format de cellule, avec :
Code:
=ENT((AUJOURDHUI()-C2)/365.25)
 

Pièces jointes

  • repartition activitées V2.xls
    117 KB · Affichages: 7
Dernière édition:

olivier.leconte

XLDnaute Nouveau
Bonjour Olivier, et bienvenu sur XLD,
Un essai en PJ avec cette macro :
VB:
Sub Exporter()
Application.ScreenUpdating = False
For L = 2 To [A1000].End(xlUp).Row                              ' Pour toutes les lignes
    For C = 7 To 20                                             ' De la colonne G à T
        If LCase(Cells(L, C)) = "x" Then                        ' Si l'atelier est concerné
            Nom = Cells(L, "A")                                 ' On récupère le nom
            Feuille = Cells(1, C)                               ' et le nom de l'activité
            With Sheets(Feuille)                                ' Avec la feuille correspondante à l'atelier
                If Application.CountIf(.[C:C], Nom) = 0 Then    ' Si le nom n'existe pas dans la feuille
                    PL = .[C65500].End(xlUp).Row + 1            ' Première ligne où écrire
                    For Colonne = 1 To 5                        ' On recopie les 5 valeurs
                        .Cells(PL, Colonne + 2) = Cells(L, Colonne)
                    Next
                End If
            End With
        End If
    Next C
Next L
End Sub
J'ai modifié l'âge de façon à avoir vraiment l'âge en nombre et pas sous forme de format de cellule, avec :
Code:
=ENT((AUJOURDHUI()-C2)/365.25)[/CO
[/QUOTE]
Le transferts ce fait super bien merci beaucoup.
J ai juste une difficulté car quand j'ai des personnes avec le même nom de famille, il ne me prend que le premier, les autres sont ignorés  ':)
 

Discussions similaires

Statistiques des forums

Discussions
314 727
Messages
2 112 264
Membres
111 478
dernier inscrit
Excel_INFO