Fonction VBA

sb_guido

XLDnaute Nouveau
Bonjour à tous,

je tente d'effectuer un USERFORM avec des labels qui prendront les noms indiqués ci-bas.

Par contre, la macro "bug" en arrivant à la fct Match. J'ai cette fonction (identique) dans mon module et AUCUN problème.
Maintenant il me donne comme erreur : "code-13 incompatibilité de type".

PS: nous sommes dans un userform
et j'ai tenté :
1) Application.WorksheetFunctions.Match...
Application.Match
WorksheetFunctions.Match etc...

Avez-vous des suggestions ?
Merci Beaucoup.


Private Sub UserForm_Initialize()

Dim StationID As Variant
Dim Niveau As Variant
Dim DoublonLigne As Integer

StationID = Sheets(1).Range("E5")
Niveau = Sheets("Saisir une donnée").Range("C5")

Sheets(Niveau).Select

DoublonLigne = Application.Match(StationID, Range("D3:D9999"), 0)



'Labels des coordonnées initiales
Label6.Caption = Sheets(Niveau).Range(Cells(DoublonLigne, 5))
Label7.Caption = Sheets(Niveau).Range(Cells(DoublonLigne, 6))
Label8.Caption = Sheets(Niveau).Range(Cells(DoublonLigne, 7))

'Labels des coordonnées de remplacement
Label9.Caption = Sheets("Saisir une donnée").Range("F5")
Label10.Caption = Sheets("Saisir une donnée").Range("G5")
Label11.Caption = Sheets("Saisir une donnée").Range("H5")

End Sub
 

Pierrot93

XLDnaute Barbatruc
Re : Fonction VBA

Bonjour,

peut être préciser la feuille, si pas la feuille active, voir le classeur :
Code:
Application.Match(StationID, Sheets("NomFeuille").Range("D3:D9999"), 0)

mais renverra une erreur si la valeur recherchée n'est pas trouvée...

peut être tester au préalable, si pas en erreur...
Code:
With Sheets("NomFeuille")
    If Not IsError(Application.Match(StationID, Sheets("NomFeuille").Range("D3:D9999"), 0)) Then _
        DoublonLigne = Application.Match(StationID, .Range("D3:D9999"), 0)
End With


bon après midi
@+
 
G

Guest

Guest
Re : Fonction VBA

Bonjour,

Hello Pierrot:)

A peu près pareil que Pierrot:

Code:
Dim DoublonLigne As Variant
DoublonLigne = Application.Match(StationID, .Range("D3:D9999"), 0)
If Not IsError(DoublonLigne)
   'Suite du  code si DoublonLigne 
End

A+
A++ Pierrot
 

sb_guido

XLDnaute Nouveau
Re : Fonction VBA

Bonjour à tous,
merci de votre aide!

Par contre, le problème n'est pas qu'il ne trouve pas la valeur cherchée. Le userform ouvre Si et Seulement Si elle existe.


J'ai tenté la suggestion de Pierrot93 mais en vain...

Merci encore!

Private Sub UserForm_Initialize()

Dim StationID As Variant
Dim Niveau As Variant
Dim DoublonLigne As Integer

StationID = Sheets(1).Range("E5")
Niveau = Sheets("Saisir une donnée").Range("C5")
Sheets(Niveau).Select

DoublonLigne = Application.Match(StationID, Sheets(Niveau).Range("D3:D9999"), 0)

'Labels des coordonnées initiales
Label6.Caption = Sheets(Niveau).Range(Cells(DoublonLigne, 5))
Label7.Caption = Sheets(Niveau).Range(Cells(DoublonLigne, 6))
Label8.Caption = Sheets(Niveau).Range(Cells(DoublonLigne, 7))

'Labels des coordonnées de remplacement
Label9.Caption = Sheets("Saisir une donnée").Range("F5")
Label10.Caption = Sheets("Saisir une donnée").Range("G5")
Label11.Caption = Sheets("Saisir une donnée").Range("H5")

End Sub
 

sb_guido

XLDnaute Nouveau
Re : Fonction VBA

Je ne comprend pas exactement où vous me dites de mettre mon code !?!

Étant donné qu'à l'ouverture de l'usf, je désire que certains labels fassent référence à une ligne donnée (variable) et dans une feuille donnée (variable), j'ai pensé mettre les déclarations de variables et leur définition dans Initiatisation...

Pourquoi n'est-ce pas correcte ?

Merci de votre patience :)
 
G

Guest

Guest
Re : Fonction VBA

Re,

Dans un module de code normal:

Code:
Option Explicit
Public DoublonLigne As Variant
Public Niveau As String
Sub OuvrirUserForm()
    Niveau = Sheets("Saisir une donnée").Range("C5")
    Sheets(Niveau).Select
    DoublonLigne = Application.Match(StationID, Sheets(Niveau).Range("D39999"), 0)
    If Not IsError(DoublonLigne) Then userForm1.Show
End Sub

Comme ça si ton DoublonLigne est en erreur (n'existe pas) alors le userForm ne sera pas lancé sinon, DoublonLigne et Niveau étant Public tu pourras les atteindre à partir de ton UserForm.

C'est important de déclarer DoublonLigne en Variant

A+
 

pierrejean

XLDnaute Barbatruc
Re : Fonction VBA

Bonjour a tous

De 16h52 a 18h07 pour commencer a entrevoir une solution alors que le problème aurait été traité en 5 minutes avec un fichier exemple qui aurait pris 5 minutes

Un code qui tourne

Code:
Private Sub UserForm_Initialize()
Dim StationID As Variant
Dim Niveau As Variant
Dim DoublonLigne As Range
StationID = Sheets(1).Range("E5")
Niveau = Sheets("Saisir une donnée").Range("C5")
Sheets(Niveau).Select
Set DoublonLigne = Sheets(Niveau).Range("D3:D9999").Find(StationID, LookIn:=xlValues, lookat:=xlWhole)
'Labels des coordonnées initiales
Label1.Caption = Sheets(Niveau).Cells(DoublonLigne.Row, 5)
'Label7.Caption = Sheets(Niveau).Range(Cells(DoublonLigne, 6))
'Label8.Caption = Sheets(Niveau).Range(Cells(DoublonLigne, 7))
'Labels des coordonnées de remplacement
'Label9.Caption = Sheets("Saisir une donnée").Range("F5")
'Label10.Caption = Sheets("Saisir une donnée").Range("G5")
'Label11.Caption = Sheets("Saisir une donnée").Range("H5")
End Sub

De plus , je viens de m'apercevoir que Application.Match ne semble pas exister dans Excel 2010
 
Dernière édition:

pierrejean

XLDnaute Barbatruc
Re : Fonction VBA

Re

Dans Excel 2010 ecrire:

Code:
DoublonLigne = Application.WorksheetFunction.Match(StationID, Sheets(Niveau).Range("D3:D9999"), 0)

d'ou le code complet

Code:
Private Sub UserForm_Initialize()
Dim StationID As Variant
Dim Niveau As Variant
Dim DoublonLigne As Integer
StationID = Sheets(1).Range("E5")
Niveau = Sheets("Saisir une donnée").Range("C5")
Sheets(Niveau).Select
DoublonLigne = Application.WorksheetFunction.Match(StationID, Sheets(Niveau).Range("D3:D9999"), 0)
'Labels des coordonnées initiales
If Not IsError(DoublonLigne) Then
  Label1.Caption = Sheets(Niveau).Cells(DoublonLigne + 2, 5)
End If
'Label7.Caption = Sheets(Niveau).Range(Cells(DoublonLigne, 6))
'Label8.Caption = Sheets(Niveau).Range(Cells(DoublonLigne, 7))
'Labels des coordonnées de remplacement
'Label9.Caption = Sheets("Saisir une donnée").Range("F5")
'Label10.Caption = Sheets("Saisir une donnée").Range("G5")
'Label11.Caption = Sheets("Saisir une donnée").Range("H5")
End Sub

A noter le DoublonLigne + 2 pour avoir la cellule de droite de StationId (Match donne une position relative)
 
Dernière édition:

Discussions similaires

Statistiques des forums

Discussions
312 412
Messages
2 088 196
Membres
103 763
dernier inscrit
p.michaux