Ouverture d'un classeur excel depuis une macro pour lire des valeurs. [Résolu]

Signaler
-
 haloexcel -
Bonjour à tous!
Ce post est dérivé d'un ancien qui est marqué comme résolu. je vous fais une petite mise à jour
[b]
J'adapte en ce moment une fonction recherchev() sous VBA.. Ci dessous le code que j'ai testé et qui marche:
Sub recherche()
Dim ValeurCherche As String
Dim Plage As Range
ValeurCherche = InputBox("Entrez une valeur")
If Trim(ValeurCherche) <> "" Then
    With Sheets("Feuil1").Range("A:A") 'Recherche dans colonne A
        Set Plage = .Find(What:=ValeurCherche, _
                        After:=.Cells(.Cells.Count), _
                        LookIn:=xlValues, _
                        LookAt:=xlPart, _
                        SearchOrder:=xlByRows, _
                        SearchDirection:=xlNext, _
                        MatchCase:= False)
        If Not Plage Is Nothing Then
            Application.Goto Plage, True 'valeur trouvé
        Else
            MsgBox "Recheche nulle" 'value non trouvé
        End If
    End With
End If
End Sub

Maintenant Je souhaites que la macro ouvre un classeur précis et fasse une recherche sur un onglet bien précis et "renvoie" ou "recherche" la valeur maximum d'une ligne (dans l'optique de faire un calcul)

Question :Est ce que tu peux me donner un repère sur la syntaxe que je dois utiliser pour ouvrir un classeur et définir ma plage?

je crois savoir qu'il y a la syntaxe

Workbooks.Open Filename: = 


mais le fichier peut être déplacé.

Merçi/b

En fait je cherche une piste sur la manière de procéder. Merci de votre attention.

6 réponses

Messages postés
3877
Date d'inscription
mardi 19 mars 2002
Statut
Membre
Dernière intervention
23 août 2018
18
Ce serait peut-être préférable d'ouvrir une autre discussion avec un titre explicite et un seul sujet/question.

Ça simplifie les recherches des autres gens qui parcourent le site.

MPi²
Pour ceux qui programment sous Office, n'oubliez pas qu'il existe un forum dédié à ces applications VBA....... ICI
OK Merçi MPi et Fabiendag!
Je clos le sujet.
Bonjour,
qu'est ce que tu entends par le fichier peut être déplacé ?
Pour ouvrir un classeur Workbooks(nom du classeur).open
worksbooks(nom du classeur).worksheets(nom de la feuille).activate

Par contre dans ta feuille tu as un nombre de ligne et de colonne fixe ou cela peut varier ?


Fabien
Bonjour Fabien
Bonjour,
qu'est ce que tu entends par le fichier peut être déplacé ?

En fait je pense qu'il faut que je définisse d'abord un chemin (dir, etc ) pour indiquer où se trouve le fichier que l'on doit ouvrir;
Concernant la syntaxe :
Workbooks(nom du classeur).open
worksbooks(nom du classeur).worksheets(nom de la feuille).activate
est ce que je dois l'executer en 2 fois? je dois dans un premier temps ouvrir le classeur,
Workbooks(nom du classeur).open

et ensuite spécifier la feuille ?
worksbooks(nom du classeur).worksheets(nom de la feuille).activate


Concernant cette question:
Par contre dans ta feuille tu as un nombre de ligne et de colonne fixe ou cela peut varier ?
Il se peut que le nombre de ligne et de colonnes varie.

Merci
Messages postés
3877
Date d'inscription
mardi 19 mars 2002
Statut
Membre
Dernière intervention
23 août 2018
18
Tu peux laisser le choix à l'utilisateur de choisir le fichier et l'endroit où il se trouve en utilisant Application.GetOpenFilename()

Ensuite, tu ouvres le fichier sélectionné avec Workbooks.Open...
Bien sûr, il te faut valider que le fichier est le bon...

Regarde l'aide pour plus de détails

MPi²
Pour ceux qui programment sous Office, n'oubliez pas qu'il existe un forum dédié à ces applications VBA....... ICI
Bonjour Fabiendag, Mpi!
J'ai pris compte de vos deux remarques et j'ai adapté la macro: Une première fonction permet d'ouvrir une boite de dialogue:
Function RechercheFichier() As String
    Dim fd As FileDialog
    Dim NomFichier As String
 
    Set fd =  Application.FileDialog(msoFileDialogFilePicker)
    With fd
        .Filters.Add "Fichiers Excel", "*.xls"
        .Title = "TITRE"
        .InitialFileName = "FICHIER.xls"
    End With
    If fd.Show -1 Then NomFichier fd.SelectedItems(1)
 
    RechercheFichier = NomFichier
    Set fd = Nothing
End Function


Ensuite j'ouvre mon fichier:
Sub recherche()

  Dim NomFichier As String
 
  NomFichier = RechercheFichier()
  If NomFichier = "" Then
        MsgBox "Vous n'avez sélectionné aucun fichier"
        Else
        Workbooks.Open NomFichier
    End If
Dim ValeurCherche As String
Dim Plage As Range
ValeurCherche = InputBox("Entrez une valeur")
If Trim(ValeurCherche) <> "" Then
    With Sheets("Feuil1").Range("A:A") 'Recherche dans colonne A
        Set Plage = .Find(What:=ValeurCherche, _
                        After:=.Cells(.Cells.Count), _
                        LookIn:=xlValues, _
                        LookAt:=xlPart, _
                        SearchOrder:=xlByRows, _
                        SearchDirection:=xlNext, _
                        MatchCase:= False)
        If Not Plage Is Nothing Then
            Application.Goto Plage, True 'valeur trouvé
        Else
            MsgBox "Recheche nulle" 'value non trouvé
        End If
    End With
End If
End Sub

Je crois qu'on a peu près résolu le problème d'ouverture du fichier (même si j'envisage quelque améliorations)

Cela nous mène au 2ème point:
Par contre dans ta feuille tu as un nombre de ligne et de colonne fixe ou cela peut varier ?
Fabien
Réponse: OUI cela peut varier. ce qui va changer aussi c'est le nom de l'onglet (ou SHEET) sur lequel les recherches vont devoir être effectué (mais ce point n'est pas important, je changerai le nom de l'onglet à ouvrir au fur à mesure).
Ce qui m'importe c'est comment définir la ligne à balayer pour faire mon test. Je peux très bien modifier cette partie :
With Sheets("Feuil1").Range("A:A") '
.

Mais ce que j'envisage de faire est un peu plus complexe COMME je l'ai spécifié ici :
Maintenant Je souhaites que la macro ouvre un classeur précis et fasse une recherche sur un onglet bien précis et "renvoie" ou "recherche" la valeur maximum d'une ligne (dans l'optique de faire un calcul)
==> le problème de l'ouverture du classeur étant résolu je souhaite :
1°) Faire une différence entre une valeur dans une cellule du 1er classeur et une autre dans une autre cellule du second classeur.Celle du 2nd classeur étant mise à jour quotidiennement, (la valeur à chercher dans le 2nd Classeur doit donc être la valeur max de la plage "row" concernée).

2°) Mettre une mise en forme conditionnelle lié à la valeur de cette d'une différence.

Je crois que je dois fermer ce post et en ouvrir un autre n'est ce pas ?