Je voudrais faire une chose toute "con" 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 .
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.
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.
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
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...
c'est effectivement plus simple ... le fait d'exposer le problème me le simplifie
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 ?
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
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.
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 ...
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é , j'ignore si c'est à cause de l'erreur ou si effectivement le fichier reste affiché.
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é
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 ...