VBA recherche dans un classeur fermé

Hicsygrek

XLDnaute Occasionnel
Bonjour à tous,

Je voudrais faire une chose toute "con" :eek: qui consiste à contrôler dans un autre fichier excel fermé si un onglet portant un nom X Y Z (par exemple) existe.

Si tel est le cas, je voudrais que le code cherche une valeur dans la colonne A (masquée) allant de 1 à 40 disons ...

Si il trouve la valeur 11 dans cette colonne, alors la checkbox11 sera automatiquement cochée etc... Autrement la checkbox n'est pas cochée.

S'il n'existe pas de feuille portant le nom chercher -> End Sub. :)

A expliquer ça semble bidon mais dès qu'il s'agit du code c'est carrément une autre affaire. J'ai trouvé des extraits de code utilisant ADO mais étant débutant j'ignore vraiment comment ça fonctionne, les seuls essais m'ont menés à des erreurs d'autant que ces codes me paraissent bien compliqués pour pas grand chose :rolleyes: .

De plus je sais pas trop comment lui demander de chercher une valeur dans une colonne et de me renvoyer "vrai" si elle est trouvée. :confused:

Ca me semble d'une difficulté "débutant" mais je dois avoir la tête dans le guidon et rater les évidences :(

Si quelqu'un à une idée, je l'en remercie d'avance pour sa réponse. :D
 

Hicsygrek

XLDnaute Occasionnel
Re : VBA recherche dans un classeur fermé

Re bonjour,

Enfaite l'équivalent en formule serait quelque chose du genre :

=SI(ESTNA(EQUIV(Valeur;Fichier excel 2-Onglet X;0));Checkbox = True;Checkbox = False)

Valeur = de 1 à 40
Fichier excel = trajet vers le fichier cible
0 => on cherche la valeur exact.

Si quelqu'un a une idée ... :)
 

Hicsygrek

XLDnaute Occasionnel
Re : VBA recherche dans un classeur fermé

Bonjour,

petite question idiote au passage, pouquoi ne pas ouvrir le fichier et le refermer ???

bon après midi
@+

Bonjour Pierrot93,

Et bien, le fichier que je créé n'est pas destiné à être utilisé par moi même, par souci de confort et de présentation, je pense que c'est mieux si le fichier reste fermé ... A moins qu'il soit possible de l'ouvrir et de le masquer le temps de la recherche.

J'ignore quelle solution est la plus rapide... Car c'est sur un combobox_change que s'effectue la recherche. Je me dis que si l'utilisateur change de nom rapidement, il a plus de chance de faire planter excel en faisant les taches suivantes à chaque changement :
Ouvrir
Chercher
Mettre les Checkbox à jour (True/False)
Fermer

Mais si le codage est plus facile je suis tout ouie :)
 

Pierrot93

XLDnaute Barbatruc
Re : VBA recherche dans un classeur fermé

Re,

Mais si le codage est plus facile je suis tout ouie
sans aucun doute, oui... une petite recherche sur le forum t'apportera des réponses à tes questions... et te permmettra de commencer quelque chose... Autre suggestion, l'enregistreur de macro peut t'aider à créer un code brut que tu pourras par la suite optimiser... ce forum n'a pas trop vocation à fournir des applis clés en main...
 

Hicsygrek

XLDnaute Occasionnel
Re : VBA recherche dans un classeur fermé

Re,

c'est effectivement plus simple ... le fait d'exposer le problème me le simplifie :D

Ceci dit, j'ai fait le code suivant qui doit m'ouvrir le fichier concerné mais il ne se passe rien, pas d'erreur, le fichier existe bien, il devrait trouver le numéro 11 et donc cocher la checkbox11 (ChkB11) ... mais ce n'est pas le cas.

Pour dire, j'ai pas l'impression qu'il ouvre le fichier en question ... une idée ? :confused:

Code:
Private Sub ComboBox1_Change()

Dim cb1 As String 'déclare la variable cb1 (ComboBox1)
Dim cb3 As String 'déclare la variable cb3 (ComboBox3)
Dim Wk As Workbook
Dim Ws As Worksheet

cb1 = ComboBox1.Value 'définit la variable cb1
cb3 = ComboBox1.Value 'définit la variable cb3

MyPath = ThisWorkbook.Path
Dim fso As Object, x As Boolean
   
    Set fso = CreateObject("Scripting.FileSystemObject") 'vérifie si un fichier porte le nom de la personne formée
    x = fso.FileExists(MyPath & "\" & cb3 & ".xlsx")
    If x = True Then 'si oui, on ouvre ce fichier

        Set Wk = Workbooks.Open(Filename:=ThisWorkbook.Path & "\" & cb3 & ".xlsx")
            Wk.Activate
            Application.Visible = False
    
            For Each Ws In ActiveWorkbook.Worksheets 'on vérifie si une feuille porte le nom de la machine sélectionnée
                If Ws.Name = cb1 Then
            
                With Sheets(cb1)
                    If .Range("A:A").Find("11", , xlValues, xlWhole, , , False) = True Then
                        ChkB11 = True
                    End If
                End With
                    
                Else 'si aucune feuille, on sort
                    Exit Sub
        
                End If
            Exit For
            Next
    End If

End Sub
 

Hicsygrek

XLDnaute Occasionnel
Re : VBA recherche dans un classeur fermé

Re,

enfaite il passe directement de :
Code:
If x = True Then 'si oui, on ouvre ce fichier

à :
Code:
End If
correspondant au If ci dessus :confused:

Pourtant je suis sûr que le fichier existe, puisque j'ai plus ou moins ce même extrait de code pour un autre élément (un bouton) de l'usf et ça fonctionne très bien. :eek:
 

Pierrot93

XLDnaute Barbatruc
Re : VBA recherche dans un classeur fermé

Re,

avec l'initialisation d'une variable objet :
Code:
Dim fichier As String, wb As Workbook
fichier = ThisWorkbook.Path & "\" & cb3 & ".xlsx"
If Dir(fichier) <> "" Then Set wb = Workbooks.Open(fichier)
 

Hicsygrek

XLDnaute Occasionnel
Re : VBA recherche dans un classeur fermé

Bonjour à tous,

En testant ton bout de code et la rectification de
Code:
cb3 = combobox1.value
en
Code:
cb3 = combobox3.value
(forcément ça pouvait pas trouver le fichier ... :mad:

La dernière erreur se trouve sur :
Code:
If .Range("A:A").Find("11", , xlValues, xlWhole, , , False) = True Then

Erreur : Variable objet ou variable de bloc with non définie (91).

Je vais voir si je trouve un bout de code plus exact.
Par contre j'ai pas l'impression que le fichier excel qui s'ouvre soit masqué :confused: , j'ignore si c'est à cause de l'erreur ou si effectivement le fichier reste affiché.

Merci en tout cas pour votre aide ! ;)
 

Pierrot93

XLDnaute Barbatruc
Re : VBA recherche dans un classeur fermé

Bonjour,

exemple de "find" ci-dessous :
Code:
Dim x As Range
Set x = .Columns(1).Find("valeurCherchee", , xlValues, xlWhole, , , False)
If Not x Is Nothing Then
    'si touvée, instructions
Else
    'si pas trouvée
End If

Par contre j'ai pas l'impression que le fichier excel qui s'ouvre soit masqué
quel code as tu utilisé ??

bonne journée
@+
 

Hicsygrek

XLDnaute Occasionnel
Re : VBA recherche dans un classeur fermé

Re,
J'ai effectivement trouvé ce même code sur un autre topic (donné par toi même :eek:)

quel code as tu utilisé ??
Celui donné précédement :
Code:
Application.ScreenUpdating = False

En réalité, il est masqué, c'est juste qu'ayant excel en arrière plan, on voit les données du classeur cible. Ceci dit c'est pas trop grave.

Par contre, ma checkbox n'est pas cochée :(
Peut être est-ce dû au fait que pour éviter une erreur j'ai ajouté en fin d'instruction la fermeture de ce fichier.

Ou bien il ne trouve pas la valeur "11" :
Code:
Dim x As Range
Set x = Sheets(cb1).Range("A:A").Find("11", , xlValues, xlWhole, , , False)
If Not x Is Nothing Then
      ChkB11 = True
Else
      ChkB11 = False
End If

Je vais essayer sans les guillemets ...
EDIT : avec ou sans, ça ne change rien ...
 

Discussions similaires

Statistiques des forums

Discussions
312 502
Messages
2 089 023
Membres
104 007
dernier inscrit
Monvieux