Microsoft 365 Fonction Match sur VBA

sgangbadjo

XLDnaute Nouveau
Please Help
La syntaxe ci-dessous ne me permet pas de récupérer la position de la valeur cible.
l'execution se bloque au niveau de la fonction MATCH



Private Sub CommandButton1_Click()

Dim f1 As Worksheet
Dim ligne As Long
Dim cible As Variant

Set f1 = Sheets("TRACKING")
cible = Me.TextBox1.Value
ligne = Application.WorksheetFunction.Match(cible, Sheets("TRACKING").Range("C1:C"), 0)

If MsgBox("Etes vous sûr de vouloir sauvegarder?", vbYesNo, "confirmation") = vbYes Then

With f1

.Cells(ligne, 13).Value = Me.TextBox4.Value
.Cells(ligne, 14).Value = Me.TextBox5.Value
.Cells(ligne, 12).Value = Me.ComboBox1.Value
.Cells(ligne, 18).Value = Me.TextBox6.Value
.Cells(ligne, 15).Value = Me.ComboBox2.Value
.Cells(ligne, 16).Value = Me.ComboBox3.Value
.Cells(ligne, 17).Value = Me.TextBox7.Value
.Cells(ligne, 19).Value = Me.TextBox8.Value
.Cells(ligne, 21).Value = Me.TextBox9.Value
.Cells(ligne, 20).Value = Me.TextBox10.Value
.Cells(ligne, 22).Value = Me.TextBox11.Value
.Cells(ligne, 23).Value = Me.TextBox12.Value

End With
End If
Unload Me

End Sub
 
Solution
re,

ok, tu recherches une chaine texte et c'est un nombre que tu veux trouver, match fonctionne avec le type de la valeur que tu envoies. En plus tu as ou du texte ou des nombres dans ta colonne
Précises le type au moment de ta recherche et ça fonctionnera avec du texte non numérique ou du nombre

Bien cordialement, @+

Code:
Private Sub CommandButton1_Click()

Dim F1 As Worksheet
Dim Ligne As String
Dim Cible As Variant
  
Set F1 = Sheets("TRACKING")
Cible = Me.TextBox1.Value
With F1
    Ligne = Application.WorksheetFunction.Match(IIf(IsNumeric(Cible), CDbl(Cible), Cible), .Range("C1:C" & .Range("C" & .Rows.Count).End(xlUp).Row), 0)
    If MsgBox("Etes vous sûr de vouloir sauvegarder?", vbYesNo, "confirmation") = vbYes Then...

Bernard_XLD

XLDnaute Barbatruc
Membre du Staff
Re,

et puis comme tu as déjà référencé ta feuille, utilise donc ta référence
VB:
ligne = Application.WorksheetFunction.Match(cible, f1.Range("C1:C" & f1.Range("C" & f1.Rows.Count).End(xlUp).Row), 0)
Et mets tes codes dans des balise, bouton "</>", c'est plus simple à lire.

Cordialement, @+
 

sgangbadjo

XLDnaute Nouveau
Re,

Code:
Range("C:C")
mais match sur une colonne entière peut être long, vaudrait mieux
VB:
Range("C1:C" & Range("C" & Rows.Count).End(xlUp).Row)

Cordialement, @+
Merci pour le retour @Yeahou

Malheureusement le code n'est toujours pas bon. Je m'y prends certainement mal. C'est le Userform 2 du fichier joint.
 

Pièces jointes

  • PROCUREMENT TRACKING .xlsm
    63.4 KB · Affichages: 5

Bernard_XLD

XLDnaute Barbatruc
Membre du Staff
re,

ok, tu recherches une chaine texte et c'est un nombre que tu veux trouver, match fonctionne avec le type de la valeur que tu envoies. En plus tu as ou du texte ou des nombres dans ta colonne
Précises le type au moment de ta recherche et ça fonctionnera avec du texte non numérique ou du nombre

Bien cordialement, @+

Code:
Private Sub CommandButton1_Click()

Dim F1 As Worksheet
Dim Ligne As String
Dim Cible As Variant
  
Set F1 = Sheets("TRACKING")
Cible = Me.TextBox1.Value
With F1
    Ligne = Application.WorksheetFunction.Match(IIf(IsNumeric(Cible), CDbl(Cible), Cible), .Range("C1:C" & .Range("C" & .Rows.Count).End(xlUp).Row), 0)
    If MsgBox("Etes vous sûr de vouloir sauvegarder?", vbYesNo, "confirmation") = vbYes Then
        .Cells(Ligne, 13).Value = Me.TextBox4.Value
        .Cells(Ligne, 14).Value = Me.TextBox5.Value
        .Cells(Ligne, 12).Value = Me.ComboBox1.Value
        .Cells(Ligne, 18).Value = Me.TextBox6.Value
        .Cells(Ligne, 15).Value = Me.ComboBox2.Value
        .Cells(Ligne, 16).Value = Me.ComboBox3.Value
        .Cells(Ligne, 17).Value = Me.TextBox7.Value
        .Cells(Ligne, 19).Value = Me.TextBox8.Value
        .Cells(Ligne, 21).Value = Me.TextBox9.Value
        .Cells(Ligne, 20).Value = Me.TextBox10.Value
        .Cells(Ligne, 22).Value = Me.TextBox11.Value
        .Cells(Ligne, 23).Value = Me.TextBox12.Value
    End If
End With
Unload Me

End Sub
 

sgangbadjo

XLDnaute Nouveau
re,

ok, tu recherches une chaine texte et c'est un nombre que tu veux trouver, match fonctionne avec le type de la valeur que tu envoies. En plus tu as ou du texte ou des nombres dans ta colonne
Précises le type au moment de ta recherche et ça fonctionnera avec du texte non numérique ou du nombre

Bien cordialement, @+

Code:
Private Sub CommandButton1_Click()

Dim F1 As Worksheet
Dim Ligne As String
Dim Cible As Variant
 
Set F1 = Sheets("TRACKING")
Cible = Me.TextBox1.Value
With F1
    Ligne = Application.WorksheetFunction.Match(IIf(IsNumeric(Cible), CDbl(Cible), Cible), .Range("C1:C" & .Range("C" & .Rows.Count).End(xlUp).Row), 0)
    If MsgBox("Etes vous sûr de vouloir sauvegarder?", vbYesNo, "confirmation") = vbYes Then
        .Cells(Ligne, 13).Value = Me.TextBox4.Value
        .Cells(Ligne, 14).Value = Me.TextBox5.Value
        .Cells(Ligne, 12).Value = Me.ComboBox1.Value
        .Cells(Ligne, 18).Value = Me.TextBox6.Value
        .Cells(Ligne, 15).Value = Me.ComboBox2.Value
        .Cells(Ligne, 16).Value = Me.ComboBox3.Value
        .Cells(Ligne, 17).Value = Me.TextBox7.Value
        .Cells(Ligne, 19).Value = Me.TextBox8.Value
        .Cells(Ligne, 21).Value = Me.TextBox9.Value
        .Cells(Ligne, 20).Value = Me.TextBox10.Value
        .Cells(Ligne, 22).Value = Me.TextBox11.Value
        .Cells(Ligne, 23).Value = Me.TextBox12.Value
    End If
End With
Unload Me

End Sub

Ca marche @Yeahou, Merci pour la patience. je vais essayer d'ajouter quelques conditions supplémentaires
 

Membres actuellement en ligne

Aucun membre en ligne actuellement.

Statistiques des forums

Discussions
314 628
Messages
2 111 337
Membres
111 105
dernier inscrit
Joffrette