Ceci est une page optimisée pour les mobiles. Cliquez sur ce texte pour afficher la vraie page.

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

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 :

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.
 

Bill73

XLDnaute Junior
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
 

Bill73

XLDnaute Junior
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
 

Bill73

XLDnaute Junior
Bonjour Yeahou,

en inscrivant une date dans un fichier initial, je veux rechercher la date correspondante dans la matrice pour pouvoir extraire les codes couleur sur 4 jours
 

Pièces jointes

  • 2021-mm-yy Consignes VH v0.10.xlsm
    74.3 KB · Affichages: 0
  • SERVICE SAISON 2021-2022-CE1.xls
    56.5 KB · Affichages: 1
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
 

job75

XLDnaute Barbatruc
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, @+
 

Discussions similaires

Réponses
5
Affichages
501
Les cookies sont requis pour utiliser ce site. Vous devez les accepter pour continuer à utiliser le site. En savoir plus…