Verificiation par liaison ou lien

Le
Alex
Bonjour,

Dans un classeur Excel, suite à l'utilisation d'un bouton enregistrer,=
est généré par VBA un listing, une ligne par validation. L'=
enregistrement est automatique avec un nom différent a chaque fois.

Sur la ligne générée, il y a une colonne où il est indi=
qué le chemin complet ainsi que le nom du fichier et son extension. Si=
je clique le lien, cela ouvre bien le fichier en question.

Mon problème est maintenant d'ajouter une vérification sur une ce=
llule complétée ou non via ce lien, je n'arrive pas à é=
crire dans ma macro vérifie si la cellule "A1" du fichier (lien inscri=
t dans ma colonne) est complétée ou non (ou affichage de la cellu=
le A1 selon le lien).

Avez vous une solution pour résoudre ce problème.

Merci par avance de votre aide.

Bonne journée

  • Partager ce contenu :
Vos réponses Page 1 / 2
Trier par : date / pertinence
MichD
Le #26552207
Le 30/07/20 à 05:36, Alex a écrit :
Bonjour,
Dans un classeur Excel, suite à l'utilisation d'un bouton enregistrer, est généré par VBA un listing, une ligne par validation. L'enregistrement est automatique avec un nom différent a chaque fois.
Sur la ligne générée, il y a une colonne où il est indiqué le chemin complet ainsi que le nom du fichier et son extension. Si je clique le lien, cela ouvre bien le fichier en question.
Mon problème est maintenant d'ajouter une vérification sur une cellule complétée ou non via ce lien, je n'arrive pas à écrire dans ma macro vérifie si la cellule "A1" du fichier (lien inscrit dans ma colonne) est complétée ou non (ou affichage de la cellule A1 selon le lien).
Avez vous une solution pour résoudre ce problème.
Merci par avance de votre aide.
Bonne journée


Bonjour,
Une fonction personnalisée que j'ai faite il y a déjà plusieurs années.
Je donne à la fin un exemple d'une formule que l'on peut insérer dans la
cellule d'une feuille de calcul ou tu peux appeler la fonction à partir
d'une procédure déjà existante. Les explications sont longues, mais
l'exécution est très rapide.
========================================================================
Fonction Extraire la valeur d'une cellule toute version Excel
Il est possible en utilisant une fonction personnalisée en VBA
d'extraire le contenu d'une cellule d'un fichier fermé comme ceci.
A ) Tu ouvres la fenêtre de l'éditeur de code VBA Raccourci clavier :
Alt + F11
B ) à partir de la barre des menus / outils / références / tu coches
dans la liste la référence suivante :
"Microsoft Activex Data Objects 2.8 Library"
C ) Tu ajoutes un module standard avec la commande du menu : Insertion /
module
D ) Tu copies la fonction suivante dans un MODULE STANDARD du projetVBA
de ton classeur
'--------------------------------------------------------------
Function GetValueWithADO(Classeur$, Feuille$, Cell As Range)
'renvoie la valeur de la cellule Cell de la feuille Feuille
'du classeur fermé Classeur
Dim Conn As String, Rst As Object
Dim Requête As String, PlageBidon As Range
'prépare une "Plage de cellules bidon" pour la clause SELECT
'(un en-tête fictif et une ligne de données)
Set PlageBidon = Cell.Resize(2)
If Val(Application.Version) <= 11 Then
Conn = "Provider=Microsoft.Jet.OLEDB.4.0;" & _
"Data Source=" & Classeur & ";" & _
"Extended Properties=""Excel 8.0;HDR=No;"";"
Else
'prépare les commandes ADO et SQL
Conn = "Provider=Microsoft.ACE.OLEDB.12.0;" & _
"Data Source=" & Classeur & ";" & _
"Extended Properties=""Excel 12.0;HDR=No;"";"
End If
Requête = "SELECT * FROM [" & Feuille & "$" & PlageBidon.Address(0, 0) & "]"
'crée l'objet Recordset
Set Rst = CreateObject("ADODB.Recordset")
'va chercher l'info
Rst.Open Requête, Conn, 0, 1, 1
'et la renvoie
GetValueWithADO = Application.Clean(Rst(0))
'autre syntaxe possible
' GetValueWithADO =Application.Clean(RcdSet.GetString(NumRows:=1))
'nettoyage
Set Rst = Nothing
End Function
'--------------------------------------------------------------
E ) dans ta feuille de calcul, tu saisis ce type de formule :
=GetValueWithADO("Chemin & nom du fichier";"Nom de la feuille";adresse
de la cellule)
Tu obtiens une syntaxe comme ceci pour récupérer un contenu texte
=GetValueWithADO("c:UsersTon profilDocumentsClasseur1.xlsm";"Feuil2";B2)
'Tu peux remplacer ceci "c:UsersTon profilDocumentsClasseur1.xlsm"
par la référence d'une adresse de cellule où se trouve l'information.
'Dans une procédure, tu insères une variable et tu vérifies si cette
valeur est exacte.
X = =GetValueWithADO("c:UsersTon
profilDocumentsClasseur1.xlsm";"Feuil2";B2)
Pour récupérer un contenu numérique, tu peux utiliser une des 2 formules
suivantes :
=GetValueWithADO("c:UsersDenisDocumentsClasseur1.xlsm";"Feuil2";A2)*1
OU
=CNUM(GetValueWithADO("c:UsersDenisDocumentsClasseur1.xlsm";"Feuil2";A2))
F ) au besoin, tu peux tirer cette formule sur une colonne ou une ligne
sans problème
G ) cela devrait fonctionner pour toutes les versions d'Excel, 32 ou 64
bits. (jamais tester sur 64 bits)
========================================================================
MichD
Alex
Le #26552221
Merci MichD
J'ai procédé à l'ajout du référenciel ActiveXdata et à l'ajout de la formule. J'ai modifié le chemin d'acces par la référence de cellule où se trouve le nom du chemin. Cela fo nctionne très bien. Merci encore
Néanmoins, lorsque je modifie l'info de la cellule sur le classeur fer mé a vérifier, je suis obligé de me remettre dans la formule et refaire entrer pour actualisé l'info. N'y a t il pas un moyen d'ac tualisé le résultat sans faire cette action manuel ?
Merci par avance de votre aide.
MichD
Le #26552234
Le 30/07/20 à 06:38, Alex a écrit :
Merci MichD
J'ai procédé à l'ajout du référenciel ActiveXdata et à l'ajout de la formule. J'ai modifié le chemin d'acces par la référence de cellule où se trouve le nom du chemin. Cela fonctionne très bien. Merci encore
Néanmoins, lorsque je modifie l'info de la cellule sur le classeur fermé a vérifier, je suis obligé de me remettre dans la formule et refaire entrer pour actualisé l'info. N'y a t il pas un moyen d'actualisé le résultat sans faire cette action manuel ?
Merci par avance de votre aide.


On va débuter par le plus simple...
En dessous de la ligne de déclaration de la fonction, ajoute cette ligne
de code : Application.Volatile
Chaque fois qu'une des cellules passera en mode édition, lors de la
validation de cette cellule, la fonction s'actualisera.
Si tu veux le tout en automatique, il y a ce qui suit.
Et si cela te tente, tu peux utiliser un module de classe. Il s'agit de
reproduire le code du fichier exemple dans le tien. Attention les noms
des modules et des variables sont importants. Tu peux leur donner un nom
différent si tu désires, mais assure-toi que tu les modifies partout.
Ce que cette approche fait, c'est de mettre à jour la feuille que tu
nommerais dans la procédure chaque fois que le classeur contenant la
fonction deviendra le classeur actif.
https://www.cjoint.com/c/JGEog0iM5fl
MichD
MichD
Le #26552325
Tu peux simplement ouvrir le ThisWorkbook de ton classeur où se retrouve
la fonction et copier le code suivant en adaptant le nom de la feuille
de calcul.
'-------------------------------
Private Sub Workbook_Activate()
'Adapte le nom de la feuille
Worksheets("Feuil1").Calculate
End Sub
'-------------------------------
MichD
Alex
Le #26552396
Merci encore MichD
Je mets en application ;)
Bonne journée
Alex
Le #26552567
Bonjour,
Des l'ouverture du fichier, la macro procède automatiquement à la mise à jour de mes cellules. Cela prend beaucoup de temps (plus il y a de ligne plus l'action prends du temps) y aurait il un moyen d'exclure en automatique l'exécution de la macro ?
Merci pour votre aide.
Bonne journée
MichD
Le #26552568
Le 05/08/20 à 05:45, Alex a écrit :
Bonjour,
Des l'ouverture du fichier, la macro procède automatiquement à la mise à jour de mes cellules. Cela prend beaucoup de temps (plus il y a de ligne plus l'action prends du temps) y aurait il un moyen d'exclure en automatique l'exécution de la macro ?
Merci pour votre aide.
Bonne journée


Au lieu de calculer toutes les formules de la feuille de calcul, tu peux
demander que ce calcul soit fait seulement pour une cellule ou une plage
de cellules comme ceci :
Worksheets("Feuil1").Range("A1").Calculate
OU
Worksheets("Feuil1").Range("C10:C50").Calculate
MichD
Alex
Le #26552570
Bonjour MichD,
Merci pour ta réponse.
Je mets cela dans la macro Function GetValueWithADO ? Si oui a quel niveau ?
Mon but serait de déclencher manuellement la macro Function GetValueWi thADO qui est tres bien, mais eviter le calcul automatique a chaque fois qu e le classeur s'ouvre.
Merci encore de ton aide.
MichD
Le #26552578
Le 05/08/20 à 06:30, Alex a écrit :
Bonjour MichD,
Merci pour ta réponse.
Je mets cela dans la macro Function GetValueWithADO ? Si oui a quel niveau ?

Chaque fois que le classeur devient actif, cette macro est déclenchée.
Si tu veux mettre à jour seulement la (les) cellule contenant cette
fonction, tu écris :
'-------------------------------
Private Sub Workbook_Activate()
'Adapte le nom de la feuille
Worksheets("Feuil1").Calculate
End Sub
'-------------------------------
Remplace par :
'-------------------------------
Private Sub Workbook_Activate()
'Adapte le nom de la feuille
Worksheets("Feuil1").Range("A1").Calculate
End Sub
'-------------------------------
A1 représente la cellule contenant ladite fonction.
tu peux écrire : A1:C20 si requis.
MichD
Alex
Le #26552743
Bonjour MichD,
Merci pour ta réponse. Pardon pour ma réponse tardive.
Ce que j'ai fait, j'ai conservé la macro telle que tu me l'as propos é au départ, et pour éviter le calcul automatique sur ma pla ge, je fais simplement "options calculs" et le passe en "manuel" et le reme t en auto quand j'ai besoin d'avoir la mise à jour.
Merci encore.
Poster une réponse
Anonyme