Microsoft 365 Synchroniser des colonnes de tableau Excel sur 2 feuilles différentes

Léraud Florian

XLDnaute Junior
Bonjour à tous,

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.

Je m'excuse de cette formulation hasardeuse :)

Merci d'avance
 

Pièces jointes

  • Bon de commande modele.xlsx
    31.2 KB · Affichages: 4
  • Tableau des Commandes 1.xlsx
    14.2 KB · Affichages: 3
Solution
à 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...

vgendron

XLDnaute Barbatruc
Bonjour et bienvenue

alors;. comment dire...:)
la description du pb n'est pas très claire
si je devine bien: ton classeur (fichier excel) "Tableau des commanes 1" correspond à ta base de données
1) il faudrait au moins mettre quelques lignes de données bidons pour qu'on puisse travailler

ton bon de commande: pourquoi faire un fichier à part?: Peux tu mettre les deux onglets dans le meme classeur?
tu souhaites pouvoir selectionner une référence , et la "synchro" permet de récuperer les données qui correspondent..?
 

TooFatBoy

XLDnaute Barbatruc
Bonjour,

si je devine bien: ton classeur (fichier excel) "Tableau des commanes 1" correspond à ta base de données
1) il faudrait au moins mettre quelques lignes de données bidons pour qu'on puisse travailler
Perso j'ai compris l'inverse : ce sont les bons de commandes qui vont alimenter le "Tableau des commandes". 😁

Sinon, d'accord avec toi : pourquoi deux fichiers et quelques données seraient les bienvenues. ;)

Je crois que logiquement il faudrait une feuille pour une base de données de tous les éléments "commandables", une feuille servant de modèle pour le bon de commande, et une troisième feuille pour la liste des matériels commandés. Nan ??? 🤔
 
Dernière édition:

Léraud Florian

XLDnaute Junior
Merci de vos réponses :)

En effet, je m'excuse de la façon dont je pose mon problème.

Oui en effet, ce sont les bons de commandes qui vont venir alimenter le Tableau de commande.
C'est vrai que je peux tout mettre sous le même fichier mais pas sur la même feuille de calcul.

En ce qui concerne le Tableau de commande, celui-ci est vide puisque je veux mettre les informations du Bon de Commande dans celui-ci.

Je sais pas si cela est plus clair pour vous ? ^^
 

vgendron

XLDnaute Barbatruc
le programme, il sauvegarde les éléments
c'est pas vraiement une sauvegarde, on place juste les données dans un tablo vba: quand le programme se termine, le tablo n'existe plus

pour ensuite les envoyer dans le Tableau de commande ?
la, pour le coup, il s'agit d'une "sauvegarde" puisque les données sont copiées dans la feuille 2022

Mais comment mettre à jour le Tableau de commande ? ^^

qu'entends tu par Mettre à jour? à quel moment?
 

vgendron

XLDnaute Barbatruc
à noter..si il n'y a pas de numéro de client, toutes les lignes seront copiées sur la meme ligne==> donc toutes les données seront écrasées par la dernière ligne de commande: en cause la ligne de code
fin=range("A" &rows.count).end(xlup).row +1
 

Léraud Florian

XLDnaute Junior
Je me suis mal exprimé, je voulais dire "est-ce que la feuille 2022 se met à jour en fonction de la taille variable du tableau de mon bon de commande"

Si par exemple je rajoute un produit, alors mon tableau dans la feuille 2022 aura un élément en plus.

Mais après vérification j'ai vu que cela fonctionne =)

D'accord merci de la mise en garde ^^

Et donc ton code peut fonctionner pour plusieurs bon de commande différents (à condition que je change bien le nom des feuilles sur le code ) ?
 

vgendron

XLDnaute Barbatruc
à 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
        fin = .Range("A" & .Rows.Count).End(xlUp).Row + 1 'première ligne vide de la colonne A
        .Range("A" & fin) = Client 'on colle l'ID client
        .Range("G" & fin) = TabCommande(i, 1) 'Qté
        .Range("D" & fin) = TabCommande(i, 2) 'Matériaux
        .Range("F" & fin) = TabCommande(i, 3) 'Epaisseur
        'Référence
        'PU
        'Total
    Next i
End With
Effacer = MsgBox("Souhaitez vous effacer le BdC pour en saisir un nouveau?", vbYesNo)
If Effacer = vbYes Then
    With Sheets("Facture de service") 'dans la feuille Facture
        .Range("C10").ClearContents
        .ListObjects(1).DataBodyRange.ClearContents
        .Range("G13").FormulaR1C1 = "=[@[Prix unitaire]]*[@Quantité]"
    End With
End If
End Sub
 

Discussions similaires

Statistiques des forums

Discussions
299 729
Messages
1 978 790
Membres
206 395
dernier inscrit
Bilina