Aide Macro transferer automatiquement des données Excel vers un classeur

Bonjour à tous,

J'utilisais la macro assismod.xla pour exporter des données de factures vers un autre classeur Excel.

Malheureusement assismod ne fonctionne plus sous Excel 2016.

Quelqu'un pourrait-il m'aider à faire une macro ?

Je joins deux classeurs Excel explicatifs :

  • 1 : modèle-type de factures (.xltm)
  • 2 : classeur base de données (.xlsx)

En clair je souhaiterais qu'à chaque nouvelle facture sur base du modèle (1), une macro s'ouvre à l'enregistrement ou à l'impression et exporte 3 cellules suivantes de la facture : (date) - (nomclient) et (montant) vers la base de données (2), et ce ligne après ligne.

Les factures peuvent être enregistrées dans le même répertoire que la base de données.

Merci d'avance pour vos conseils.

PascaLem

salut,

un seule fichier n'est pas possible ?? avec les deux onglet Facture de servise et Base de données Factures (xlsx) ??

as tu encore la macro precedente et sur quel excel tu travaillait avant ??

Bonjour,

Non un seul fichier n'est pas possible puisque chaque nouvelle facture sera éditée sur base du modèle que j'ai joint. ; donc j'ai besoin d'un classeur séparé qui servira de bases de données.

Avant j'utilisais office 2010 avec une macro dénommée ASSISMOD fournie telle quelle par Microsoft dans un classeur au format .xla ; je l'ai encore mais elle n'est plus utilisable avec les versions actuelles de EXCEL.

peux tu nous mettre la macro, il suffit peut-être de faire quelque adaptation

La Voici.

Mais je crois qu'elle n'est pas éditable ; elle a l'air protégée par un mot de passe de Microsoft que je n'ai pas.

Ça ne doit pas être compliqué de faire une macro pour transférer 2 ou 3 données depuis un modèle vers un classeur, mais je n'y connais pas grand-chose en VBA.

Cordialement.

6assismod.zip (246.14 Ko)

Je suis un paresseux je sais, oui la macro N’est pas trop compliqué à refaire, je sais pas si je vais avoir tu temp se week-end pour regarder, sinon lundi. Ok

Bon week-end

Ok et merci d'avance !

Sub Copy_Info_Facture()

Dim Nom As String

Dim Total As String

Dim Chemin As String

'Masque les actions de la macro

Application.DisplayAlerts = False

'Enregistre les valeurs dans des variable

Nom = Range("B9").Value

Total = Range("E29").Value

Chemin = ThisWorkbook.Path & "\" 'chemin du fichier encour d'utilisation

'Ouvre le fichier Base de donnée

Workbooks.Open Chemin & "Base de donées.xlsx"

'Insert une ligne

Rows(2).Insert Shift:=xlDown

Range("A2:C2").ClearFormats

'Copy les valeurs dans les cellules

Range("A2") = Now

Range("B2") = Nom

Range("C2") = Total

'Sauvegarde et fermeture

Application.DisplayAlerts = False

Workbooks("Base de donées.xlsx").Close True

Application.DisplayAlerts = True

'Reactive le mascage Macro

Application.DisplayAlerts = True

'Message fin dexecution

MsgBox "Enregistrement terminée"

End Sub

1: les deux fichier doivent être dans le meme répertoire

2: le fichier facture de service dois être au format xlsm

3: tu copy la macro ci dessus

4:Alt-F11

5 crée un module et tu colle la macro

6 tu crée un bouton et tu y associe la macro.

si quelque expert passe par la je suis ouvert a toute remarques.

Grand merci RYJITS ! Ca fonctionne assez bien mais j'ai quand même quelques corrections à demander.

1. Chaque nouvelle entrée s'inscrit bien dans la base de données mais au-dessus des autres au lieu d'en dessous; comment faire pour que les données s'inscrivent en dessous à la première ligne vide comme dans mon modèle base de données que j'avais joint ?

2. Les cellules devraient pouvoir être transférées vers le classeur sur base de leur NOM et non pas en valeur absolue car le MONTANT n'apparaîtra pas toujours en E29.

3. La date de facture qui s'inscrit dans le classeur base de données est toujours la date du jour et non la date de création ; quid si je veux rééditer une ancienne facture pour la modifier ? (la macro ASSISMOD avait une fonction "Mettre à jour").

4. Enfin est-il possible que la macro s'exécute automatiquement à l'enregistrement du fichier facture ( au lieu de cliquer sur le bouton, ce qui est déjà très bien) ?

Thanks.

Point 3 pas compris la valeur Now que j’utilise dans la macro est = à la formule aujourd’hui que tu a dans la cellule. Je comprend vite quand m’exiplique longtemps

Point.2 tu veux quoi comme résultat si E29 =0

Point 3 : la valeur NOW inscrit en effet dans le classeur "base de données" la date de jour de la création ( à la 1è ligne vide comme je le demandais - par exemple à la 15e ligne de la base de données).

Problème : si dans 1 semaine jours je réédite la même facture en changeant la cellule "MONTANT", la macro ne va pas mettre à jour la ligne n°15 ; elle va me créer une nouvelle ligne avec une nouvelle date de facture.

point 2 : si le résultat est 0 je veux 0.

Problème : il y a parfois des factures plus longues ou plus courtes et la cellule "montant" se retrouvera aussi bien en E20 ou E30, etc.... ; j'ai plutôt besoin d'une valeur relative avec le "NomCellule"

Bàv.

Point 2 ok faisable

Point 3 plus complexe je vais devoir ajouter une recherche pour savoir si elle déjà existante, mais selon quel critère nom plus date ?? mais il n’arrive jamais que tu est la même factures le même jour pour la même personne ??

Bonjour RYJITS,

Non il n'arrive jamais que j'ai la même facture le même jour pour la même personne.

Par ailleurs j'ai réussi a extraire le code de l'ancienne macro de Microsoft ASSISMOD ("Assistant de modèle avec suivi de données"); voir en pièce jointe au format pdf.

Sorry ça à l'air un peu complexe ( en tout cas pour moi )

Bàv.

14modulesassismod.pdf (80.19 Ko)

Bonjour à tous; je relance ici ma demande.

Une bonne âme charitable pourrait-elle m'aider à finaliser la macro que je recherche ?

Merci d'avance.

PascaLem

Je suis toujours sur le coup mais je coince sur le point 3 le reste s’est ok

Bonjour RYJITS ,

Pourrais-je déjà avoir tes suggestions pour les points 1, 2 et 4 ?

(Point 3 laisser tomber si trop compliqué).

Merci.

Désolé d’être aussi long je suis en plein travaux donc peux de temps je vais regarder pour t’envoyer la macro avec les autre point d’ici demain.

Salut,

Voici la macro je te laisse te débrouiller avec car j'ai vraiment peux de temps, la partie cherche fonctionne mal car je sais pas pourquoi le format de date se transforme en format anglais et cherche le format européen.

désolée de pas aidée plus.

Sub Copy_Info_Facture()

Dim Nom As String

Dim Total As Variant

Dim Chemin As String

Dim Dat As Date

Dim rgFound As Range

'Enregistre les valeurs dans des variable

Dat = Range("Date").Value

Dat = Format(Dat, "dd.mm.yyyy")

Nom = Range("NomClient").Value

Total = Range("Montant").Value

Chemin = ThisWorkbook.Path & "\" 'chemin du fichier encour d'utilisation

'Ouvre le fichier Base de donnée

Workbooks.Open Chemin & "Base de donées.xlsx"

' récupère le numéro de la dernière ligne vide dans la colonne A.

Lig = Range("A" & Rows.Count).End(xlUp).Row + 1

If Range("A2") = "" Then Lig = 2

'cherche si date +heure deja exitant

Set rgFound = Range("A1:A1000").Find(Dat, LookAt:=xlWhole)

If rgFound Is Nothing Then

'Copy les valeurs les cellules

Range("A" & Lig) = Format(Now, "dd.mm.yyyy")

Range("B" & Lig) = Nom

Range("C" & Lig) = Total

'Sauvegarde et fermeture

Application.DisplayAlerts = False

Workbooks("Base de donées.xlsx").Save

Workbooks("Base de donées.xlsx").Close

Application.DisplayAlerts = True

'Ecrase la date dans le fichier Facture

Range("Date") = Format(Now, "dd.mm.yyyy")

'Message fin dexecution

MsgBox "Enregistrement terminée"

Else

Debug.Print "Name found in :" & rgFound.Address

Application.DisplayAlerts = False

Workbooks("Base de donées.xlsx").Close

Application.DisplayAlerts = True

MsgBox "Enregistrement déja exitant"

End If

'vidage des variables

Set rgFound = Nothing

End Sub

Rechercher des sujets similaires à "aide macro transferer automatiquement donnees classeur"