Bonjour,
Dans mon classeur Excel il y a un onglet "BDD" ainsi qu'un onglet "CA12A"
Dans mon onglet BDD j'ai en colonne J différent type de TVA dont CA12A
J'ai exécuter un code VBA qui me permet de recopier automatiquement les toutes les lignes des colonnes de B à I de la BDD qui comporte CA12A vers l'onglet CA12A et ceux même lors que je rajoute une nouvelle ligne dans la BDD qui comporte se critère.
Mon problème étant que : dans mon onglet CA12 en colonne J, K, L, ... ce sont des informations que je rentre manuellement sans qu'elles soit dans ma BDD;
Par exemple en colonne J, ce sera la date de mon premier acompte, en colonne K des commentaires ...
Sauf que quand je rajoute une ligne dans ma BDD, que j'exécute la macro pour que la ligne soit également insérer dans mon onglet CA12A, ca ne me décale pas les infos rentrer manuellement.
Il faudrait que ma ligne s'insère sur la totalité.
C'est à dire que si je rentre un nouveau client dans ma BDD en ligne 10, il faut que dans mon onglet CA12A, la ligne 10 soit insérer entièrement et que mes donnée se trouvant dans mes colonnes J,K,L se décale aussi vers le bas.
J'ai essayer d'être le plus clair possible
Je vous joint un fichier qui ressemblerait a celui sur lequel je travail.
Suivi Dossier test.xlsm
Ci-dessous le Code utilisé.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58 Sub CopierNouvellesLignesAvecMiseEnForme() Dim wsBDD As Worksheet Dim wsCA12A As Worksheet Dim lastRowBDD As Long Dim lastRowCA12A As Long[ATTACH]657044[/ATTACH][ATTACH]657044[/ATTACH] Dim i As Long Dim copiedRows As Object Dim newRow As Range Set copiedRows = CreateObject("Scripting.Dictionary") ' Définir les feuilles de travail Set wsBDD = ThisWorkbook.Sheets("BDD") Set wsCA12A = ThisWorkbook.Sheets("CA12A") ' Trouver la dernière ligne de données dans chaque feuille lastRowBDD = wsBDD.Cells(wsBDD.Rows.Count, 1).End(xlUp).Row lastRowCA12A = wsCA12A.Cells(wsCA12A.Rows.Count, 1).End(xlUp).Row ' Filter les données pour ne travailler qu'avec les nouvelles lignes dans BDD With wsBDD .AutoFilterMode = False ' Supprimer les filtres existants .Range("A9:J" & lastRowBDD).AutoFilter Field:=10, Criteria1:="CA12A" For i = 9 To lastRowBDD If Not .Cells(i, 10).EntireRow.Hidden Then ' Vérifier si la ligne n'est pas masquée Dim key As String key = "" For Each cell In .Range("B" & i & ":I" & i) key = key & cell.Text Next cell If Not copiedRows.Exists(key) Then ' Vérifier si la ligne n'a pas été déjà copiée If i > lastRowCA12A Then ' Vérifier si c'est une nouvelle ligne ' Copier les données dans CA12A avec la mise en forme .Range("B" & i & ":I" & i).Copy wsCA12A.Cells(lastRowCA12A + 8, 2).PasteSpecial Paste:=xlPasteAll .Range("O" & i & ":R" & i).Copy wsCA12A.Cells(lastRowCA12A + 8, 10).PasteSpecial Paste:=xlPasteAll Application.CutCopyMode = False ' Effacer le Presse-papiers copiedRows.Add key, "Copied" ' Ajouter la ligne à la liste des lignes copiées lastRowCA12A = lastRowCA12A + 1 ' Mettre à jour la dernière ligne dans CA12A End If End If End If Next i End With ' Supprimer le filtre une fois le traitement terminé wsBDD.AutoFilterMode = False End SubDE
Partager