XL 2013 Copie automatique sous condition, d'une cellule d'un onglet vers un autre

Luc MOUNY

XLDnaute Junior
Bonjour à tout le forum,

Je viens de me "récupérer" une nouvelle casquette, je suis devenu trésorier adjoint d'une association. ma mission consiste à collecter les adhésions des membres, environ 300.

Je sèche depuis plusieurs jours sur un problème : J'ai un onglet appelé RECAP et un autre ADHESIONS 2020.
Le hic, ma BDD RECAP et mon onglet AdDHESIONS 2020 ne possèdent pas la même structure.

Est-il possible de copier sous condition le contenu d'une cellule de RECAP vers une Cellule de ADHESION 2020 par formule ou VBA ?

le fichier joint sera je pense plus explicite.

Si une âme charitable pouvait m'aider, je lui en serai reconnaissant.

Je vous remercie par avance.
 

Pièces jointes

  • ClasseurTest liaison 2 bdd.xlsx
    13.8 KB · Affichages: 11
Solution
Re,
Sans macro. Les formules en colonne E étant matricielles, elles doivent être validées par ALT+CTRL+Entrée :
VB:
= SIERREUR(SI(INDEX(Recap!Y:Y;EQUIV( 1; (Recap!C:C =GAUCHE(B2;CHERCHE(" "; B2; 1)-1)) * (Recap!D:D =STXT(B2;CHERCHE(" "; B2; 1)+1;100)); 0))=0;"";INDEX(Recap!Y:Y;EQUIV( 1; (Recap!C:C =GAUCHE(B2;CHERCHE(" "; B2; 1)-1)) * (Recap!D:D =STXT(B2;CHERCHE(" "; B2; 1)+1;100)); 0)));"")
Perso, je préfère la version VBA. :)

sylvanu

XLDnaute Barbatruc
Supporter XLD
Bonjour Lus,
Un essai en PJ ... avec une macro événementielle :
VB:
Sub Worksheet_Change(ByVal Target As Range)
On Error GoTo Fin
    If Target.Count > 1 Then Exit Sub
    If Not Intersect(Target, Range("Y2:Y500")) Is Nothing Then
        Nom = Cells(Target.Row, 3) & " " & Cells(Target.Row, 4)
        IndexW = Application.Match(Nom, Sheets("Adhésions 2020").Range("B1:B500"), 0)
        Sheets("Adhésions 2020").Cells(IndexW, 6) = Target
    End If
Fin:
End Sub
 

Pièces jointes

  • ClasseurTest liaison 2 bdd.xlsm
    20.1 KB · Affichages: 10

sylvanu

XLDnaute Barbatruc
Supporter XLD
Re,
Sans macro. Les formules en colonne E étant matricielles, elles doivent être validées par ALT+CTRL+Entrée :
VB:
= SIERREUR(SI(INDEX(Recap!Y:Y;EQUIV( 1; (Recap!C:C =GAUCHE(B2;CHERCHE(" "; B2; 1)-1)) * (Recap!D:D =STXT(B2;CHERCHE(" "; B2; 1)+1;100)); 0))=0;"";INDEX(Recap!Y:Y;EQUIV( 1; (Recap!C:C =GAUCHE(B2;CHERCHE(" "; B2; 1)-1)) * (Recap!D:D =STXT(B2;CHERCHE(" "; B2; 1)+1;100)); 0)));"")
Perso, je préfère la version VBA. :)
 

Pièces jointes

  • ClasseurTest liaison 2 bdd_2.xlsx
    14.3 KB · Affichages: 4

Luc MOUNY

XLDnaute Junior
Rebonjour le forum et Sylvanu,

Pour faire les différents essais, de la version VBA,
J'ai effacé à plusieurs reprises la colonne Y de l'onglet Recap, pendant les 4, ou 5 premiers essais, si j'efface une ou plusieurs cellules contenant un *, la cellule concernée de l'onglet Adhésion s'efface aussi. après le 5ème essai, les cellules de la colonne F de l'onglet Adhésions ne s'effacent plus.
Par contre, je n'ai rencontré ce genre de problême problème avec la formule matricielle.
J'aurai moi aussi eu une préférence pour la version VBA.

Merci pour le temps passé pour débrouiller mon souci.

Je crois que je vais me diriger vers la formule matricielle.
 

sylvanu

XLDnaute Barbatruc
Supporter XLD
Généralement on traite pas des plages complètes, d'où cette ligne que j'ai mis par réflexe.
Une nouvelle macro :
VB:
Sub Worksheet_Change(ByVal Target As Range)
On Error GoTo Fin
    If Not Intersect(Target, Range("Y2:Y500")) Is Nothing Then
        DerLig = Range("B65500").End(xlUp).Row
        For i = 2 To DerLig
            Nom = Cells(i, 3) & " " & Cells(i, 4)
            IndexW = Application.Match(Nom, Sheets("Adhésions 2020").Range("B1:B500"), 0)
            Sheets("Adhésions 2020").Cells(IndexW, 6) = Cells(i, 25)
        Next i
    End If
Fin:
End Sub
A chaque clic dans Y2:Y500 on réactualise tout Adhésions 2020.
En espérant que ça colle.
 

Pièces jointes

  • ClasseurTest liaison 2 bdd V3.xlsm
    20.2 KB · Affichages: 9

Luc MOUNY

XLDnaute Junior
Effectivement Sylvanu, c'est la réflexion que je me suis fait, sur ma base de données, j'ai déjà 160 adhésions enregistrées, je me vois mal les effacer pour avoir le plaisir de les re saisir, Donc telle qu'est la première mouture, il fonctionne parfaitement.
Néanmoins, je vais tester la seconde, car l'année prochaine, il me faudra effacer toute la colonne pour commencer une nouvelle année. Pour moi ma demande est résolue.
Merci encore pour le temps que tu as bien voulu me consacrer.
 

sylvanu

XLDnaute Barbatruc
Supporter XLD
La seconde version répond bien à un effacement de plage.

L'inconvénient de cette méthode par rapport à la première est qu'à chaque action sur la colonne Y on est obligé de traiter toute la colonne et non seulement la cellule cliquée.
En PJ le même fichier avec 300 Noms. En fait le calcul n'est pas trop long, et est même quasi "invisible". C'était le danger d'un tel traitement sur 300 lignes.
 

Pièces jointes

  • ClasseurTest liaison 2 bdd V4.xlsm
    34.6 KB · Affichages: 7

Discussions similaires