XL 2010 Copier selon conditions sur autre classeur dans l'ordre

jdjlecto

XLDnaute Nouveau
Bonjour, je pêche sur un sujet depuis un moment alors je viens voir ici si un connaisseur pourra me sortir de là ^^.
Voilà mon problème;
J'ai un tableau avec 10 en-tête de B à J.
Sur ce tableau j'ajoute des données au fur et à mesure (donc tous les champs ne sont pas entré forcément en une seule fois).
J'ai besoin qu'à chaque fois que j'entre une donnée, qu'une copie se fasse automatiquement , dans un autre tableau qui n'est pas exactement le même et au fur et à mesure (par un bouton ou de manière automatique).
Mais surtout qu'il n'y est pas de doublon dans le tableau qui reçoi la copie, et que les info s'accumule de ligne en ligne sans en écraser et sans faire d'espace.
Quelqu'un pense avoir une solution ?
Je débute en VBA, j'en apprend chaque jour mais là j'ai vraiment besoin.

J'ai été aider pour avoir de quoi copier, et sans doublon mais ça ne fonctionne que si tous les champs on été rempli.
Code:
Option Explicit

Sub Cp2()
Dim wkb1 As Workbook
Dim wkb2 As Workbook
Dim der1 As Long
Dim der2 As Long
Dim c As Range
Dim res As Variant

  Application.ScreenUpdating = False
  Set wkb1 = ActiveWorkbook
  der1 = ActiveSheet.Cells(Application.Rows.Count, "B").End(xlUp).Row
  If der1 = 2 Then Exit Sub
  Workbooks.Open Filename:=wkb1.Path & "\fichier1.xlsm"
  Set wkb2 = ActiveWorkbook
  wkb1.Activate
   For Each c In wkb1.Sheets(1).Range("C3:C" & der1)
       res = Application.Match(c, wkb2.Sheets(1).Range("C3:C500"), 0)
       If IsError(res) Then
 
       der2 = wkb2.Sheets(1).Cells(Application.Rows.Count, "B").End(xlUp).Row + 1
          wkb2.Sheets(1).Range("B" & der2 & ":I" & der2).Value = wkb1.Sheets(1).Range("B" & c.Row & ":I" & c.Row).Value
       End If
    Next c
  wkb2.Activate
  wkb2.Close savechanges:=True
Application.ScreenUpdating = True
End Sub
 
Dernière édition:

Staple1600

XLDnaute Barbatruc
Bonjour le fil , le forum

@jdjlecto [Bienvenue sur le forum]
J'ai été aider pour avoir de quoi copier, et sans doublon mais ça ne fonctionne que si tous les champs on été rempli.
Que deviens celui ou celle qui t'as aidé?
Pourquoi ne lui demandes-tu pas de modifier son code VBA?

Suggestion
Pour endre ton message plus lisible, utilises les balises BBCODE idoines
Cela donnera ceci
VB:
Sub Cp2()
Dim wkb1 As Workbook, wkb2 As Workbook
Dim der1&, der2&, c As Range, res
Application.ScreenUpdating = False
Set wkb1 = ActiveWorkbook
der1 = ActiveSheet.Cells(Application.Rows.Count, "B").End(xlUp).Row
If der1 = 2 Then Exit Sub
Workbooks.Open Filename:=wkb1.Path & "\fichier1.xlsm"
Set wkb2 = ActiveWorkbook
wkb1.Activate
For Each c In wkb1.Sheets(1).Range("C3:C" & der1)
res = Application.Match(c, wkb2.Sheets(1).Range("C3:C500"), 0)
If IsError(res) Then
der2 = wkb2.Sheets(1).Cells(Application.Rows.Count, "B").End(xlUp).Row + 1
wkb2.Sheets(1).Range("B" & der2 & ":I" & der2).Value = wkb1.Sheets(1).Range("B" & c.Row & ":I" & c.Row).Value
End If
Next c
wkb2.Activate
wkb2.Close True
Application.ScreenUpdating = True
End Sub
 
Dernière édition:

Staple1600

XLDnaute Barbatruc
Re

Dans un premier, je copie les données
(je verrais ensuite pour les doublons)
Est-ce que déjà la copie est bonne?
VB:
Sub copie()
Dim dl&, f As Worksheet: Set f = Workbooks("fichier2.xlsm").Sheets("pf")
dl = f.Cells(Rows.Count, 2).End(xlUp).Row
Sheets("no").[b2].CurrentRegion.Offset(1).Copy Workbooks("fichier2.xlsm").Sheets("pf").Cells(dl + 1, 2)
f.Range(f.Cells(dl + 1, "E"), f.Cells(dl + 1, "E").End(xlDown)).Resize(, 4).Cut f.Cells(dl + 1, "F")
End Sub
 

Staple1600

XLDnaute Barbatruc
Bonjour le fil, le forum

@jdjlecto
J'ai testé avec les fichiers que tu as joins dans ta discussion.
Condition du test
1) Les deux fichiers sont ouverts
2)la macro copie est dans le fichier: fichier1.xlsm
3) Bien évidemment les noms des fichiers sont fichier1.xlsm et fichier2.xlsm et les noms des feuilles n'ont pas été modifiés.

Est-ce que ces conditions étaient respectées quand tu as fait le test chez toi?

Si oui, tu ne dois pas avoir d'erreur.
 

jdjlecto

XLDnaute Nouveau
Avant que tu ne passe plus de temps dessus. Je pense qu'il serai préférable de voir si il est possible de faire en sorte que la copie ne se fasse seulement si la dernière colonne est renseigné.
Je m'explique :
sur une ligne il faut renseigner les colonnes de B à K. Il serai bien de faire la copie seulement des lignes où la colonne K est renseigné.
 

Discussions similaires

Réponses
28
Affichages
920

Statistiques des forums

Discussions
311 713
Messages
2 081 808
Membres
101 819
dernier inscrit
lukumubarth