Copie/Historisation/Sauvegarde par macro VBA

plombiero

XLDnaute Nouveau
Bonjour à tous !

Tout d'abord, je tenais à remercier l'ensemble des utilisateurs actifs de ce forum car ils m'ont réellement permis de progresser dans l'utilisation du VBA et d'Excel en général.

Voici mon problème :

Dans le cadre de l’élaboration d’un reporting quotidien, je souhaite générer par macro :

Etape 1 :

La copie d’une feuille de données d’un classeur (n°1) contenant toutes les données à copier vers une feuille « conso » d’un autre classeur (n°2). (Ces données représentent des erreurs commises par des vendeurs). Il est important de garder une historisation des erreurs de la feuille « conso », donc la copie ne doit pas remplacer les cellules d’une feuille à l’autre, mais les compléter par ordre chronologique.

Etape 2 :

Un UserForm qui alimente un tableau dans une autre feuille du classeur (n°2). Cet userform ne sera utilisé que si le montant de l’erreur dépasse un seuil (500€ par exemple). Ce seuil fait l’objet par le vendeur de nous indiquer le pourquoi de l’erreur, via une fiche à conserver au format papier.
Il est nécessaire de conserver les données de cet userform dans un tableau de l'onglet « Feuilcalcul » à part.

A force de bidouillage, cette étape est réalisée d’une manière qui me convient.

Etape 3 :

Chaque ligne du tableau alimenté par l’userform doit compléter les données déjà copiées dans la feuille conso. Afin de s’assurer que les données soient bien corrélées, j’ai décidé de retenir le nom et le montant de l’erreur comme indicateurs. Si les deux conditions sont vérifiées, alors associer les données de "Feuilcalcul" à "Conso".


Etape 4 :

Enregistrement sur un nouveau classeur de l’onglet « Conso » uniquement avec horodatage. Avec du bidouillage, j’y suis parvenu également.

Enfin, j'aimerai savoir s'il était possible de gérer tout ceci par 2 Macros :
Une qui réalise l'étape 1
Une qui réalise l'étape 2, 3 et 4; i.e. demander à l'utilisateur de saisir les données, les comparer puis compléter le tableau histo, enregistrer le tout.

J'ai donc grandement besoin de votre aide !

En vous remerciant d'avance !
 

Pièces jointes

  • Reporting erreur.zip
    25 KB · Affichages: 115
Dernière édition:

plombiero

XLDnaute Nouveau
Re : Copie/Historisation/Sauvegarde par macro VBA

Je me permets de remonter ce post car je n'ai pas trouvé de solution à mon problème.

Ce qui m'importe le plus, c'est de résoudre la troisième étape, i.e. réussir à alimenter un tableau et à tester les données de ce tableau avec un tableau déjà existant (via deux conditions de test). Si les données existent, alors compléter les informations supplémentaires apportées par le tableau userform sur la page de l'ancien tableau. Je n'ai aucune idée de la façon dont je pourrai résoudre ça !

Merci d'avance pour votre aide !
 

plombiero

XLDnaute Nouveau
Re : Copie/Historisation/Sauvegarde par macro VBA

Bonjourà tous,
je me permets d'up ce message.

J'ai avancé dans le code mais je reste confronté à trois soucis.

1)On m'envoit directement le fichier de données à traiter avec l'historique de ces dernières. Quand je copie les données de façon bête et méchante (via macro VBA, voir code ci-dessous), bin ça ne fait que s'incrémenter et ça me génère des doublons. Sauf qu'entre temps, les données de l'userform (qui sont saisies par moi-même) ont complétées mes données collées précédentes. Comment éviter ces doublons ? Comment faire en sorte que si les données n'existent pas, elles soient ajoutées en haut de ma liste en décalant toutes les lignes. Si elles existent (on peut tester plusieurs conditions pour cela), ne pas les copier.

2) Quand je filtre les données par date via macro, elles ne filtrent pas les lignes avec mais uniquement la colonne. J'ai essayé ainsi (voir code ci-dessous) mais celà m'affiche une erreur "Cette opération requiert que les cellules fusionnées soient de taille identique".
J'ai bien essayé différentes techniques mais cela n'a pas d'effet.

3)Je n'arrive pas à compléter mes données qui sont importées par mon userform. Cet userform n'est saisi que si l'on reçoit un fichier supplémentaire et doit pouvoir s'ajouter automatiquement à mon historique sur la ligne correspondante à l'erreur en question. Pour le moment, j'arrive tout juste à intégrer ces données supplémentaires dans un tableau à part. J'ai réfléchi à une méthode de test, il faut que trois conditions soient vérifiées (i.e. "client", "p&l", "date de débouclement").




Code:
Option Explicit
Global client_form
Global pl_form
Global auto_form As Boolean
Global ici As String
Global ouvert As String


Sub Lance()
'Macro qui lance l'Userform
UserForm1.Show
End Sub


Public Sub Enregistrement_Risk() 'copie sauvegarde classeur
Dim nom, rep As String

'Masque les onglets inutiles
Worksheets("Resultat").Visible = False
Worksheets("Feuilcalcul").Visible = False
Worksheets("Source").Visible = False

'Enregistre une copie dans le même répertoire que la requête
    nom = Left(ActiveWorkbook.Name, Len(ActiveWorkbook.Name) - 4) & Format(Date, "_dd-mm-yyyy") & Format(Time, "_hhmmss") & ".xls"
           ActiveWorkbook.SaveCopyAs ActiveWorkbook.Path & "\" & nom
    rep = MsgBox("Le fichier destiné au département risque est enregistré sous le nom : " & nom, vbYes + vbInformation, "Copie sauvegarde classeur")
    
'Démasque les onglets pour notre service
Worksheets("Resultat").Visible = True
Worksheets("Feuilcalcul").Visible = True
Worksheets("Source").Visible = True

End Sub

Sub copier_cellules_entre_classeurs()

Dim lastlineselect As Integer
Dim filetoOpen
Dim erreur
Dim rw
Dim ligne
Dim nb_lignes

ici = ThisWorkbook.Name

filetoOpen = Application.GetOpenFilename("Excel (*.xls), *.xls")
If filetoOpen <> False Then
Workbooks.Open Filename:=filetoOpen
ouvert = ActiveWorkbook.Name

Workbooks(ouvert).Activate
Sheets("Base Middle Office").Activate
ActiveCell.SpecialCells(xlLastCell).Select
lastlineselect = Selection.Row
If lastlineselect < 7 Then lastlineselect = 7
nb_lignes = lastlineselect - 6

Workbooks(ici).Activate
Sheets("Conso").Activate
Rows("3:" & 2 + nb_lignes).Select
Selection.Insert Shift:=xlDown
Selection.Interior.ColorIndex = xlNone
Selection.Font.ColorIndex = 0

Workbooks(ouvert).Activate
Sheets("Base Middle Office").Activate
Range("B7:J" & 6 + nb_lignes).Select 'Modif à suivre ici pour changement de date colonnes suivantes
Selection.copy

Workbooks(ici).Activate
Sheets("Conso").Activate
Range("A3").Select
ActiveSheet.Paste

'La suite du code pour transformer les colonnes suivantes au format date
Workbooks(ouvert).Activate
Sheets("Base Middle Office").Activate
Range("K7:M" & 6 + nb_lignes).Select
Selection.copy

Workbooks(ici).Activate
Sheets("Conso").Activate
Range("J3").Select
ActiveSheet.Paste
Selection.NumberFormat = "dd / mm / yy"
Selection.UnMerge
Rows("3:" & 2 + nb_lignes).Select

'A modifier car tri uniquement la colonne sans se préoccuper des lignes
Selection.Sort Key1:=Range("J3"), Order1:=xlDescending, Header:=xlGuess, _
        OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom, _
        DataOption1:=xlSortNormal
        
End If

Workbooks(ouvert).Close savechanges:=False

Enregistrement_Risk

End Sub

Voici le lien de mes fichiers (source + TEST) à récupérer sur MégaUpload. Le fichier a charger est "test", la macro a lancer est "copier_cellules_entre_classeurs()" dans le classeur "Reporting".

Ce lien n'existe plus

Si vous avez une aide quelconque, elle est la bienvenue car je suis vraiment très court en temps pour rendre ce projet.

Merci d'avance à tous.
 

Discussions similaires

Réponses
8
Affichages
269
Réponses
8
Affichages
431
Réponses
18
Affichages
863

Statistiques des forums

Discussions
312 493
Messages
2 088 957
Membres
103 990
dernier inscrit
lamiadebz