XL 2016 Extraction de format de cellule dans un fichier fermé

Boostez vos compétences Excel avec notre communauté !

Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force. Apprenez, échangez, progressez – et tout ça gratuitement ! 👉 Inscrivez-vous maintenant !

Bill73

XLDnaute Junior
Bonjour,

je viens vers vous pour un problème que je n'arrive pas à résoudre.

J'ai besoin de récupérer le format (couleur) d'une série de cellules dans un fichier fermé.

Petit exemple :
exemple.jpg


j'ai un fichier Excel ouvert avec une date (et d'autres infos).
En fonction de cette date, je dois récupérer la même date dans un fichier fermé (1ere ligne), j'extrais 4 colonnes (ou 7 si il y a un samedi) et en fonction de la couleur, j'inscris un code dans un tableau à deux dimensions (nom, code) qui se trouve sur le fichier ouvert.
Le fichier cible où il y a le tableau exemple doit rester fermé
Si possible, sans adjonction d'AddOn à Excel

Un grand merci pour ceux qui vont se pencher sur ce problème.
 
Bonsoir Yeayou,
en fait, plusieurs utilisateurs vont utiliser un clone du fichier ouvert, imprimer le tableau crée, le sauvegarder et c'est pour éviter de parasiter le déroulement.
il faudrait que les extractions se fassent en mode silencieux et le plus rapidement possible.
j'ai déjà écrit une version qui marche avec un onglet en plus où j'insère manuellement la matrice (sur 1 an), mais j'aimerais que l'insertion se fasse en auto et qu'elle puisse s'actualiser (en fonction de la date) sur seulement 4 jours (ce que j'ai besoin).
Ça permet aussi de réduire considérablement la taille du stockage des différents fichiers crées si je n'ai plus l'onglet matrice sur 1 an.

Bien cordialement
 
re,

dans ce cas, si j'ai bien compris, rien n'empêche plusieurs utilisateurs d'ouvrir le fichier en même temps car ils ne font que récupérer la matrice, il suffit de masquer l'ouverture, de désactiver les alertes ou d'ouvrir en lecture seule pour ne pas avoir les messages, une fermeture ensuite sans enregistrement de la matrice pour finir.
 
Bonjour Bill73, le forum

Un code comme celui ci masquera l'ouverture le temps de l'exécution du code de récupération.

Cordialement, @+
VB:
Sub Lire_Fichier()
    Dim Nom_Fichier$, Classeur_Temp As Workbook
    Application.ScreenUpdating = False 'désactivation de l'affichage
    Application.DisplayAlerts = False 'désactivation des alertes utilisateurs
    On Error GoTo Gere_Erreurs 'gestion d'erreurs
    Nom_Fichier = "\\serveur\dossier\fichier.Xlsx" 'chemin du fichier à ouvrir
    Set Classeur_Temp = Workbooks.Open(Filename:=Nom_Fichier, ReadOnly:=True) 'ouverture du fichier
    'code à exécuter
        '
        '
    'fin du code à exécuter
    Classeur_Temp.Close False 'fermeture du fichier sans enregistrement
    Set Classeur_Temp = Nothing 'libération variable
    On Error GoTo 0 'rétablissement gestion d'erreur par défaut
Gere_Erreurs:
    Application.ScreenUpdating = True 'réactivation de l'affichage
    Application.DisplayAlerts = True 'réactivation des alertes
End Sub
 
je sais que c'est plus vraiment le même post, mais j'ai une erreur 2042 sur un .match avec une recherche d'une date dans la liste en ligne des dates.
j'ai vérifié avec un petit test sur :
date recherchée : daMatrice = 21/12/2021
l'emplacement de la date cible : test = 21/12/2021

test1 = Application.Match(daMatrice, .Range("D6:FA6"), 0) me donne erreur 2042

Je sais que les recherches avec des dates c'est la plaie
 
Bonjour Bill73, le forum

sans fichier pour voir ce que vous avez en cellules, sans le code pour le type de daMatrice et une éventuelle erreur de code et sans savoir ce que vous cherchez précisément à faire, cela peut être compliqué.
mettez un petit fichier exemple pour test.

Bien cordialement, @+
 
Bonjour Bill73, le forum

Ce code vous permettra d'identifier la cellule contenant la date cherchée.
Si vous avez d'autres questions sur un sujet différent, créez une nouvelle discussion.

Cordialement, @+
VB:
    Dim Range_Ref As Range
    With Sheets("Matrice tours VH 2021-2022")
        Set Range_Ref = .Cells(6, Application.Match(CLng(DateValue("01/01/2022")), .Rows("6:6").Value2, 0))
    End With
    MsgBox Range_Ref.Address
 
re,
en exemple les deux codes mixés

Code:
Sub Lire_Fichier()
    Dim Nom_Fichier$, Classeur_Temp As Workbook, Range_Ref As Range
    Application.ScreenUpdating = False 'désactivation de l'affichage
    Application.DisplayAlerts = False 'désactivation des alertes utilisateurs
    On Error GoTo Gere_Erreurs 'gestion d'erreurs
    Nom_Fichier = "\\serveur\dossier\fichier.Xlsx" 'chemin du fichier à ouvrir
    Set Classeur_Temp = Workbooks.Open(Filename:=Nom_Fichier, ReadOnly:=True) 'ouverture du fichier
    'code à exécuter
    With Classeur_Temp.Sheets("Matrice tours VH 2021-2022")
        Set Range_Ref = .Cells(6, Application.Match(CLng(DateValue("01/01/2022")), .Rows("6:6").Value2, 0))
    End With
    With Range_Ref
        'code à exécuter pour Range_Ref
        MsgBox "Adresse de la cellule contenant la date cherchée : " & .Address, vbOKOnly + vbInformation
        'fin du code à exécuter pour Range_Ref
    End With
    'fin du code à exécuter
    Set Range_Ref = Nothing 'libération variable
    Classeur_Temp.Close False 'fermeture du fichier sans enregistrement
    Set Classeur_Temp = Nothing 'libération variable
    On Error GoTo 0 'rétablissement gestion d'erreur par défaut
Gere_Erreurs:
    Application.ScreenUpdating = True 'réactivation de l'affichage
    Application.DisplayAlerts = True 'réactivation des alertes
End Sub
 
Bonjour Bill73, Yeahou,

@Yeahou je m'interroge, pourquoi écrire :
VB:
Set Range_Ref = Nothing 'libération variable
Set Classeur_Temp = Nothing 'libération variable
car ce sont des variables déclarées dans la macro donc réinitialisées automatiquement en fin de macro ?

Je m'interroge car beaucoup de programmeurs expérimentés font comme toi, y a -t-il une raison ?

A+
 
Bonjour Job75, le fil

car ce sont des variables déclarées dans la macro donc réinitialisées automatiquement en fin de macro ?

Je m'interroge car beaucoup de programmeurs expérimentés font comme toi, y a -t-il une raison ?
C'est une habitude car il m'arrive souvent, lorsque je crée un programme, de transformer après coup des variables locales en variables publiques lorsque je m'aperçois qu'elles peuvent m'être utiles ailleurs.
La libération des variables locales, principalement lorsqu'elles se réfèrent à des objets dont je peux être amené à tester l'existence, m'évite tout problème de revérification du code en cas de transformation du niveau de la variable.
De même, suite à des problèmes rencontrés par le passé sur des bugs Excel sur certaines versions, j'ai pris l'habitude de réactiver ce que je désactive, même si cette désactivation est éphémère et la réactivation non nécessaire, comme ScreenUpdating ou la gestion d'erreur, cela me prémunie contre tout changement de comportement d'Excel, que ce soit bug ou évolution sur une nouvelle version.

Bien amicalement, @+
 
- Navigue sans publicité
- Accède à Cléa, notre assistante IA experte Excel... et pas que...
- Profite de fonctionnalités exclusives
Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel.
Je deviens Supporter XLD

Discussions similaires

Retour