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

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

Votre réponse

14 réponses

Meilleure réponse
cs_MPi
Messages postés
3877
Date d'inscription
mardi 19 mars 2002
Dernière intervention
23 août 2018
- 29 févr. 2008 à 10:54
3
Merci
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

Merci cs_MPi 3

Avec quelques mots c'est encore mieux Ajouter un commentaire

Codes Sources a aidé 94 internautes ce mois-ci

Commenter la réponse de cs_MPi
NHenry
Messages postés
14295
Date d'inscription
vendredi 14 mars 2003
Dernière intervention
12 novembre 2018
- 28 févr. 2008 à 11:32
0
Merci
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
Messages postés
34
Date d'inscription
jeudi 31 mai 2007
Dernière intervention
31 mars 2011
- 28 févr. 2008 à 11:43
0
Merci
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
Messages postés
14295
Date d'inscription
vendredi 14 mars 2003
Dernière intervention
12 novembre 2018
- 28 févr. 2008 à 11:55
0
Merci
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
Messages postés
34
Date d'inscription
jeudi 31 mai 2007
Dernière intervention
31 mars 2011
- 28 févr. 2008 à 12:03
0
Merci
Lol c'est pas grave! Merci d'avoir voulu m'aider en tous cas
Commenter la réponse de Darktruff
cs_MPi
Messages postés
3877
Date d'inscription
mardi 19 mars 2002
Dernière intervention
23 août 2018
- 29 févr. 2008 à 00:26
0
Merci
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
Messages postés
34
Date d'inscription
jeudi 31 mai 2007
Dernière intervention
31 mars 2011
- 29 févr. 2008 à 09:17
0
Merci
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
Messages postés
34
Date d'inscription
jeudi 31 mai 2007
Dernière intervention
31 mars 2011
- 29 févr. 2008 à 10:12
0
Merci
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
Messages postés
3877
Date d'inscription
mardi 19 mars 2002
Dernière intervention
23 août 2018
- 29 févr. 2008 à 10:23
0
Merci
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
Messages postés
3877
Date d'inscription
mardi 19 mars 2002
Dernière intervention
23 août 2018
- 29 févr. 2008 à 10:29
0
Merci
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
Messages postés
34
Date d'inscription
jeudi 31 mai 2007
Dernière intervention
31 mars 2011
- 29 févr. 2008 à 10:46
0
Merci
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
Messages postés
34
Date d'inscription
jeudi 31 mai 2007
Dernière intervention
31 mars 2011
- 29 févr. 2008 à 11:41
0
Merci
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
Messages postés
3877
Date d'inscription
mardi 19 mars 2002
Dernière intervention
23 août 2018
- 29 févr. 2008 à 11:49
0
Merci
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
Messages postés
34
Date d'inscription
jeudi 31 mai 2007
Dernière intervention
31 mars 2011
- 29 févr. 2008 à 11:55
0
Merci
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.