Lancement d'une macro après actualisation des données! [Résolu]

Darktruff 34 Messages postés jeudi 31 mai 2007Date d'inscription 31 mars 2011 Dernière intervention - 28 févr. 2008 à 11:19 - Dernière réponse : Darktruff 34 Messages postés jeudi 31 mai 2007Date d'inscription 31 mars 2011 Dernière intervention
- 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.
Afficher la suite 

14 réponses

Répondre au sujet
cs_MPi 3863 Messages postés mardi 19 mars 2002Date d'inscription 13 mars 2018 Dernière intervention - 29 févr. 2008 à 10:54
+3
Utile
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
Cette réponse vous a-t-elle aidé ?  
Commenter la réponse de cs_MPi
NHenry 14133 Messages postés vendredi 14 mars 2003Date d'inscription 22 avril 2018 Dernière intervention - 28 févr. 2008 à 11:32
0
Utile
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
Commenter la réponse de NHenry
Darktruff 34 Messages postés jeudi 31 mai 2007Date d'inscription 31 mars 2011 Dernière intervention - 28 févr. 2008 à 11:43
0
Utile
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...
Commenter la réponse de Darktruff
NHenry 14133 Messages postés vendredi 14 mars 2003Date d'inscription 22 avril 2018 Dernière intervention - 28 févr. 2008 à 11:55
0
Utile
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
Commenter la réponse de NHenry
Darktruff 34 Messages postés jeudi 31 mai 2007Date d'inscription 31 mars 2011 Dernière intervention - 28 févr. 2008 à 12:03
0
Utile
Lol c'est pas grave! Merci d'avoir voulu m'aider en tous cas
Commenter la réponse de Darktruff
cs_MPi 3863 Messages postés mardi 19 mars 2002Date d'inscription 13 mars 2018 Dernière intervention - 29 févr. 2008 à 00:26
0
Utile
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
Commenter la réponse de cs_MPi
Darktruff 34 Messages postés jeudi 31 mai 2007Date d'inscription 31 mars 2011 Dernière intervention - 29 févr. 2008 à 09:17
0
Utile
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....
Commenter la réponse de Darktruff
Darktruff 34 Messages postés jeudi 31 mai 2007Date d'inscription 31 mars 2011 Dernière intervention - 29 févr. 2008 à 10:12
0
Utile
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 )
Commenter la réponse de Darktruff
cs_MPi 3863 Messages postés mardi 19 mars 2002Date d'inscription 13 mars 2018 Dernière intervention - 29 févr. 2008 à 10:23
0
Utile
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
Commenter la réponse de cs_MPi
cs_MPi 3863 Messages postés mardi 19 mars 2002Date d'inscription 13 mars 2018 Dernière intervention - 29 févr. 2008 à 10:29
0
Utile
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
Commenter la réponse de cs_MPi
Darktruff 34 Messages postés jeudi 31 mai 2007Date d'inscription 31 mars 2011 Dernière intervention - 29 févr. 2008 à 10:46
0
Utile
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
Commenter la réponse de Darktruff
Darktruff 34 Messages postés jeudi 31 mai 2007Date d'inscription 31 mars 2011 Dernière intervention - 29 févr. 2008 à 11:41
0
Utile
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.
Commenter la réponse de Darktruff
cs_MPi 3863 Messages postés mardi 19 mars 2002Date d'inscription 13 mars 2018 Dernière intervention - 29 févr. 2008 à 11:49
0
Utile
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
Commenter la réponse de cs_MPi
Darktruff 34 Messages postés jeudi 31 mai 2007Date d'inscription 31 mars 2011 Dernière intervention - 29 févr. 2008 à 11:55
0
Utile
Oki merci MPi!
Commenter la réponse de Darktruff

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.