Export de données d'un tableau à l'autre
Bonjour à tous,
Je souhaite avoir un fichier de suivi pour les impayés, en complétant mon tableau "Impayés" d'après les données d'un export de mon logiciel appelé "Table".
Concrètement, à chaque fois que je vais contrôler mes factures impayées, je vais extraire la liste de mon logiciel pour l'importer dans le fichier excel Impayés.
Il faut qu'il vérifie si les n° de facture ne se trouve pas déjà dans le tableau : si oui, il continue, si non il ajoute une ligne en fin de tableau avec la nouvelle facture.
Ensuite, il doit vérifier dans le tableau de suivi des impayés si la facture est toujours présente dans l'export : si oui, il la laisse, si non il la supprime.
Mon problème est le suivant : j'ai bien réussi à faire des boucles pour vérifier les N° de factures, mais il ajoute à chaque fois les factures.
Pour imager ce que je comprends, mon code fait actuellement ceci :
Curseur 1 Curseur 2
a a - n'ajoute pas
b - ajoute facture a
c - ajoute facture a
b a - ajoute facture b
b - n'ajoute pas
c - ajoute facture b
Ce qui fait que je me retrouve avec des dizaines de lignes par n° de facture.
Je vous joints mes 2 fichiers excel ainsi que mon code pour mieux comprendre.
Sub ImpFct()
Dim WBimp As Workbook, WBexp As Workbook
Dim WSimp As Worksheet, WSexp As Worksheet
Dim DerLigImp As String, DerLigExp As String
Dim X As Integer, W As Integer
Dim Y As Integer, Z As Integer
Set WBimp = ThisWorkbook
Set WSimp = WBimp.Sheets("Suivi")
Set WBexp = Workbooks.Open("L:\05 - COMMUN\Fichier PDF pour envoi\Table.xlsx")
Set WSexp = WBexp.Sheets("A")
DerLigImp = WSimp.Range("A" & Rows.Count).End(xlUp).Row 'Détermine la dernière ligne du tableau suivi des impayés
WSexp.Rows(Range("A" & Rows.Count).End(xlUp).Row).Delete 'Supprime les 2 dernières lignes
WSexp.Rows(Range("A" & Rows.Count).End(xlUp).Row).Delete
Range("A1").EntireColumn.Insert , CopyOrigin:=xlFormatFromLeftOrAbove 'Organise les colonnes comme le suivi des impayés
Columns("D:D").Cut Columns("A:A")
Columns("F:F").Cut Columns("D:D")
Columns("E:E").Cut Columns("L:L")
Columns("G:G").Cut Columns("E:E")
Columns("F:L").Delete
DerLigExp = WSexp.Range("A" & Rows.Count).End(xlUp).Row 'Détermine la dernière ligne du tableau export
'WBexp.Activate
For X = 2 To DerLigExp
For W = 10 To DerLigImp
If WSexp.Cells(X, 2) <> WSimp.Cells(W, 2) Then 'Compare n° de facture, si ligne export est absente du suivi inmpayés
WSexp.Rows(X).Copy WSimp.Cells(DerLigImp + 1, 1) 'Ajoute les lignes manquantes au tableau impayés
WSimp.Cells(10, 6).Copy WSimp.Cells(DerLigImp + 1, 6) 'Ajoute la formule nombre de jour de retard
DerLigExp = WSexp.Range("A" & Rows.Count).End(xlUp).Row 'Détermine la dernière ligne du tableau export
DerLigImp = WSimp.Range("A" & Rows.Count).End(xlUp).Row 'Détermine la dernière ligne du tableau suivi des impayés
End If
Next
Next
'For Y = 10 To DerLigImp
' For Z = 2 To DerLigExp
' If WSimp.Cells(W, 2) <> WSexp.Cells(X, 2) Then
' WSimp.Rows(W).EntireRow.Delete
' End If
' Next
'Next
End SubBonjour à tous !
Si le passage par VBA n'est pas une option obligatoire, je vous propose de tester cette approche Power Query (nativement intégré à votre produit Excel).
Mettre à jour le chemin de fichier "extraction impayés" et, via le menu (ou la barre d'accès rapide) " Actualiser tout ".
Information que je n'ai pas du tout précisé dans mon premier message : j'ai besoin que ça conserve les informations que j'écris dans les colonnes relances et remarques lorsque j'actualise le fichier avec les nouvelles factures.
Bonjour à tous de nouveau !
Ce dernier message est un classique pour les "primo-accédants".
Il se corrige via une option. Voir ici !

