VBA, vérifier existence valeur
Résolu
anthony
-
anthony -
anthony -
Bonjour,
je bloque légèrement
j'ai un fichier "moteur de recherche" qui contient un userform.
on tape notre recherche à travers une textbox et une combobox
on lance la recherche, ça ouvre un fichier en lecture seule et le but est de se placer sur la bonne feuille de ce second fichier
en A1 et A2 de chaque feuille on a une valeur qui correspond à la concaténation de la textbox et de la combobox
voici le code actuel :
Private Sub CommandButton1_Click()
Application.ScreenUpdating = False
'teste si un numéro a été entré, si non, le programme averti l'utilisateur et s'arrête
If UserForm1.TextBox1.Text = "" Then
MsgBox "Aucun PN n'a été saisi !"
Exit Sub
End If
If Len(UserForm1.TextBox1.Text) <> 8 Then
MsgBox "le Part Number est incorrect !!!"
Exit Sub
End If
monfichier = "X:\QEHS\QA_DOC_FE\QA_FOURNISSEURS\0_CHEMICALS_RESISTS\2011\Risques excursion Qa\graphes.xlsm"
Application.Workbooks.Open Filename:=monfichier, ReadOnly:=True
'chercher la feuille du fournisseur correspondant
Dim feuille As String
Dim shFo As Worksheet
feuille = TextBox1 & " " & ComboBox1
For Each shFo In Worksheets
Set a = shFo.Range("A1:A2").Find(feuille, lookat:=xlWhole)
If Not a Is Nothing Then
Worksheets(shFo.Name).Activate
UserForm1.Hide
Exit For
Next
End If
Application.ScreenUpdating = True
End Sub
ça fonctionne, par contre ça nécessite quelques secondes, y a-t-il moyen d'accélérer le code ?
et mon soucis c'est que si la feuille avec les valeurs en A1 et A2 n'existe pas alors le programme me place sur la feuille active par défaut !!! j'aimerais que si la feuille n'est pas présente alors un message informe l'utilisateur sinon il va penser qu'il est sur la bonne feuille...
merci à vous
je bloque légèrement
j'ai un fichier "moteur de recherche" qui contient un userform.
on tape notre recherche à travers une textbox et une combobox
on lance la recherche, ça ouvre un fichier en lecture seule et le but est de se placer sur la bonne feuille de ce second fichier
en A1 et A2 de chaque feuille on a une valeur qui correspond à la concaténation de la textbox et de la combobox
voici le code actuel :
Private Sub CommandButton1_Click()
Application.ScreenUpdating = False
'teste si un numéro a été entré, si non, le programme averti l'utilisateur et s'arrête
If UserForm1.TextBox1.Text = "" Then
MsgBox "Aucun PN n'a été saisi !"
Exit Sub
End If
If Len(UserForm1.TextBox1.Text) <> 8 Then
MsgBox "le Part Number est incorrect !!!"
Exit Sub
End If
monfichier = "X:\QEHS\QA_DOC_FE\QA_FOURNISSEURS\0_CHEMICALS_RESISTS\2011\Risques excursion Qa\graphes.xlsm"
Application.Workbooks.Open Filename:=monfichier, ReadOnly:=True
'chercher la feuille du fournisseur correspondant
Dim feuille As String
Dim shFo As Worksheet
feuille = TextBox1 & " " & ComboBox1
For Each shFo In Worksheets
Set a = shFo.Range("A1:A2").Find(feuille, lookat:=xlWhole)
If Not a Is Nothing Then
Worksheets(shFo.Name).Activate
UserForm1.Hide
Exit For
Next
End If
Application.ScreenUpdating = True
End Sub
ça fonctionne, par contre ça nécessite quelques secondes, y a-t-il moyen d'accélérer le code ?
et mon soucis c'est que si la feuille avec les valeurs en A1 et A2 n'existe pas alors le programme me place sur la feuille active par défaut !!! j'aimerais que si la feuille n'est pas présente alors un message informe l'utilisateur sinon il va penser qu'il est sur la bonne feuille...
merci à vous
A voir également:
- VBA, vérifier existence valeur
- Verifier compatibilite windows 11 - Guide
- Verifier un lien - Guide
- Vérifier si mot de passe piraté - Guide
- Logiciel gratuit calcul valeur nutritionnelle - Télécharger - Santé & Bien-être
- Vérifier température pc - Guide
3 réponses
Bonjour,
Pour accélerer le processus, je ne sais pas, mais je ne pense pas que l'on puisse faire plus rapide...
!!!!! A la place du End If par rapport au Next !!!
Par contre, pour le message à l'utilisateur, c'est beaucoup plus facile.
Tu dis dans ton code :
Si tu trouves la bonne feuille alors
tu la sélectionnes
et tu sors de la boucle et pis c'est tout
Il te suffit donc de placer un message après la boucle et de remplacer ton Exit For par un Exit Sub. Comme ça s'il ne sort pas de la procédure c'est qu'il n'a pas trouvé tes valeurs...
Pour accélerer le processus, je ne sais pas, mais je ne pense pas que l'on puisse faire plus rapide...
!!!!! A la place du End If par rapport au Next !!!
Par contre, pour le message à l'utilisateur, c'est beaucoup plus facile.
Tu dis dans ton code :
Si tu trouves la bonne feuille alors
tu la sélectionnes
et tu sors de la boucle et pis c'est tout
Il te suffit donc de placer un message après la boucle et de remplacer ton Exit For par un Exit Sub. Comme ça s'il ne sort pas de la procédure c'est qu'il n'a pas trouvé tes valeurs...
If Not a Is Nothing Then Worksheets(shFo.Name).Activate UserForm1.Hide Application.ScreenUpdating = True 'Exit For Exit Sub End If Next MsgBox "Références non trouvées dans les feuilles du classeur" Application.ScreenUpdating = True End Sub
bonjour,
Au lieu de :
For Each shFo In Worksheets
Set a = shFo.Range("A1:A2").Find(feuille, lookat:=xlWhole)
If Not a Is Nothing Then
Worksheets(shFo.Name).Activate
UserForm1.Hide
Exit For
Next
End If
Essayer :
Au lieu de :
For Each shFo In Worksheets
Set a = shFo.Range("A1:A2").Find(feuille, lookat:=xlWhole)
If Not a Is Nothing Then
Worksheets(shFo.Name).Activate
UserForm1.Hide
Exit For
Next
End If
Essayer :
For Each shFo In Worksheets If shFo.Range("A1").Formula = feuille Or shFo.Range("A2").Formula = feuille Then shFo.Activate UserForm1.Hide Exit For Else ActiveWorkbook.Saved = True ActiveWorkbook.Close MsgBox "Non trouvé" End If Next
Bonjour
peut-^tre plus rapide mais pas sûr ( à essayer)
peut-^tre plus rapide mais pas sûr ( à essayer)
Sub peutetreplusvite() Dim shFo As Worksheet, monfichier as string Dim D_onglet As Object monfichier = "X:\QEHS\QA_DOC_FE\QA_FOURNISSEURS\0_CHEMICALS_RESISTS\2011\Risques excursion Qa\graphes.xlsm" 'monfichier = "D:\documents\av-Evaluate-v3.xls" 'Application.Workbooks.Open Filename:=monfichier, ReadOnly:=True feuille = TextBox1 & " " & ComboBox1 'feuille = "Moyenne" Set D_onglet = CreateObject("scripting.dictionary") For Each shFo In Worksheets onglet = shFo.Name D_onglet.Add shFo.Name, shFo.Name Next If D_onglet.exists(feuille) Then Sheets(feuille).Activate '..... suite ton code Else GoTo erreur End If Exit Sub erreur: MsgBox feuille & "n'existe pas dans ce classeur", vbCritical ActiveWorkbook.Saved = True ActiveWorkbook.Close End Sub
bonjour,
j'ai essayé ce code, le message indiquand que la référence n'existe pas est immédiate donc il semblerait que le temps soit optimal, par contre j'ai le même message même si la référence existe ... :-(
j'ai désactivé else avec goto erreur et il ne se passe rien, donc j'imagine que c'est la vérification de l'existence de la feuille qui ne fonctionne pas
j'ai essayé ce code, le message indiquand que la référence n'existe pas est immédiate donc il semblerait que le temps soit optimal, par contre j'ai le même message même si la référence existe ... :-(
j'ai désactivé else avec goto erreur et il ne se passe rien, donc j'imagine que c'est la vérification de l'existence de la feuille qui ne fonctionne pas
Bonjour
C... s dues à la précipitation!
enlève cette ligne (c'était ma maquette)
'monfichier = "D:\documents\av-Evaluate-v3.xls"
et aussi
'feuille = "Moyenne"
et enlève l'apostrophe devant
'Application.Workbooks.Open Filename:=monfichier, ReadOnly:=True
==>
Application.Workbooks.Open Filename:=monfichier, ReadOnly:=True
excuses moi
tu dis...
C... s dues à la précipitation!
enlève cette ligne (c'était ma maquette)
'monfichier = "D:\documents\av-Evaluate-v3.xls"
et aussi
'feuille = "Moyenne"
et enlève l'apostrophe devant
'Application.Workbooks.Open Filename:=monfichier, ReadOnly:=True
==>
Application.Workbooks.Open Filename:=monfichier, ReadOnly:=True
excuses moi
tu dis...
c'est toujours le pb quand on ne maîtrise pas réellement, du coup les subtilités de sortie ou de fin ne sont pas exploitées
merci ça m'enlève des complications futures ^^