VBA Copier des lignes avec plusieurs conditions
Résolu/Fermé
faeyna
Messages postés
8
Date d'inscription
mardi 23 septembre 2014
Statut
Membre
Dernière intervention
29 septembre 2014
-
23 sept. 2014 à 21:38
faeyna Messages postés 8 Date d'inscription mardi 23 septembre 2014 Statut Membre Dernière intervention 29 septembre 2014 - 29 sept. 2014 à 22:12
faeyna Messages postés 8 Date d'inscription mardi 23 septembre 2014 Statut Membre Dernière intervention 29 septembre 2014 - 29 sept. 2014 à 22:12
A voir également:
- VBA Copier des lignes avec plusieurs conditions
- Comment copier une vidéo youtube - Guide
- Super copier - Télécharger - Gestion de fichiers
- Copier texte pdf - Guide
- Mise en forme conditionnelle excel plusieurs conditions - Guide
- Copier disque dur - Guide
14 réponses
Gyrus
Messages postés
3334
Date d'inscription
samedi 20 juillet 2013
Statut
Membre
Dernière intervention
9 décembre 2016
524
24 sept. 2014 à 07:14
24 sept. 2014 à 07:14
Bonjour,
Si j'ai bien compris la structure de tes deux feuilles, il doit suffire de faire un copier - coller des données de la feuille enfants vers la feuille parents puis un tri sur la colonne nom.
Sinon, tu as tout intérêt à poster un fichier exemple pour montrer la disposition des données.
A+
Si j'ai bien compris la structure de tes deux feuilles, il doit suffire de faire un copier - coller des données de la feuille enfants vers la feuille parents puis un tri sur la colonne nom.
Sinon, tu as tout intérêt à poster un fichier exemple pour montrer la disposition des données.
A+
faeyna
Messages postés
8
Date d'inscription
mardi 23 septembre 2014
Statut
Membre
Dernière intervention
29 septembre 2014
24 sept. 2014 à 14:20
24 sept. 2014 à 14:20
Bonjour, Merci d'avoir répondu :). Comment on fait pour poster un fichier exemple?? Je n'arrive pas à joindre mon fichier excel.
Gyrus
Messages postés
3334
Date d'inscription
samedi 20 juillet 2013
Statut
Membre
Dernière intervention
9 décembre 2016
524
24 sept. 2014 à 14:44
24 sept. 2014 à 14:44
Tu peux utiliser cjoint
https://www.commentcamarche.net/faq/29493-utiliser-cjoint-pour-heberger-des-fichiers#q=cjoint&cur=1&url=%2F
A+
https://www.commentcamarche.net/faq/29493-utiliser-cjoint-pour-heberger-des-fichiers#q=cjoint&cur=1&url=%2F
A+
faeyna
Messages postés
8
Date d'inscription
mardi 23 septembre 2014
Statut
Membre
Dernière intervention
29 septembre 2014
24 sept. 2014 à 14:54
24 sept. 2014 à 14:54
Merci pour le lien.
Voici mon fichier: https://www.cjoint.com/?0Iyo4wkaBjh
Voici mon fichier: https://www.cjoint.com/?0Iyo4wkaBjh
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
Gyrus
Messages postés
3334
Date d'inscription
samedi 20 juillet 2013
Statut
Membre
Dernière intervention
9 décembre 2016
524
24 sept. 2014 à 15:17
24 sept. 2014 à 15:17
Pour avoir la même structure dans les deux feuilles.
- dans la feuille enfant, j'ai inséré une colonne (D) pour la profession.
- dans la feuille Parents, j'ai ajouté les libellés d'en-tête manquants (Enfant Nom, Enfant Prénom,etc.)
Ensuite,
- dans la feuille enfant, j'ai copié la plage A2:H9
- dans la feuille Parents, j'ai effectué le collage (CTRL + V) en A6
Enfin, pour réaliser le tri
- j'ai sélectionné la plage A1:H13
- clic sur Trier > Tri personnalisé > Trier par Nom sur Valeurs de A à Z > OK
https://www.cjoint.com/?DIypt1VKhRt
A+
- dans la feuille enfant, j'ai inséré une colonne (D) pour la profession.
- dans la feuille Parents, j'ai ajouté les libellés d'en-tête manquants (Enfant Nom, Enfant Prénom,etc.)
Ensuite,
- dans la feuille enfant, j'ai copié la plage A2:H9
- dans la feuille Parents, j'ai effectué le collage (CTRL + V) en A6
Enfin, pour réaliser le tri
- j'ai sélectionné la plage A1:H13
- clic sur Trier > Tri personnalisé > Trier par Nom sur Valeurs de A à Z > OK
https://www.cjoint.com/?DIypt1VKhRt
A+
faeyna
Messages postés
8
Date d'inscription
mardi 23 septembre 2014
Statut
Membre
Dernière intervention
29 septembre 2014
24 sept. 2014 à 16:19
24 sept. 2014 à 16:19
Le seul hic c'est que dans l'onglet parents, il faut que toutes les infos soient sur la même ligne...
Ci-joint un exemple.
Merci bcp
https://www.cjoint.com/?0Iyp5W6UpWj
Ci-joint un exemple.
Merci bcp
https://www.cjoint.com/?0Iyp5W6UpWj
Gyrus
Messages postés
3334
Date d'inscription
samedi 20 juillet 2013
Statut
Membre
Dernière intervention
9 décembre 2016
524
24 sept. 2014 à 16:59
24 sept. 2014 à 16:59
J'ai encore lu en diagonale :D
Alors une nouvelle proposition avec VBA
https://www.cjoint.com/?DIyraJidQIf
A+
Alors une nouvelle proposition avec VBA
https://www.cjoint.com/?DIyraJidQIf
A+
faeyna
Messages postés
8
Date d'inscription
mardi 23 septembre 2014
Statut
Membre
Dernière intervention
29 septembre 2014
24 sept. 2014 à 17:57
24 sept. 2014 à 17:57
Merci beaucoup pour votre aide. Tout fonctionne parfaitement.
Est-ce possible de m'expliquer un peu ce que vous avez fait? Au moins si je change des choses je pourrai personnaliser le code à chaque fois.
Pouvez-vous m'expliquer ce que ces parties signifient surtout l'histoire des offset
For Each Cel In Wsc.Range("A2:A" & Wsc.Range("A" & Rows.Count).End(xlUp).Row)
Set C = WsS.Columns("A").Find(Cel.Value, LookIn:=xlValues, lookat:=xlWhole)
If Not C Is Nothing And C.Offset(0, 1) = Cel.Offset(0, 1) And C.Offset(0, 2) = Cel.Offset(0, 2) Then
firstAddress = C.Address
Do
Cel.Offset(0, Cel.End(xlToRight).Column).Resize(, 4).Value = C.Offset(0, 3).Resize(, 4).Value
Set C = WsS.Columns("A").FindNext(C)
Loop While Not C Is Nothing And C.Address <> firstAddress
End If
Next Cel
Wsc.Activate
Set C = Nothing: Set Wsc = Nothing: Set WsS = Nothing
Encore Merci bcp
Est-ce possible de m'expliquer un peu ce que vous avez fait? Au moins si je change des choses je pourrai personnaliser le code à chaque fois.
Pouvez-vous m'expliquer ce que ces parties signifient surtout l'histoire des offset
For Each Cel In Wsc.Range("A2:A" & Wsc.Range("A" & Rows.Count).End(xlUp).Row)
Set C = WsS.Columns("A").Find(Cel.Value, LookIn:=xlValues, lookat:=xlWhole)
If Not C Is Nothing And C.Offset(0, 1) = Cel.Offset(0, 1) And C.Offset(0, 2) = Cel.Offset(0, 2) Then
firstAddress = C.Address
Do
Cel.Offset(0, Cel.End(xlToRight).Column).Resize(, 4).Value = C.Offset(0, 3).Resize(, 4).Value
Set C = WsS.Columns("A").FindNext(C)
Loop While Not C Is Nothing And C.Address <> firstAddress
End If
Next Cel
Wsc.Activate
Set C = Nothing: Set Wsc = Nothing: Set WsS = Nothing
Encore Merci bcp
Gyrus
Messages postés
3334
Date d'inscription
samedi 20 juillet 2013
Statut
Membre
Dernière intervention
9 décembre 2016
524
24 sept. 2014 à 20:18
24 sept. 2014 à 20:18
Bon, je commence par le code commenté :
Ensuite, quelques explications sur l'instruction suivante :
Cel représente la cellule qui contient le nom dans la feuille "Parents"
Cel.Offset(0, 1) représente la cellule décalée de 1 colonne par rapport à Cel, soit le prénom
Cel.Offset(0, 2) représente la cellule décalée de 2 colonnes par rapport à Cel, soit l'age
C représente la cellule qui contient le nom dans la feuille "Enfant"
Les décalages suivent la règle évoquée précédemment.
Enfin, quelques explications sur l'instruction suivante :
Dans la feuille "Enfant", on copie la valeur des 4 cellules décalées de 3 colonnes par rapport au nom, soit Enfant nom, Enfant Prénom, age enfant,sexe enfant.
On affecte ces valeurs à la plage de 4 cellules qui suit la dernière colonne renseignée sur la même ligne que Cel.
A+
Sub Trier()
Dim WsS As Worksheet, Wsc As Worksheet
Dim Cel As Range, C As Range
Dim firstAddress As String
Dim Decalage As Integer
'la variable Wss représente la feuille source "Enfant"
Set WsS = Worksheets("Enfant")
'la variable WsC représente la feuille cible "Parents"
Set Wsc = Worksheets("Parents")
'Pour chaque nom dans la colonne A de la feuille "Parents"
For Each Cel In Wsc.Range("A2:A" & Wsc.Range("A" & Rows.Count).End(xlUp).Row)
'On recherche ce même nom dans la colonne A de la feuille "Enfant"
Set C = WsS.Columns("A").Find(Cel.Value, LookIn:=xlValues, lookat:=xlWhole)
'Si le nom est trouvé et que le prénom et l'age sont identiques à ceux de la feuille "Parents", alors ..
If Not C Is Nothing And C.Offset(0, 1) = Cel.Offset(0, 1) And C.Offset(0, 2) = Cel.Offset(0, 2) Then
'On mémorise l'emplacement du nom dans la feuille "Enfant" afin de ne pas boucler sur les mêmes emplacements.
firstAddress = C.Address
Do
'On affecte la valeur des cellules de la plage D à G de la feuille "Enfant" _
à la plage de 4 colonnes qui suit la dernière colonne renseignée dans la feuille "Parents"
Cel.Offset(0, Cel.End(xlToRight).Column).Resize(, 4).Value = C.Offset(0, 3).Resize(, 4).Value
'On poursuit la recherche
Set C = WsS.Columns("A").FindNext(C)
'On boucle tant que le même nom est trouvé et que l'emplacement est différent
Loop While Not C Is Nothing And C.Address <> firstAddress
End If
Next Cel
Wsc.Activate
Set C = Nothing: Set Wsc = Nothing: Set WsS = Nothing
End Sub
Ensuite, quelques explications sur l'instruction suivante :
If Not C Is Nothing And C.Offset(0, 1) = Cel.Offset(0, 1) And C.Offset(0, 2) = Cel.Offset(0, 2) Then
Cel représente la cellule qui contient le nom dans la feuille "Parents"
Cel.Offset(0, 1) représente la cellule décalée de 1 colonne par rapport à Cel, soit le prénom
Cel.Offset(0, 2) représente la cellule décalée de 2 colonnes par rapport à Cel, soit l'age
C représente la cellule qui contient le nom dans la feuille "Enfant"
Les décalages suivent la règle évoquée précédemment.
Enfin, quelques explications sur l'instruction suivante :
Cel.Offset(0, Cel.End(xlToRight).Column).Resize(, 4).Value = C.Offset(0, 3).Resize(, 4).Value
Dans la feuille "Enfant", on copie la valeur des 4 cellules décalées de 3 colonnes par rapport au nom, soit Enfant nom, Enfant Prénom, age enfant,sexe enfant.
On affecte ces valeurs à la plage de 4 cellules qui suit la dernière colonne renseignée sur la même ligne que Cel.
A+
faeyna
Messages postés
8
Date d'inscription
mardi 23 septembre 2014
Statut
Membre
Dernière intervention
29 septembre 2014
24 sept. 2014 à 22:06
24 sept. 2014 à 22:06
Merci pour tous ces détails wow :)
J'ai essayé de modifier un peu mon fichier et de personnaliser le code pour mieux comprendre mais ça ne fonctionne pas. J'ai fait plusieurs tests mais il y a un truc qui m'échappe...
Vous trouverez ci-joint mon nouveau tableau et le code modifié. Qu'est ce qui ne marche pas ?
Merci beaucoup
https://www.cjoint.com/?0IywfkIcDUR
J'ai essayé de modifier un peu mon fichier et de personnaliser le code pour mieux comprendre mais ça ne fonctionne pas. J'ai fait plusieurs tests mais il y a un truc qui m'échappe...
Vous trouverez ci-joint mon nouveau tableau et le code modifié. Qu'est ce qui ne marche pas ?
Merci beaucoup
https://www.cjoint.com/?0IywfkIcDUR
Gyrus
Messages postés
3334
Date d'inscription
samedi 20 juillet 2013
Statut
Membre
Dernière intervention
9 décembre 2016
524
24 sept. 2014 à 23:15
24 sept. 2014 à 23:15
Nouvelle version à tester
https://www.cjoint.com/?DIyxr4d1j5z
A+
https://www.cjoint.com/?DIyxr4d1j5z
A+
faeyna
Messages postés
8
Date d'inscription
mardi 23 septembre 2014
Statut
Membre
Dernière intervention
29 septembre 2014
26 sept. 2014 à 22:28
26 sept. 2014 à 22:28
Yees
J'ai réussi à comprendre les offset :).
Dans certaines colonnes de mon fichier, il n'y a pas de lettre ( c'est vide ou certaines cellules sont remplis et d'autre vide) et puisque le code commence à remplir la première colonne vide en allant de la gauche vers la droite bah ça ne fonctionne plus.
Est ce qu'il y a un moyen de lire le code de la droite vers la gauche en remplissant à partir d'une colonne en particulier ou à partir de la première colonne vide tt simplement?
Merciii :)
J'ai réussi à comprendre les offset :).
Dans certaines colonnes de mon fichier, il n'y a pas de lettre ( c'est vide ou certaines cellules sont remplis et d'autre vide) et puisque le code commence à remplir la première colonne vide en allant de la gauche vers la droite bah ça ne fonctionne plus.
Est ce qu'il y a un moyen de lire le code de la droite vers la gauche en remplissant à partir d'une colonne en particulier ou à partir de la première colonne vide tt simplement?
Merciii :)
Gyrus
Messages postés
3334
Date d'inscription
samedi 20 juillet 2013
Statut
Membre
Dernière intervention
9 décembre 2016
524
28 sept. 2014 à 10:34
28 sept. 2014 à 10:34
Bonjour,
Bon, alors une nouvelle, nouvelle version :D
https://www.cjoint.com/?DICkKAEoZ9s
A+
Bon, alors une nouvelle, nouvelle version :D
https://www.cjoint.com/?DICkKAEoZ9s
A+
faeyna
Messages postés
8
Date d'inscription
mardi 23 septembre 2014
Statut
Membre
Dernière intervention
29 septembre 2014
29 sept. 2014 à 22:12
29 sept. 2014 à 22:12
Ouiii ça marche :) YES!!
Merci d'avoir pris de votre temps pour m'aider :) :) :)
Merci d'avoir pris de votre temps pour m'aider :) :) :)