Lancement d'une macro après actualisation des données!

Résolu
Darktruff Messages postés 34 Date d'inscription jeudi 31 mai 2007 Statut Membre Dernière intervention 31 mars 2011 - 28 févr. 2008 à 11:19
Darktruff Messages postés 34 Date d'inscription jeudi 31 mai 2007 Statut Membre Dernière intervention 31 mars 2011 - 29 févr. 2008 à 11:55
Bonjour a tous!

Je suis débutant en VBA et je travail acuellement sur excel.
Voici mon problème :

Le projet sur lequels je travail est que, à partir d'une feuille excel qui est un suivi de la situation des factures des clients d'une entreprise (Montant de la factucre, accomptes versés, soldes, niveau de relance, date de la relance etc etc...) créer automatiquement des lettres de relances en fonction de la date et du niveau de relance a partir d'une lettre type.

Or l'adresse de chaque et surtout leur nom exact n'etaient pas présente sur le fichier excel, j'ai du donc importer directement ces informations d'une base de données access puis j'ai fais une recherchev pour effectuer les recherches en fonction du code de la facture.

Mais le problème est que le format des codes de facture diffère (en effet il y a des codes numériques et alphanumériques) donc cela pose problèmes lors de l'execution de ma recherchev. Pour résoudre cela j'ai ecris une fonction qui trie les codes numériques et alphanumériques en cliquant sur un bouton et cela  marche bien.

 Mais (que de mais dans ce post....) on m'a imposé de ne pas mettre de bouton  de peur que les gens qui utiliseront le fichier excel n'oubli pas d'appuyer dessus.

Donc une solution que j'ai trouver et c'est la que je demande votre aide :

Comment lancer cette macro a l'ouverture du fichier, mais attention, cela après l'actualisation automatique des données importer.

J'utilise excel 2003 sous windows xp

Merci.

14 réponses

cs_MPi Messages postés 3877 Date d'inscription mardi 19 mars 2002 Statut Membre Dernière intervention 17 août 2018 23
29 févr. 2008 à 10:54
Commence par changer ta formule.
2 choix: formule française avec FormulaLocal ou formule universelle avec Formula (préférable...)

Cells(i, 14).FormulaLocal = "=SI(ESTNA(RECHERCHEV(F" & i &
",Clients!A1:J2806,2)),,RECHERCHEV(F" & i &
",Clients!A1:J2806,2))"

'préférablement celle-ci
Cells(i, 14). Formula = "=IF(ISNA(VLOOKUP(F" & i &
",Clients!A:J,2)),,VLOOKUP(F" & i &
",Clients!A:J,2))"

MPi²
Pour ceux qui programment sous Office, n'oubliez pas qu'il existe un forum dédié à ces applications VBA....... ICI
3
NHenry Messages postés 15113 Date d'inscription vendredi 14 mars 2003 Statut Modérateur Dernière intervention 22 avril 2024 159
28 févr. 2008 à 11:32
Bonjour

Je ne sais pas si cela répond en partie à ta question :

Il est possible de créer une fonction utilisable directement dans les cellules Excel :

Public Function MaFonction(byval pRange as Range) as String
    MaFonction="Ligne : " & cstr(pRange.Row) & ", Colonne : " & cstr(prange.column)
End function

Et dans ta cellule :
=MaFonction(D6)
Retournera : "Ligne : 6, Colonne : 4"

Dans Word, j'Excel. (juste pour la citation)
VB (6, .NET1&2), C++, C#.Net1
Mon site
0
Darktruff Messages postés 34 Date d'inscription jeudi 31 mai 2007 Statut Membre Dernière intervention 31 mars 2011
28 févr. 2008 à 11:43
Non malheuresement... Je ne cherche pa a recupérer l'index d'une cellule. Ce que je veux, et je me suis peut etre mal exprimer c'est lancer une fonction a l'ouverture de mon fichier excel après l'actualisation automatique des données...
0
NHenry Messages postés 15113 Date d'inscription vendredi 14 mars 2003 Statut Modérateur Dernière intervention 22 avril 2024 159
28 févr. 2008 à 11:55
Bonjour

dsl, j'ai cru que tu voulais refaire une fonction RechercheV plus adaptée à ton cas, la démo, c'était pour te montrer comment faire une fonction personnalisée utilisable dans une cellule Excel, l'utilisation de Row et Column, c'était juste pour afficher quelque chose dans la cellule.

Dans Word, j'Excel. (juste pour la citation)
VB (6, .NET1&2), C++, C#.Net1
Mon site
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Darktruff Messages postés 34 Date d'inscription jeudi 31 mai 2007 Statut Membre Dernière intervention 31 mars 2011
28 févr. 2008 à 12:03
Lol c'est pas grave! Merci d'avoir voulu m'aider en tous cas
0
cs_MPi Messages postés 3877 Date d'inscription mardi 19 mars 2002 Statut Membre Dernière intervention 17 août 2018 23
29 févr. 2008 à 00:26
Tu as la possibilié d'utiliser Workbook_Open pour appeler une ou des procédures. Tu pourrais alors utiliser cet événement pour importer tes données d'Access, si c'est le cas, et appeler l'autre procédure qui fait le tri.

MPi²
Pour ceux qui programment sous Office, n'oubliez pas qu'il existe un forum dédié à ces applications VBA....... ICI
0
Darktruff Messages postés 34 Date d'inscription jeudi 31 mai 2007 Statut Membre Dernière intervention 31 mars 2011
29 févr. 2008 à 09:17
Non j'ai déja essayer cette sub et le problème c'est que la fonction de tri se lance quoiqu'il arrive avant l'actualisation....
0
Darktruff Messages postés 34 Date d'inscription jeudi 31 mai 2007 Statut Membre Dernière intervention 31 mars 2011
29 févr. 2008 à 10:12
Bon j'ai laissé tomber le lancement de la macro après l'actualisation, c'est trop compliqué... J'ai contourner le problème en casant ma fonction dans une aue autre(comme sa on n'y voi que u feu) .
Mais le problème maintenant c'est que ma fonction qui permet de convertir une colonne ne marche pas sous forme de macro qui est la suivant :

Columns("R:R").Select
Selection.TextToColumns Destination:=Range("R1"), DataType:=xlDelimited, _
TextQualifier:=xlDoubleQuote, ConsecutiveDelimiter:=False, Tab:=True, _
Semicolon:=False, Comma:=False, Space:=False, Other:=False, FieldInfo _
:=Array(1, 1), TrailingMinusNumbers:=True

rien ne se passe et les valeur dans mes colonnes sont "#NOM?"
Mais quand je clique sur "Données">" Convertir..." pouf comme par hasard sa marche alor que j'ai fais un enregistrement de macro don logiquement sa devrait marché...

Quelqu'un serait pourquoi la macro ne fonctionne pas et si vous avez une solution aidez moi svp ... (je vais craquer mentalement si sa continue mdr )
0
cs_MPi Messages postés 3877 Date d'inscription mardi 19 mars 2002 Statut Membre Dernière intervention 17 août 2018 23
29 févr. 2008 à 10:23
Il faudrait voir ton code pour mieux comprendre, du moins la partie des appels de procédures... ou encore les étapes que le programme doit exécuter au lancement. Du genre: importation des données, tri, autre ... dans l'ordre où elles se produisent.

Normalement, le programme devrait passer à une nouvelle action que lorsque la précédente est terminée, incluant le recalcul des formules.

Peut-être pourrais-tu essayer Workbook_Activate ou Workbook_SheetActivate pour y insérer ta procédure de tri (?)

MPi²
Pour ceux qui programment sous Office, n'oubliez pas qu'il existe un forum dédié à ces applications VBA....... ICI
0
cs_MPi Messages postés 3877 Date d'inscription mardi 19 mars 2002 Statut Membre Dernière intervention 17 août 2018 23
29 févr. 2008 à 10:29
Pour l'importation d'enregistrements d'Access, tu pourrais créer des objets Access dans Excel, utiliser un Recordset pour lire les données que tu veux importer et utiliser la fonction CopyFromRecordset pour coller le résultat dans la feuille. C'est rapide et efficace, et tu ne devrais pas avoir à convertir les résultats...

Fais des recherches sur Access.Application ainsi que les autres mots en gras.

MPi²
Pour ceux qui programment sous Office, n'oubliez pas qu'il existe un forum dédié à ces applications VBA....... ICI
0
Darktruff Messages postés 34 Date d'inscription jeudi 31 mai 2007 Statut Membre Dernière intervention 31 mars 2011
29 févr. 2008 à 10:46
Je vais expliquer en détail.

Mon fichier excel est liée a une base de données via un lien ODBC.

Le fichier excel  vide les colonnes dans lesquels j'avais insérez une fonction recherchev puis met a jour les données importer a chaque ouverture de fichier.

La fonction que j'utilise est une sorte de publipostage, dès que l'utilisateur a fini ces toutes ces modifications, il cliques sur un bouton et cela lui génère toutes les lettre dont il a besoin ( cela n'es pas important).

Ce qui est important est que dans ce code avant l'edition des document, je demande a cette fonction de me recopier mes fonction recherchev :

For i = 3 To R
Cells(i, 14).Formula = "=SI(ESTNA(RECHERCHEV(F" & i & ",Clients!A1:J2806,2)),,RECHERCHEV(F" & i & ",Clients!A1:J2806,2))"
Next
(ou R est l nombre de cellule non vide de mon fichier excel, i l'index de la ligne, et 14 l'index de ma colonne N).

à ce moment la chaque ligne de la colonne a pour valeur "#NOM?".

Et donc tout de suite apres je demande à convertir la colonne concernée en la masquant (comme cela l'utilisateur n'y voit que du feu) :

Columns("N").EntireColumn.Hidden = True
Columns("N:N").Select
Selection.TextToColumns Destination:=Range("Q1"), DataType:=xlDelimited, _
TextQualifier:=xlDoubleQuote, ConsecutiveDelimiter:=False, Tab:=True, _
Semicolon:=False, Comma:=False, Space:=False, Other:=False, FieldInfo _
:=Array(1, 1), TrailingMinusNumbers:=True

Et normalement ceci devrait retablir la la valeur de la cellule ( "#NOM?" devient Auchan)

Mais ce bout de code ne marche pas et comme je l'ai dis quand je clique sur "Données">"Convertir..." cela marche bien, mais je me vois mal dire au client : "Oui donc pour que sa marche vou devez cliquer ici, ici, et ici sur tel colonne pour que cela marche bien...."

Donc si quelqu'un sait comment corriger le problème qu'il me fasse signe.

Merci
0
Darktruff Messages postés 34 Date d'inscription jeudi 31 mai 2007 Statut Membre Dernière intervention 31 mars 2011
29 févr. 2008 à 11:41
MPi! Un grand merci c'est bien la methode que j'utilisait pour copier ma recherchev qui posait problème,


la methode la plus adapter etait :

Cells(i, 14).Formula = "=IF(ISNA(VLOOKUP(F" & i & ",Clients!A:J,2)),,VLOOKUP(F" & i & ",Clients!A:J,2))"

Il y a encore quelque petit bug avec cette formule car il va me chercher des resultat faux aussi... La plupart des resultat son bon mais il y en a pas mal de faux aussi sa doit etre un probleme de format aussi je vais chercher!

Merci de ton aide.
0
cs_MPi Messages postés 3877 Date d'inscription mardi 19 mars 2002 Statut Membre Dernière intervention 17 août 2018 23
29 févr. 2008 à 11:49
Change le dernier paramètre.
Je ne sais pas ce que vaut le 2 comme valeur, mais FALSE va te retourner la valeur exacte, sinon #N/A qui est géré par le ISNA...

Cells(i, 14).Formula = "=IF(ISNA(VLOOKUP(F" & i & ",Clients!A:J,FALSE)),,VLOOKUP(F" & i & ",Clients!A:J,FALSE))"

MPi²
Pour ceux qui programment sous Office, n'oubliez pas qu'il existe un forum dédié à ces applications VBA....... ICI
0
Darktruff Messages postés 34 Date d'inscription jeudi 31 mai 2007 Statut Membre Dernière intervention 31 mars 2011
29 févr. 2008 à 11:55
Oki merci MPi!
0
Rejoignez-nous