Copier une liste sous conditions

Bonjour,
je ne trouve pas la formule qui répond à mon souci.

Je souhaiterais reprendre en feuil2 uniquement les noms des personnes présente ou représenté en feuil1.

soit en language excel =} feuil2 B = feuil1 B si feuil1 E = present ou représenté

Et sans avoir de ligne vide en feuil2.

ci-joint le fichier excel pour être plus clair.

Merci d'avance pour vos solutions.

19teste-1.xlsx (16.85 Ko)

Bonjour,

Ci-contre la réponse à votre problématique par VBA :

Sub FILTRE()
With Worksheets("Feuil1").ListObjects(1)
    .Range.AutoFilter 4, "REPRESENTÉ", xlOr, "PRESENT"
    .ListColumns(1).DataBodyRange.SpecialCells(xlCellTypeVisible).Copy
End With
Worksheets("Feuil2").[B6].PasteSpecial
Worksheets("Feuil1").ShowAllData
End Sub

Cdlt,

Bonjour Ergotamine,

Je ne travail pas en VBA et donc je ne sais pas comment procéder pour inclure la formule à mon tableau.
est-ce possible de me fournir uniquement la formule a inclure en feuil2 B6 et me l'expliquer au passage.

je te remercie pour la réactivité de ta réponse.

Bonjour,

Ce n'est pas une formule mais un code à rentrer dans l'éditeur et à lier à un bouton. Vous trouverez dans ce post la démarche à réaliser.

Cdlt

Ok Merci,

j'ai réussi a appliquer le code.

Par contre, si je comprend bien, ça ne s'actualise pas automatiquement si toutefois un absent devient present en cour de route, il faut impérativement réinsérer la macro? C'est pas tellement un problème, c'est juste pour bien comprendre.

Encore merci

Bonjour,

En effet, après il est possible de le mettre dans une procédure événementielle lorsque vous activez la feuille 2, alors la macro se lance automatiquement comme dans l'exemple joint (insérée dans Feuil2 à la place de Module 1 si vous souhaitez explorer), c'est à vous de voir, l'un est automatique, l'autre nécessite une action mais peut être réalisée quand bon le souhaite.

En y pensant il faut d'abord nettoyer la plage du second tableau avant d'y coller les valeurs sinon, si on a moins de ligne à coller alors on va se retrouver avec des lignes de l'actualisation d'avant. Ci-contre le code modifié :

Sub FILTRE()
Worksheets("Feuil2").ListObjects(1).DataBodyRange.ClearContents
With Worksheets("Feuil1").ListObjects(1)
    .Range.AutoFilter 4, "REPRESENTÉ", xlOr, "PRESENT"
    .ListColumns(1).DataBodyRange.SpecialCells(xlCellTypeVisible).Copy
End With
Worksheets("Feuil2").[B6].PasteSpecial
Worksheets("Feuil1").ShowAllData
End Sub

Cdlt,

merci de ta réponse,

Je suis désolé mais je ne maitrise pas du tout les fonctions macro de excel.

te serait-il possible de m'envoyer le code a inclure afin de l'utiliser sur toutes les autres feuille avec le fichier ci-joint.

c'est meme preferable pour moi de devoir inclure la macro sur chacune des feuille reso. En gros si une personne arrive en cour de route, elle n'apparais pas sur les reso d'avant son arrivé. Et c'est mieux!

encore merci beaucoup.

4ag-copro.xlsx (56.61 Ko)

Bonjour,

Si vous travaillez avec des multi feuilles mieux vaut le mettre dans l'objet Workbook pour ne pas répéter le code X fois et juste ajouter une condition pour exclure la macro de la première feuille :

Private Sub Workbook_SheetActivate(ByVal Sh As Object)
If ActiveSheet.Name <> "feuille de presence" Then
    ActiveSheet.ListObjects(1).DataBodyRange.ClearContents
    With Worksheets("feuille de presence").ListObjects(1)
        .Range.AutoFilter 4, "REPRESENTÉ", xlOr, "PRESENT"
        .ListColumns(1).DataBodyRange.SpecialCells(xlCellTypeVisible).Copy
    End With
    ActiveSheet.[B6].PasteSpecial
    Worksheets("feuille de presence").ShowAllData
End If
End Sub

Et le fichier qui va avec.

Cdlt,

Bonjour,

Cette solution me pose problème. Elle ne me permet pas d'ajouter des formules tel que Recherchv sur autres colonnes du tableau.

je pense que le première solution était la meilleur. Celle qui nécessite d'ajouter la macro sur chaque feuille.

Sub FILTRE() With Worksheets("Feuil1").ListObjects(1) .Range.AutoFilter 4, "REPRESENTÉ", xlOr, "PRESENT" .ListColumns(1).DataBodyRange.SpecialCells(xlCellTypeVisible).Copy End With Worksheets("Feuil2").[B6].PasteSpecial Worksheets("Feuil1").ShowAllData End Sub

Il faudrait donc remplacer ("feuil1") par ("feuille de presence") et ("feuil2") par ("reso 1") mais ajouter également ("reso 2") ("reso 3") etc... c'est cette partie que je n'est pas réussi à appliquer. si je comprenais la logique du des lignes de code je pourrais le faire seul, mais malheureusement j'ai a nouveaux besoin de votre aide..

Merci beaucoup

7ag-copro.xlsx (56.63 Ko)

.




Bonjour,

Je reste sur ma dernière solution qui, j'en suis convaincue sera bien plus facilement maintenable qu'un code par feuille. Si vous souhaitez n'effacer que la première colonne c'est possible, il suffisait de le préciser. Donc un exemple avec le code commenté si vous souhaitez y retoucher par vous même :

Private Sub Workbook_SheetActivate(ByVal Sh As Object)
If Sh.Name <> "feuille de presence" Then 'Si la feuille activée est différente de "feuille de presence"
    Sh.ListObjects(1).ListColumns(1).DataBodyRange.ClearContents 'On nettoie les données présente dans la 1ère colonne du tableau de la feuille active
    With Worksheets("feuille de presence").ListObjects(1) 'Avec le 1er objet de la feuille de presence (donc le tableau)
        .Range.AutoFilter 4, "REPRESENTÉ", xlOr, "PRESENT" 'On filtre sur le 4ème champs les valeurs REPRESENTÉ ou PRESENT
        .ListColumns(1).DataBodyRange.SpecialCells(xlCellTypeVisible).Copy 'On copie les valeurs visibles de la 1ère colonne sans l'en tête
    End With
    Sh.[B6].PasteSpecial 'On colle le presse papier en B6 de la feuille active
    Worksheets("feuille de presence").ShowAllData 'On défiltre le tableau de la feuille de presence
End If
End Sub

Cdlt,

Mille merci,

ça fonctionne très bien comme ça.

je vais essayé de m'interraisser un peux plus aux fonctions Macro. ça à l'air d'ouvrir beaucoup de possibilités.

Encore merci.

bon Week-end.

Rechercher des sujets similaires à "copier liste conditions"