Ajouter automatiquement des lignes dans une autre feuille "VBA"
Bonjour;
J'ai besoin votre aide concernant le tableau en PJ.
Malheureusement, il est possible d'ajouter qu'une seule ligne dans "feuil1" à chaque fois je copie des lignes dans "feuil2". Je n'ai pas réussi de changer le code macro.
Je veux que les lignes copiées dans la "feuil2" seront affichées automatiquement dans la "feuil1" , sans doublons et triées par date.
NB: Les lignes qui sont déjà ajoutées dans "feuil1" sont archivées; et les nouvelles lignes seront ajoutées eu dessous les anciennes.
Merci d'avance!
Bonjour,
J'ai quelques questions :
- Lorsque vous parlez de doublons, quelle est la colonne à vérifier ?
- Le code ajoute toujours les données à la suite des autres existantes ?
- Dans le code, vous faites référence à la ligne 22 de la feuil1. Pourquoi ?
- Comment l'importation doit-elle s'effectuer ? Au moment où clique sur l'onglet feuil1 ? ou autre ?
Merci de vos réponses
Crdlt
Bonjour;
Merci infiniment d'avoir le temps pour me répondre.
Alors, concernant vos questions:
( Lorsque vous parlez de doublons, quelle est la colonne à vérifier ?)
- Quand il y a des lignes répétées après chaque nouvelles lignes ajoutées dans "feuil1"/ l'objectif: les doublons seront automatiquement supprimés.
(Le code ajoute toujours les données à la suite des autres existantes ?)
- Oui, bien sur dans "feuil1" .
(Dans le code, vous faites référence à la ligne 22 de la feuil1. Pourquoi ?)
- Honnêtement, j'ai téléchargé le fichier de l'internet, et ai mis mes données .
(Comment l'importation doit-elle s'effectuer ? Au moment où clique sur l'onglet feuil1 ? ou autre ?)
- Quand vous copiez des lignes dans "feuil2", une seul ligne s'affichera automatiquement dans "feuil1" en dessous les autres existantes.
Comment l'importation doit-elle s'effectuer ? Au moment où clique sur l'onglet feuil1 ? ou autre ?)
- Quand vous copiez des lignes dans "feuil2", une seul ligne s'affichera automatiquement dans "feuil1" en dessous les autres existantes.
Je n'ai pas compris ce que vous expliquez quand vous écrivez "Quand vous copiez des lignes dans "feuil2", une seule ligne s'affichera...."
Pour reprendre ma question, l'importation des lignes depuis feuil 2 vers feuil1, peut se faire de différentes manières
- Via un bouton après que ayez sélectionné les lignes de la feuil2
- Via la sélection de l'onglet feuil1
En gros, sauf avis contraire, mon idée est que l'on importe toujours toutes les lignes de la feuil2 vers feuil1
Vous ne répondez pas à mes questions et votre post ne clarifie rien du tout.
Déjà ce que vous me montrez à la fin ne correspond pas à votre fichier posté.
De plus vous avez dans votre vue à droite des données différentes (pas de bayer, Merck, Beaufour)
Dans votre fichier posté sélectionnez les deux dernières lignes de la feuil2 donc A16 à F17, puis recopiez et allez sur la feuil1. Cela vous donne quoi ?
Si vous voulez une aide, expliquez-moi ce que vous faites manuellement ou vous voulez faire. C'est un copier coller de certaines lignes ou un copier coller de toutes les lignes.
Edit : Bon voici ce que je vous propose
- Lors d'un double click en colonne A dans la feuil2, le code vous copiera la ligne dans la feuil1
- lors du click sur l'onglet feuil1, le code enlèvera les doublons et fera le tri de la liste
Bonjour;
Dan je vous adresse un grand merci d'avoir pris le temps pour ma problématique !
"Edit : Bon voici ce que je vous propose
- Lors d'un double click en colonne A dans la feuil2, le code vous copiera la ligne dans la feuil1
- lors du click sur l'onglet feuil1, le code enlèvera les doublons et fera le tri de la liste"
- Oui c'est exactement ce que je voulais !
"Si vous voulez une aide, expliquez-moi ce que vous faites manuellement ou vous voulez faire. C'est un copier coller de certaines lignes ou un copier coller de toutes les lignes."
- Toutes les lignes bien sur !
Bonjour,
Lors d'un double click en colonne A dans la feuil2, le code vous copiera la ligne dans la feuil1
lors du click sur l'onglet feuil1, le code enlèvera les doublons et fera le tri de la liste- Oui c'est exactement ce que je voulais !
Faites ceci dans votre fichier :
Etape 1
- Faites un click droite sur l'onglet "Feuil1"
- Choisir l'option "visualiser le code"
- Dans la fenêtre, collez le code ci-dessous
Private Sub Worksheet_Activate()
Dim plage As Range
Set plage = Range("A1:F" & UsedRange.Rows.Count)
'supprimer doublons
plage.RemoveDuplicates Columns:=Array(1, 2, 3, 4, 5, 6), Header:=xlYes
'tri
With ActiveSheet
With .Sort
.SortFields.Clear
.SortFields.Add Key:=Range("A2:A" & UsedRange.Rows.Count) _
, SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal
.SetRange plage
.Header = xlYes
.MatchCase = False
.Orientation = xlTopToBottom
'.SortMethod = xlPinYin
.Apply
End With
End With
End SubEtape 2
- Faites un click droite sur l'onglet "Feuil2"- Choisir l'option "visualiser le code"
- Dans la fenêtre, collez le code ci-dessous
Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
Dim plage As Range
Dim dlg As Integer
Set plage = Range("A2:F" & Range("A" & Rows.Count).End(xlUp).Row)
If Not Intersect(Target, plage) Is Nothing Then
Cancel = False
dlg = Sheets("Feuil1").UsedRange.Rows.Count + 1
Range("A" & Target.Row & ":F" & Target.Row).Copy Sheets("Feuil1").Range("A" & dlg)
End If
Cancel = True
End Sub----------------
Pour transférer les lignes que vous voulez :
- Sélectionnez une cellule de la ligne à transférer
- Double click sur cette cellule
- Cliquez sur l'onglet "feuil1" pour voir la ligne copiée
A chaque fois que vous cliquerez sur l'onglet "Feuil1", le code Activate éliminera les doublons et fera le tri
Faites un test...
Rem : Lorsque vous voulez citer un post précédent dans votre réponse, vous avez une icone "Citation" dans la barre de menu disponible. En cliquant dessus vous pouvez y coller le texte que vous voulez
bonjour feirouz, Dan,
je ne comprend pas la ligne "22", cela causera des problèmes.
La macro copie est colle maintenant plusieurs lignes mais sa fonctionnement reste le même (+supprimer duplicates) que celle que vous avez proposé.
Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Range)
Dim ShDest As Worksheet, c As Range
If (Sh.Name = "Feuil2" Or Sh.Name = "Feuil3") Then
Set c = Intersect(Target, Sh.Range("A:F"))
If Not c Is Nothing Then
Set ShDest = Sheets("Feuil1")
Application.EnableEvents = False
For Each c0 In c.EntireRow.Columns(1).Cells
If c0.Value <> "" Then
b = True
c0.Resize(, 6).Copy ShDest.Cells(22, 1).End(xlUp).Offset(1) 'pourquoi "22" et ne pas "rows.count" ??????
End If
Next
If b Then
With ShDest.Range("A1").CurrentRegion
.Sort Key1:=ShDest.Range("A1"), Order1:=xlAscending, Header:=xlYes
.RemoveDuplicates Columns:=Array(1, 2, 3, 4, 5, 6), Header:=xlYes
End With
End If
Application.EnableEvents = True
End If
End If
End Sub@bsalv
je ne comprend pas la ligne "22", cela causera des problèmes.
C'est déjà demandé ici --> https://forum.excel-pratique.com/s/goto/1151624 et répondu sur le post suivant --> https://forum.excel-pratique.com/s/goto/1151644
je ne lis pas tout les réponses en détail, juste diagonal, mais ma remarque reste "22 causera des problèmes"
Dan Mille mercis !!!! ça fonctionne parfaitement !!!!
Juste une petite modification dans le code : j'ai remplacé (Order1:=xlAscending) par (Order1:=xlDescending) car je veux trier les dates de la plus récente à la plus ancienne... Je vous suis extrêmement reconnaissante …
Aussi, BsAlv je vous remercie pour votre contribution.
Administrateurs, modérateurs et tout les membres de ce magnifique forum, je vous souhaite une bonne continuation ….
