tsikoudia91
XLDnaute Nouveau
Bonjour à tous,
Je voudrais dans un fichier Excel pouvoir copier une sélection de cellules dans une autre feuille avec un ou deux critères de recherche.
J'ai pensé bien sûr à trier les données et ensuite les copier/coller manuellement mais j'ai une centaine de ce type de fichiers à traiter.
J'ai également pensé à la fonction Excel VLOOKUP mais utiliser VBA me semble plus adéquat (ou pas).
Le document ci-joint est volontairement épuré pour ne laisser que les colonnes/feuilles les plus pertinentes.
Mon ficher se présente sous la forme de 4 feuilles.
Google n'étant pas fait que pour les autres, j'ai pu trouver un code VBA qui pouvait copier les données avec un seul critère de recherche mais aussi les données de toute la ligne alors que je voudrais des colonnes spécifiques. Est-il possible de créer un code indiquant qu'il faut copier la ligne SAUF certaines colonnes ?
Ce que je voudrais obtenir, idéalement :
Ne doivent donc pas figurer dans les autres feuilles les formations suivies à l'extérieur car les données exportées serviront à établir des attestations internes.
Les critères de recherche sont dans les colonnes B ("Statut" participant ou intervenant) et D ("Lieu" interne, externe ou e-learning).
Un code figure sur la feuille "E-learning" (un seul critère mais toute la ligne est sélectionnée).
*****
Sub Elearning()
Dim LSearchRow As Integer
Dim LCopyToRow As Integer
On Error GoTo Err_Execute
'on commence la recherche en ligne 2 de la feuille 1
LSearchRow = 2
'on se prépare à copier les données trouvées dans la ligne 2 de la feuille 5
LCopyToRow = 2
While Len(Range("A" & CStr(LSearchRow)).Value) > 0
'Si la valeur dans la colonne D = "E-learning", la ligne entière est copiée en feuille 5
If Range("D" & CStr(LSearchRow)).Value = "E-Learning" Then
'La ligne de la feuille 1 correspondante est sélectionnée et copiée
Rows(CStr(LSearchRow) & ":" & CStr(LSearchRow)).Select
Selection.Copy
'La ligne est collée dans la feuille 5
Sheets("Elearning").Select
Rows(CStr(LCopyToRow) & ":" & CStr(LCopyToRow)).Select
ActiveSheet.Paste
'La ligne suivante de la feuille 1 sera copiée sur la ligne suivante de la feuille 5
LCopyToRow = LCopyToRow + 1
'Retour en feuille 1 pour continuer la recherche
Sheets("Recap").Select
End If
LSearchRow = LSearchRow + 1
Wend
'Position dans la cellule A2
Application.CutCopyMode = False
Range("A2").Select
MsgBox "Les données correspondantes ont été copiées."
Exit Sub
Err_Execute:
MsgBox "Une erreur est survenue."
End Sub
**********
Merci d'avance pour toute l'aide que vous voudrez bien m'apporter.
G.
Je voudrais dans un fichier Excel pouvoir copier une sélection de cellules dans une autre feuille avec un ou deux critères de recherche.
J'ai pensé bien sûr à trier les données et ensuite les copier/coller manuellement mais j'ai une centaine de ce type de fichiers à traiter.
J'ai également pensé à la fonction Excel VLOOKUP mais utiliser VBA me semble plus adéquat (ou pas).
Le document ci-joint est volontairement épuré pour ne laisser que les colonnes/feuilles les plus pertinentes.
Mon ficher se présente sous la forme de 4 feuilles.
- 1ère feuille : "Recap" = toutes les formations suivies.
- 2ème feuille : "Participant" = extraction des formations suivies en tant que participant et seulement en interne
- 3ème feuille : "Elearning" = extraction des formations suivies au moyen du e-learning.
- 4ème feuille : "Intervenant" = extraction des formations suivies en tant que intervenant et seulement en interne
Google n'étant pas fait que pour les autres, j'ai pu trouver un code VBA qui pouvait copier les données avec un seul critère de recherche mais aussi les données de toute la ligne alors que je voudrais des colonnes spécifiques. Est-il possible de créer un code indiquant qu'il faut copier la ligne SAUF certaines colonnes ?
Ce que je voudrais obtenir, idéalement :
- pour la feuille "Participant", les formations suivies en tant que participant ET en interne avec uniquement les données figurant dans les colonnes "Date" "Formation" Durée" (colonnes A, C, E) ;
- pour la feuille "E-learning" les formations suivies au moyen du e-learning avec uniquement les données figurant dans les colonnes "Date" "Formation" Durée" (colonnes A, C, E) ; et
- pour la feuille "Intervenant", les formations suivies en tant qu'intervenant ET en interne avec uniquement les données figurant dans les colonnes "Date" "Formation" Durée" et "Heures validées" (colonnes A, C, E et G).
Ne doivent donc pas figurer dans les autres feuilles les formations suivies à l'extérieur car les données exportées serviront à établir des attestations internes.
Les critères de recherche sont dans les colonnes B ("Statut" participant ou intervenant) et D ("Lieu" interne, externe ou e-learning).
Un code figure sur la feuille "E-learning" (un seul critère mais toute la ligne est sélectionnée).
*****
Sub Elearning()
Dim LSearchRow As Integer
Dim LCopyToRow As Integer
On Error GoTo Err_Execute
'on commence la recherche en ligne 2 de la feuille 1
LSearchRow = 2
'on se prépare à copier les données trouvées dans la ligne 2 de la feuille 5
LCopyToRow = 2
While Len(Range("A" & CStr(LSearchRow)).Value) > 0
'Si la valeur dans la colonne D = "E-learning", la ligne entière est copiée en feuille 5
If Range("D" & CStr(LSearchRow)).Value = "E-Learning" Then
'La ligne de la feuille 1 correspondante est sélectionnée et copiée
Rows(CStr(LSearchRow) & ":" & CStr(LSearchRow)).Select
Selection.Copy
'La ligne est collée dans la feuille 5
Sheets("Elearning").Select
Rows(CStr(LCopyToRow) & ":" & CStr(LCopyToRow)).Select
ActiveSheet.Paste
'La ligne suivante de la feuille 1 sera copiée sur la ligne suivante de la feuille 5
LCopyToRow = LCopyToRow + 1
'Retour en feuille 1 pour continuer la recherche
Sheets("Recap").Select
End If
LSearchRow = LSearchRow + 1
Wend
'Position dans la cellule A2
Application.CutCopyMode = False
Range("A2").Select
MsgBox "Les données correspondantes ont été copiées."
Exit Sub
Err_Execute:
MsgBox "Une erreur est survenue."
End Sub
**********
Merci d'avance pour toute l'aide que vous voudrez bien m'apporter.
G.
Pièces jointes
Dernière édition: