Copier coller suivant plusieurs critères

jacky49

XLDnaute Impliqué
Bonjour le forum,

Dans le classeur Essai Copier coller, j'ai un tableau que je voudrais copier dans le classeur Inscrits suivant la colonne I qui est Catégorie. Par ex, j'ai copier manuellement les 2 premières lignes du classeur Essai Copier coller du tableau suivant la catégorie qui est SmiF, je les ai copier dans le classeur Inscrits et dans la feuille SMF,et j'ai fait de même pour la catégorie SmiG que j'ai copier dans la feuille SMG du classeur Inscrits et il faut que je fasse pareill pour toute les catégorie en sachant que pour les J et SH,il faut les copier dans la même feuille qui est JSH et idem pour J et SF , VH1 et VH2 , VF1 et VF2 , je voulais savoir si l'on pouvait le faire en VBA
en espérant avoir été assez explicite
merci d'avance
jacky
 

Pièces jointes

  • Essai Copier coller.xlsx
    22.2 KB · Affichages: 47
  • Inscrits.xls
    515 KB · Affichages: 63
  • Inscrits.xls
    515 KB · Affichages: 59
Dernière édition:

Modeste

XLDnaute Barbatruc
Re : Copier coller suivant plusieurs critères

Bonjour jacky49,

Oui c'est possible (il y a déjà de nombreux exemples sur le forum; tu n'en as pas trouvé en faisant une recherche?)

Si les colonnes concernées ne sont pas toutes celles du fichier source, sans doute le filtre avancé sera-t-il le plus simple à mettre en œuvre (peut-être pas le plus performant, s'il y a vraiment beaucoup de données!? à toi de voir!)

Ce qui serait plus simple (là, c'est certain :)) serait que les noms des feuilles du classeur "Inscrits" soient identiques aux catégories du classeur source.
Attention dans Inscrits, tu as des feuilles masquées dont le contenu n'a pas été anonymisé! Merci de retirer ce dernier et de le remplacer.

Que fait-on s'il y a déjà des données dans le classeur Inscrits? Il n'est pas supposé y en avoir avant que la macro ne démarre?
 

jacky49

XLDnaute Impliqué
Re : Copier coller suivant plusieurs critères

Bonsoir le Forum, Modeste,

oui j'ai recherché un peu mais pas trouvé exactement ce que je veux, par contre merci pour le fichier, j'ai supprimer les feuilles masquées qui ne servaient plus et supprimer les données à masquer, et j'ai renommer les onglets du classeur Inscrits comme le classeur source .
S'il y a déjà des données, on les supprimes et on les remplaces par le dernier copier coller car c'est de toute façon le dernier copier coller qui me servira, entre temps, cela me permettra de faire des essais
merci d'avance pour ton aide
Jacky
 

CHALET53

XLDnaute Barbatruc
Re : Copier coller suivant plusieurs critères

Bonsoir

un essai

Comme le dit Modeste, il faut structurer le fichier Inscrits à l'identique

A voir

a+
 

Pièces jointes

  • Jacky49 Essai Copier coller.xlsm
    38.6 KB · Affichages: 38
Dernière édition:

jacky49

XLDnaute Impliqué
Re : Copier coller suivant plusieurs critères

Bonsoir le forum, Chalet53,

merci beaucoup, cela fonctionne, et j'avais rectifier le fichier dans le 1er message, si tu pouvais donc supprimer le fichier inscrits dans ton message car celui-ci a des données que j'avais oublié d'enlever, je continues mes essais, mais pour le moment, tout fonctionne et je t'en remercie
jhacky
 

Modeste

XLDnaute Barbatruc
Re : Copier coller suivant plusieurs critères

Re,
Bonjour CHALET53,

Comme j'y ai travaillé je dépose tout de même (pas comparé avec le code de CHALET53)

J'ai transformé le fichier Inscrits en un xlsx (il faudra adapter si des macros y sont indispensables). Ce dernier doit être ouvert avant lancement de la macro.

Il reste des discordances entre les catégories du fichier source et les noms de feuilles du classeur Inscrits.: pas de feuilles JF, JH, SF, VH2, notamment

À peaufiner, sans aucun doute!

Coller le code ci-dessous dans un module standard dans le fichier Essai copier-coller:
VB:
Sub dispatchCategories()
Set liste = CreateObject("scripting.dictionary")
With Feuil1
    'dresser une liste sans doublons des catégories en colonne I
    For lig = 2 To .Cells(Rows.Count, 9).End(xlUp).Row
        liste(.Cells(lig, 9).Value) = ""
    Next lig
    
    'filtre avancé sur base de chaque entrée du dico
    For Each k In liste.keys
        .[Z2] = k
        .[A1].CurrentRegion.AdvancedFilter Action:=xlFilterInPlace, criteriaRange:=.[Z1:Z2]
        Workbooks("Inscrits.xlsx").Sheets(k).[B5].Resize(100, 16).ClearContents
        .[B1].Resize(500, 16).SpecialCells(xlCellTypeVisible).Copy Workbooks("Inscrits.xlsx").Sheets(k).[B4] '500 à adapter (dernière ligne potentiellement garnie)
    Next k
End With
End Sub

[Edit:] J'oubliais de préciser: dans la feuille source, en Z1, recopier le titre de la colonne "Catégorie" et laisser vides les cellules alentour.
 
Dernière édition:

jacky49

XLDnaute Impliqué
Re : Copier coller suivant plusieurs critères

Bonjour le forum, Chalet53, modeste,

ton code me trie le tableau et me copie seulement les SmiF
merci quand même de ton aide, celui de Chalet fonctionne donc je vais m'en servir
merci à tous
jacky
 

Modeste

XLDnaute Barbatruc
Re : Copier coller suivant plusieurs critères

Bonjour,

Je ne doute pas que le code de CHALET53 fonctionne, mais je viens de re-tester ma proposition et les feuilles du fichier Inscrits se garnissent bien des enregistrements filtrés par catégorie (en dehors des 4 feuilles mentionnées dans mon message).
Serait-il possible que ce soit toi qui aies oublié quelque chose?
 

CHALET53

XLDnaute Barbatruc
Re : Copier coller suivant plusieurs critères

Bonjour à tous,

Petite précision quand même
Il existe peut-être encore des risques de plantage (n'ayant pas poussé très loin les tests)
Notamment, si la feuille n'existe pas dans le fichier Inscrits.xls, il y aura plantage

a+
 

CHALET53

XLDnaute Barbatruc
Re : Copier coller suivant plusieurs critères

Bon allez un petit effort supplémentaire : Contrôle de l'existence de la feuille
Remplace le code du module 1 par celui-ci
Teste en remplaçant, par exemple : SMG par toto

Sub copieInscrit()
Randomize
Dim NomFeuille As String, Reponse As Boolean
Application.ScreenUpdating = False
Dim tab_bd()
Dim tab_insc()
Sheets("Internationale_des_3_Routes").Activate
A = ActiveSheet.Name
derli = Sheets("Internationale_des_3_Routes").Range("A65536").End(xlUp).Row
ReDim tab_bd(derli - 1, 17)
tab_bd() = Range("B2:R" & derli)

derli = Sheets("Feuil1").Range("B65536").End(xlUp).Row
ReDim tab_insc(derli - 1, 2)
Sheets("Feuil1").Activate
tab_insc() = Range("B3:C" & derli)

'MsgBox LBound(tab_bd, 1) '=> renvoie : 10
Windows("Inscrits.xls").Activate

For Each Feuille In ActiveWorkbook.Sheets
For j = LBound(tab_insc, 1) To UBound(tab_insc, 1)
Feuille = tab_insc(j, 2)
' Stop
NomFeuille = Feuille
Reponse = FeuilleExiste(NomFeuille)
If Reponse = False Then MsgBox ("La feuille " & NomFeuille & " n'existe pas , veuillez la créer "): Exit Sub

With Sheets(Feuille)
derli = Sheets(Feuille).Range("E65536").End(xlUp).Row
If derli < 5 Then derli = 5
.Range("B5:R" & derli).ClearContents
End With

Next j
Next Feuille
' Stop
For n = LBound(tab_bd, 1) To UBound(tab_bd, 1)
'Stop
cat = tab_bd(n, 8)
'If cat = "PF" Then Stop

For j = LBound(tab_insc, 1) To UBound(tab_insc, 1)
If cat = tab_insc(j, 1) Then
Feuille = tab_insc(j, 2)

Exit For
End If
Next j
'Stop
With Sheets(Feuille)
derli = Sheets(Feuille).Range("E65536").End(xlUp).Row + 1
If derli < 4 Then derli = 4

For m = 2 To 18
.Cells(derli, m) = tab_bd(n, m - 1)
Next
End With
Next
'Stop

End Sub
Function FeuilleExiste(MaFeuille As String) As Boolean

Dim Feuil As Worksheet

FeuilleExiste = False
For Each Feuil In Worksheets
If (Feuil.Name = MaFeuille) Then
FeuilleExiste = True
End If
Next Feuil

End Function
 

jacky49

XLDnaute Impliqué
Re : Copier coller suivant plusieurs critères

Bonsoir le Forum, Modeste, Chalet,

Modeste, je ne vois pas , à part que mon fichier inscrit est en excel 97-2003, c'est peut-être pour ceci
Chalet, merci beaucoup, cela fonctionne impeccable
jacky
 

Modeste

XLDnaute Barbatruc
Re : Copier coller suivant plusieurs critères

Modeste, je ne vois pas , à part que mon fichier inscrit est en excel 97-2003, c'est peut-être pour ceci
Ben oui, il faut tout lire:
Modeste à dit:
J'ai transformé le fichier Inscrits en un xlsx (il faudra adapter si des macros y sont indispensables). Ce dernier doit être ouvert avant lancement de la macro.

Maintenant, si le code de CHALET te convient, je n'ai rien à y redire! C'est juste que je préfère qu'on ne dise pas que ça ne fonctionne pas (sauf si ce devait être le cas)

Bonne soirée à toutes et tous,
 

jacky49

XLDnaute Impliqué
Re : Copier coller suivant plusieurs critères

Re Bonsoir le forum, Modeste,

oui le code de chalet fonctionne et ca me va mais je voulais aussi essayer le tien et voir avec toi mais pour le fichier ce que je veux dire, c'est que j'ai bien vu que tu l'as mis en .xlsx mais quand je l'ouvre et que je l'enregistre dans mon dossier, il se met en 97-2003 sans que je fasse quoi que ce soit, donc c'est quoi un xlsx
merci
jacky
 

jacky49

XLDnaute Impliqué
Re : Copier coller suivant plusieurs critères

Re,
OK, j'ai enregistré sans macro et çà fonctionne jusqu'au moment ou il manque une feuille mais celui de chalet me convient mieux car je peux choisir ou placer les catégories
merci
jacky
 

Discussions similaires

Réponses
6
Affichages
413

Membres actuellement en ligne

Aucun membre en ligne actuellement.

Statistiques des forums

Discussions
312 084
Messages
2 085 194
Membres
102 814
dernier inscrit
JLGalley