Copie automatique de ligne et insertion sur 3 feuilles
#1
Débutant XLPages

Inscription: 29/04/2014
De Nantes

Messages: 4

Système d'exploitation:
PC
Version Excel utilisée:
2007
Posté le : 29-04-2014 09h23

Bonjour à tous,

 

Je suis nouveau ici et je ne maitrise pas vraiment le VBA. Alors je viens vers vous en espérant que quelqu'un puisse nous apporter une solution. Je dis nous, car nous sommes un jeune couple d'auto entrepreneur et j'essaye bien tant que mal d'automatiser notre fichier de compta.

 

Je vais découper les quelques problèmes 1 par 1 car je n'arrive pas à extraire qu'une seule partie de mon fichier pour le mettre en exemple sachant que notre compta est déjà en partie saisie.
 Merci d'avance pour votre indulgence.

 

J'ai 3 onglets nommés "Achats", "Ventes" et "Stock"

 

Les deux premières colonnes de chaque feuille doit être strictement identique à partir de la ligne 2.

La colonne "A" est nommée "Fournisseurs" et la colonne "B" est nommée "Références"

Après les autres colonnes de chaque feuilles ont des données plus ou moins liés avec d'autres feuilles du classeur.

 

A savoir que la feuille de référence pour la liste des fournisseurs et des références est la feuille "Achats".

 

Comment serait-il possible d'insérer une nouvelle référence ou fournisseur en fin de liste sur la feuille "Achats" et que celle-ci aille s'insérer automatiquement par ordre alphabétique en créant une nouvelle ligne dans la liste de la feuille "Achats" mais également les feuilles "Ventes" et "Stock" tout en conservant les données déjà existante de chaque référence sur chaque feuille ?

 

En espérant que la description du problème a été clairement exposé.

 

Cordialement,

Hors Ligne
Rapport   Haut 

Re: Copie automatique de ligne et insertion sur 3 feuilles
#2
Débutant XLPages

Inscription: 29/04/2014
De Nantes

Messages: 4

Système d'exploitation:
PC
Version Excel utilisée:
2007
Posté le : 01-05-2014 18h17

Bonjour à tous,

 

Alors j'ai trouvé un petit code sympa en vba qui permet de trier la feuille "Achats" par fournisseur et référence_produit, tout en conservant les données des autres colonnes attribués à chaque produit.

 

Private Sub Worksheet_Change(ByVal Target As Range)
    If Not Intersect([A2:V1000], Target) Is Nothing And Target.Count = 1 Then
      [A2:V1000].Sort Key1:=Range("A3"), Order1:=xlAscending, Key2:=Range("B3") _
        , Order2:=xlAscending, Header:=xlYes
    End If
End Sub

 

Comment pourrais-je faire pour que lorsque j'ajoute une nouvelle référence en fin de liste sur la feuille "Achats" (celle-ci va se trier automatiquement après enter), cette nouvelle référence s'ajoute également sur les feuilles "Ventes" et "Stock" avec la même fonction de tri automatique et de conservation des données des autres colonnes.

 

Cordialement,

Hors Ligne
Rapport   Haut 

Re: Copie automatique de ligne et insertion sur 3 feuilles
#3
Webmestre

Inscription: 18/05/2006
De Saône-et-Loire (71)

Messages: 1539

Système d'exploitation:
PC
Version Excel utilisée:
97, 2000, 2002, 2003, 2007, 2010, 2013, 2016 et 365
Posté le : 03-05-2014 12h56

Bonjour Jer31, bienvenue sur XLpages.com

Tu trouveras ci-joint une autre façon de faire.

 

Je pense que la façon de trier ta feuille "à la volée" (à chaque modification d'une cellule de la feuille Achats) comme tu le présentes, c'est bien... Mais si tu insères un code pour recopier les données sur les autres feuilles, tu vas vite te confronter à un problème logique : que va-t'il se passer si tu opères une simple modification de cellule dans la feuille et non un Ajout ? Tu risques fort de te retrouver avec des tris non souhaités, voire même avec des données recopiées (dupliquées) à tort dans les autres onglets...

 

Pour ma part, j'ai opté pour un bouton "Nouveau" et un formulaire (userform) te permettant d'ajouter un nouvel item dans cette base et assurer le traitement dans les autres onglets du même coup.

 

Bien évidemment, c'est une façon de faire, et ce n'est pas forcément LA solution. Tout dépend aussi des éléments dont nous n'avons pas connaissance ici (notamment concernant les autres données non présentées). Il aurait été une bonne idée de présenter un simple classeur exemple présentant l'essentiel de ton problème reconstitué, ce n'est pas compliqué à mettre en oeuvre (et ça m'aurait éviter de le faire à ta place, hein !?) indecision

 

Voici le code VBA que j'ai utilisé (dans la pièce jointe) :


CODE DU USERFORM
 

Option Explicit
' Auteur    : myDearFriend!  -  www.mdf-xlpages.com

Private Sub btnValider_Click()
    If MsgBox("Ajouter ce nouveau produit dans la base ?", vbYesNo, "myDearFriend ! - www.mdf-xlpages.comm") = vbYes Then
        'Pour chaque onglet
        AjouterProduit Sheets("Achats"), txtFournisseur.Text, txtRefProduit.Text
        AjouterProduit Sheets("Ventes"), txtFournisseur.Text, txtRefProduit.Text
        AjouterProduit Sheets("Stock"), txtFournisseur.Text, txtRefProduit.Text
    End If
    Unload Me
End Sub

Private Sub btnAnnuler_Click()
    Unload Me
End Sub

'Ne permet la Validation QUE si les zones "Fournisseur" et "Réf Produit" sont complétées
Private Sub txtFournisseur_Change()
    getEnableValid
End Sub

Private Sub txtRefProduit_Change()
    getEnableValid
End Sub

Sub getEnableValid()
    btnValider.Enabled = txtFournisseur.Text <> "" And txtRefProduit.Text <> ""
End Sub
 

CODE DANS UN MODULE STANDARD

Option Explicit
' Auteur    : Didier FOURGEOT (myDearFriend!)  -  www.mdf-xlpages.com

Sub AffichUsf()
    usfAchat.Show
End Sub

Sub AjouterProduit(shCible As Worksheet, Fournisseur As String, RefProduit As String)
Dim L As Long
    'Ajouter le produit sur la première ligne libre de la feuille
    With shCible
        L = Dernlign(shCible)
        .Cells(L, 1).Value = Fournisseur
        .Cells(L, 2).Value = RefProduit
    End With
    'Trier la feuille
    TrierFeuille shCible
End Sub

Private Function Dernlign(shCible As Worksheet) As Long
'Retourne le numéro de la 1ère ligne libre de la feuille
Dim L As Long
    With shCible
        L = .Cells(.Rows.Count, 1).End(xlUp).Row
    End With
    Dernlign = L + 1
End Function

Sub TrierFeuille(shCible As Worksheet)
'Trie la feuille par Fournisseur, puis par Produit
    With shCible
      .Range("A2:V1000").Sort Key1:=.Range("A2"), Order1:=xlAscending, _
                Key2:=.Range("B2"), Order2:=xlAscending, Header:=xlNo
    End With
End Sub

 

En espérant que ça puisse t'aider....

 

Bien cordialement,

Pièce jointe:
xlsm PourJer31.xlsm   [ Taille: 22.99 Ko - Téléchargements: 409 ]

Didier_mDF
Image redimensionnée
Le Webmaster

La réponse vous satisfait ? Merci de revenir solder le sujet en [résolu], voir ce lien
Hors Ligne
Rapport   Haut 

Re: Copie automatique de ligne et insertion sur 3 feuilles
#4
Débutant XLPages

Inscription: 29/04/2014
De Nantes

Messages: 4

Système d'exploitation:
PC
Version Excel utilisée:
2007
Posté le : 06-05-2014 17h08

Bonjour à tout le forum et à MyDearFriend,

 

C'est tout simplement phénoménal ... une vraie bombe ton code ...

 

Sincèrement, j'aurai aimé mettre mon fichier, mais celui-ci contient ma comptabilité et je n'arrive pas à l'épurer proprement car je travaille également sur d'autres onglets afin d'essayer d'optimiser la globalité de ce fichier. De plus par exemple la page "vente" va chercher d'autres informations automatiquement dans les onglets de chaque mois en fonction des références produits.

 

Je suis entrain de rapatrier mes données sur ton fichier qui est extra, mais il manque des liens avec le fichier original :(. Ah zut, ton fichier avec ces 3 onglets mais remplis de mes données fait 297Ko :(

 

Sinon, pourrais tu m'aider en privé même si je dois t'envoyer mon fichier global avec mes données personnelles ?

 

 

Cordialement,

 

 

 

 

Hors Ligne
Rapport   Haut 

Re: Copie automatique de ligne et insertion sur 3 feuilles
#5
Débutant XLPages

Inscription: 29/04/2014
De Nantes

Messages: 4

Système d'exploitation:
PC
Version Excel utilisée:
2007
Posté le : 07-05-2014 17h40

Bonjour à tous,

 

Voilà, j'ai ajouté au fichier de MyDearFriend une simulation de quelques données qui pourrait se trouver pour chaque fournisseur sur chaque onglet. A savoir, que sur les onglets "Ventes" et "Stock", il y a des formules qui sont liés à l'onglet "Achats".

 

Le problème est que si une nouvelle référence vient s'intégrer au milieu des autres, les formules précédentes sur les onglets "Ventes" et "Stock" restent attachés à ligne -1 de l'onglet "Achats'  !!!!

 

Comment pourrais-je faire pour que les formules restent attachées aux cellules d'origines ?

 

J'ai attaché le fichier de MyDearFriend avec quelques ajouts pour que vous puissiez simuler le problème.

 

Ps: MyDearFriend, j'ai juste fait une petite modification à ta bombe (car c'est vraiment une bombe ton fichier) pour le faire démarrer sur chaque onglet en ligne 2. Merci encore pour ton aide.

Pièce jointe:
xlsm PourJer31-1.xlsm   [ Taille: 24.05 Ko - Téléchargements: 422 ]
Hors Ligne
Rapport   Haut 


Vous pouvez voir les sujets.
Vous ne pouvez pas débuter de nouveaux sujets.
Vous ne pouvez pas répondre aux contributions.
Vous ne pouvez pas éditer vos contributions.
Vous ne pouvez pas effacez vos contributions.
Vous ne pouvez pas ajouter de nouveaux sondages.
Vous ne pouvez pas voter en sondage.
Vous ne pouvez pas attacher des fichiers à vos contributions.
Vous ne pouvez pas poster sans approbation.

[Recherche avancée]


Qui consulte actuellement ce sujet ?   1 Utilisateur(s) anonymes