Précédent   Forum des professionnels en informatique > Logiciels > Microsoft Office > Excel > Macros et VBA Excel
Macros et VBA Excel Vos questions relatives aux macros Excel, à l'utilisation de VBA et à l'automatisation de vos classeurs Excel.
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 03/01/2012, 13h50   #1
Invité de passage
 
Homme Thomas NARES
Consultant informatique
Inscription : janvier 2012
Messages : 6
Détails du profil
Informations personnelles :
Nom : Homme Thomas NARES
Localisation : France, Marne (Champagne Ardenne)

Informations professionnelles :
Activité : Consultant informatique
Secteur : Transports

Informations forums :
Inscription : janvier 2012
Messages : 6
Points : 0
Points : 0
Par défaut Est-ce possible ? Plugin VBA par defaut dans excel

Bonjour,

j'aimerais integrer sur tous les postes de mon equipe une sorte d'extension Excel qui serait une fonction VBA,

En gros ce serait une fonction VBA dans l'esprit de RechercheV dans un referentiel Excel qu'on a, selon ni'mporte quelle cellule clé genre :

=Referentiel(A1;"CODE";"LIBELLE")

ou Referentiel() va chercher A1 dans la cellule "CODE" du referentiel excel et me retourner la cellule "LIBELLE" liée,

donc pas de soucis pour moi pour coder cette fonction, mais peut-on deployer cette fonction sur tous les postes, sur n'importe quel classeur excel ?

En gros mon collegue crée un nouveau classeur, il tape "XYZ123" dans A1 et "=Referentiel(A1;"CODE";"LIBELLE")" dans B1 et j'ai mon libellé ?

Le referentiel sera sur le reseau, accessible par tous.

Possible ou pas ?

Merci !
tomasdev est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 03/01/2012, 14h36   #2
Membre Expert
 
Avatar de ZebreLoup
 
Homme Sebastien L
Ingénieur Financier
Inscription : mars 2010
Messages : 880
Détails du profil
Informations personnelles :
Nom : Homme Sebastien L
Âge : 33
Localisation : France, Val de Marne (Île de France)

Informations professionnelles :
Activité : Ingénieur Financier
Secteur : Finance

Informations forums :
Inscription : mars 2010
Messages : 880
Points : 1 867
Points : 1 867
Il suffit de le mettre dans les macro complémentaires pour que ce soit accessible à l'ouverture d'Excel.

Par contre, pour le déploiement, c'est un peu plus compliqué, il faut recopier le .xla sur tous les postes et vérifier que chaque Excel l'a bien pris en compte. Mais ça doit marcher normalement.
__________________
« Compter en octal, c’est comme compter en décimal, si on n’utilise pas ses pouces » - Tom Lehrer
« Il est assez difficile de trouver une erreur dans son code quand on la cherche. C’est encore bien plus dur quand on est convaincu que le code est juste. » - Steve McConnell
ZebreLoup est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 03/01/2012, 14h42   #3
Invité de passage
 
Homme Thomas NARES
Consultant informatique
Inscription : janvier 2012
Messages : 6
Détails du profil
Informations personnelles :
Nom : Homme Thomas NARES
Localisation : France, Marne (Champagne Ardenne)

Informations professionnelles :
Activité : Consultant informatique
Secteur : Transports

Informations forums :
Inscription : janvier 2012
Messages : 6
Points : 0
Points : 0
ok parfait, je viens de trouver la doc, et c'est bien ca

Faut justre faire attention aux feuilles qui sortent par email, quand elles atterissent sur des postes sans ce XLA

Question subsidiaire, existe t'il un RechercheV à qui on pourrait preciser le numero de la colone clé ?
Car RechercheV cherche dans la colonne 1 et retourne la colonne qu'on lui indique, mais j'aimerais preciser les deux!
tomasdev est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 03/01/2012, 14h48   #4
Membre Expert
 
Avatar de ZebreLoup
 
Homme Sebastien L
Ingénieur Financier
Inscription : mars 2010
Messages : 880
Détails du profil
Informations personnelles :
Nom : Homme Sebastien L
Âge : 33
Localisation : France, Val de Marne (Île de France)

Informations professionnelles :
Activité : Ingénieur Financier
Secteur : Finance

Informations forums :
Inscription : mars 2010
Messages : 880
Points : 1 867
Points : 1 867
Il faut travailler avec INDEX et EQUIV dans ce cas.
__________________
« Compter en octal, c’est comme compter en décimal, si on n’utilise pas ses pouces » - Tom Lehrer
« Il est assez difficile de trouver une erreur dans son code quand on la cherche. C’est encore bien plus dur quand on est convaincu que le code est juste. » - Steve McConnell
ZebreLoup est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 03/01/2012, 16h51   #5
Invité de passage
 
Homme Thomas NARES
Consultant informatique
Inscription : janvier 2012
Messages : 6
Détails du profil
Informations personnelles :
Nom : Homme Thomas NARES
Localisation : France, Marne (Champagne Ardenne)

Informations professionnelles :
Activité : Consultant informatique
Secteur : Transports

Informations forums :
Inscription : janvier 2012
Messages : 6
Points : 0
Points : 0
En effet, c'est bien avec Index et Equiv que j'y arrive,

par contre, impossible de faire marche ma Function, soucis quand passage vers VBA, en gros, sous excel pur, j'ai ca :

Code :
=INDEX('C:\Users\XX0000\Desktop\[ref.xlsm]Ref'!$A:$X;EQUIV(A1;'C:\Users\XX0000\Desktop\[ref.xlsm]Ref'!$A:$A;0);6)
qui me renvoit la colonne n°6 dans le range $A:$X qui est liée a la valeur de A1 trouvée dans ref.xlsm dans la collone A,

je souhaite donc creer la fonction :

Code :
Function Referentiel(Source as Variant, Type as String, Retour as String) as Variant
que j'appelerais comme ceci dans ma cellule :

Code :
=Referentiel(A1; "CODE_BLABLA"; "LIBELLE_TOTO")
avec une petite association au debut de la fonction Referentiel qui dit que :

CODE_BLABLA = Colonne 1,
LIBELLE_BLABLA = Colonne 2,
LIBELLE_TOTO = Colonne 3

Pas de soucis pour l'association, c'est pour le passage en VBA de

Code :
=INDEX('C:\Users\XX0000\Desktop\[ref.xlsm]Ref'!$A:$X;EQUIV(A1;'C:\Users\XX0000\Desktop\[ref.xlsm]Ref'!$A:$A;0);6)
que je bloque

Une piste ?

Je pensais à genre :

Code :
1
2
Dim equi as Variant
equi = Application.worksheetfunction.match(Source, 'C:\Users\XX0000\Desktop\[ref.xlsm]Ref'!$A:$A, 0)
mais deja la ca bloque, je pense que le soucis vient de ma syntaxe sur le second parametre de match
tomasdev est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 03/01/2012, 19h16   #6
Membre Expert
 
Avatar de ZebreLoup
 
Homme Sebastien L
Ingénieur Financier
Inscription : mars 2010
Messages : 880
Détails du profil
Informations personnelles :
Nom : Homme Sebastien L
Âge : 33
Localisation : France, Val de Marne (Île de France)

Informations professionnelles :
Activité : Ingénieur Financier
Secteur : Finance

Informations forums :
Inscription : mars 2010
Messages : 880
Points : 1 867
Points : 1 867
Tu es sur la bonne piste, mais il faut utiliser des Ranges dans les paramètres
__________________
« Compter en octal, c’est comme compter en décimal, si on n’utilise pas ses pouces » - Tom Lehrer
« Il est assez difficile de trouver une erreur dans son code quand on la cherche. C’est encore bien plus dur quand on est convaincu que le code est juste. » - Steve McConnell
ZebreLoup est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 04/01/2012, 10h13   #7
Invité de passage
 
Homme Thomas NARES
Consultant informatique
Inscription : janvier 2012
Messages : 6
Détails du profil
Informations personnelles :
Nom : Homme Thomas NARES
Localisation : France, Marne (Champagne Ardenne)

Informations professionnelles :
Activité : Consultant informatique
Secteur : Transports

Informations forums :
Inscription : janvier 2012
Messages : 6
Points : 0
Points : 0
J'ai beau essayer, ca me semble pas possible sans ouvrir physiquement le classeur via VBA

Du genre :

Code :
1
2
3
4
5
6
7
8
Dim sh As Worksheet
    sh = Workbooks("C:\Users\XX0000\Desktop\ref.xlsm").Worksheets("Ref")
 
    Dim ra As Range
    ra = sh.Range("$A:$A")
 
    Dim mat As Long
    mat = Application.WorksheetFunction.Match("A13", ra, 0)
bloque sur le Workbooks(), c'est jouable en VBA de referencer un classeur fermé ?

Sans passer par ADO ?

Sinon autre idée, J'ai ma formule excel qui marche à base de Index(Equal()),
c'est pas jouable que ma formule Referentiel() traduise en formule excel, et remplace dans la cellule ? il restera à tirer vers le bas pour remplir les tableaux, et ce sera peut etre plus efficace niveau lectures de fichier non ?
tomasdev est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 04/01/2012, 10h37   #8
Membre Expert
 
Avatar de ZebreLoup
 
Homme Sebastien L
Ingénieur Financier
Inscription : mars 2010
Messages : 880
Détails du profil
Informations personnelles :
Nom : Homme Sebastien L
Âge : 33
Localisation : France, Val de Marne (Île de France)

Informations professionnelles :
Activité : Ingénieur Financier
Secteur : Finance

Informations forums :
Inscription : mars 2010
Messages : 880
Points : 1 867
Points : 1 867
Effectivement, ça ne marchera pas de cette manière sans ouvrir physiquement le classeur VBA. Après, tu peux toujours l'ouvrir en arrière-plan, ce sera transparent pour l'utilisateur. Ou encore écrire la formule dans une cellule pour ne pas utiliser WorksheetFunction. Mais tu vas avoir un gros problème de performance dès qu'il y aura trop d'accès à ta fonction dans un classeur.

J'avais déjà travaillé sur ce type de problème. Au début de ma fonction, je vérifiais si le classeur était ouvert ou pas et adaptait en fonction. Je conseillais à ceux qui l'utilisaient d'ouvrir le classeur pour que ce soit plus rapide.

Au final, j'ai réussi à les convaincre de faire une base Access (Pour moi, quelqu'un qui dit qu'il a fait une base de données sous Excel, je me dis "aïe, aïe, aïe" - Sauf bien sûr pour une application mono-utilisateur, avec des données limitées et sans requêtage)
__________________
« Compter en octal, c’est comme compter en décimal, si on n’utilise pas ses pouces » - Tom Lehrer
« Il est assez difficile de trouver une erreur dans son code quand on la cherche. C’est encore bien plus dur quand on est convaincu que le code est juste. » - Steve McConnell
ZebreLoup est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 04/01/2012, 11h10   #9
Invité de passage
 
Homme Thomas NARES
Consultant informatique
Inscription : janvier 2012
Messages : 6
Détails du profil
Informations personnelles :
Nom : Homme Thomas NARES
Localisation : France, Marne (Champagne Ardenne)

Informations professionnelles :
Activité : Consultant informatique
Secteur : Transports

Informations forums :
Inscription : janvier 2012
Messages : 6
Points : 0
Points : 0
En fait, ils ont 3 logiciels lourds (SAP, Arcgis pour situer),
Avec un export hebdomadaire vers plusieurs Excels,

et un des collegues recolle tout sous excel en faisant les liaisons entre les ID des un et des autres,

mais la base de données commune , c'est un projet que je veut developper

En attendant, ils ont souvent des listes de codes, id ou libellés, et ne maitrisent pas RechercheV pour integrer certains champs à ces listes pour faire leurs traitements

Ma fonction marche la, pas super propre mais j'ai pas trouvé mieux :

Etape 1.

Code :
=Referentiel("A", "CD_SAP", "LIB_ARCGIS")
Ce qui pond dans ma cellule :

Code :
=INDEX('C:\Users\XX0000\Desktop\[ref.xlsm]Ref'!$A:$X;EQUIV(A35;'C:\Users\XX0000\Desktop\[ref.xlsm]Ref'!$D:$D;0);22)
Apres, copier / collage valeur dans la meme cellule et roule
tomasdev est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 06h13.


 
 
 
 
Partenaires

Hébergement Web