Je vous explique mon petit soucis. J'ai un fichier Excel qui me fais office de bon de commande (feuille 1) et qui comporte un tableau avec plusieurs données (Référence produit, Quantité, Epaisseur....).
Sur une deuxième feuille Excel, je voudrai synchroniser certaines données du tableau de la feuille 1 avec un tableau de ma feuille 2 (mais pas toutes les données de la feuille 1 ne sont nécessaire). Cependant, la taille de mon tableau de la feuille 1 peut être variable et donc celui de la feuille 2 doit l'être aussi. Il n'est PAS nécessaire que la synchronisation se fasse dans le sens inverse.
J'ai essayé l'utilisation de macro mais ça n'a rien donné.
Je vous met en PJ le bon de commande auquel je veux extraire certaines informations (qui sont marquées en vert) et le tableau de commande qui me servira de tableau récapitulatif de tout les bons de commandes.
à chaque sauvegarde, on peut effacer le Bon de commande pour en faire un autre
VB:
Sub SaveBonDeCommande()
Dim TabCommande() As Variant
With Sheets("Facture de service") 'dans la feuille Facture
TabCommande = .ListObjects(1).DataBodyRange.Value 'on récupère les données dans un tablo vba
Client = .Range("C10") 'on récupère l'ID client
'on peut faire quelques tests avant de continuer; comme vérifier qu'un ID client a bien été saisi
If Client = "" Then
MsgBox ("Veuillez saisir un ID Client")
Exit Sub 'on quitte la macro pour bypasser ce qui suit
End If
End With
With Sheets("2022") 'dans la feuille 2022
For i = LBound(TabCommande, 1) To UBound(TabCommande, 1) 'pour chaque ligne de commande...
Je ne sais pas si tu veux absolument conserver ces 7 lignes vides, ou si une seule ligne vide suffit, mais je te propose quand même une version avec une seule ligne vide.
Après, tu prends ou tu prends pas. C'est vous qui voyez !
Dans ta macro, je te propose de remplacer
VB:
.ListObjects(1).DataBodyRange.ClearContents
par
VB:
' Suppression de toutes les lignes de données du tableau "Table_Items" s'il n'est pas vide
With Range("Table_Items")
If Not .ListObject.DataBodyRange Is Nothing Then .Delete
End With
Je ne sais pas si tu veux absolument conserver ces 7 lignes vides, ou si une seule ligne vide suffit, mais je te propose quand même une version avec une seule ligne vide.
Après, tu prends ou tu prends pas. C'est vous qui voyez !
Dans ta macro, je te propose de remplacer
VB:
.ListObjects(1).DataBodyRange.ClearContents
par
VB:
' Suppression de toutes les lignes de données du tableau "Table_Items" s'il n'est pas vide
With Range("Table_Items")
If Not .ListObject.DataBodyRange Is Nothing Then .Delete
End With