Vba excel : utilisation de .Find et Offset

Résolu
eideal Messages postés 25 Statut Membre -  
eideal Messages postés 25 Statut Membre -
Bonjour,

Voilà j'ai créé un code vba excel et j'aimerais avoir si il est possible de l'alléger.

En fait je suis sur un userform et j'aimerais pouvoir trouver sur une feuille précise (sheets("STOCKS") la valeur du textbox1 et pouvoir décaler 2 lignes en dessous et écrire les valeurs des différents combobox.

Je vous mets mon code :

'*******************************
With Sheets("STOCKS")

'trouver valeur textbox1
Cells.Find(What:=TextBox1.Value, After:=ActiveCell, LookIn:=xlFormulas, LookAt:=xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext, _
MatchCase:=False).Activate

'décaler de 2 lignes en dessous et noter valeur combobox9
ActiveCell.Offset(2, 0).Select
ActiveCell.Value = ComboBox9.Value

'décaler d'1 colonne et noter valeur
ActiveCell.Offset(0, 1).Select
ActiveCell.Value = ComboBox10.Value

ActiveCell.Offset(0, 1).Select
ActiveCell.Value = ComboBox11.Value

ActiveCell.Offset(0, 1).Select
ActiveCell.Value = ComboBox12.Value

ActiveCell.Offset(0, 1).Select
ActiveCell.Value = ComboBox13.Value

ActiveCell.Offset(0, 1).Select
ActiveCell.Value = ComboBox14.Value

End With
'*******************************

J'espere avoir été assez claire.

mon code fonctionne bien mais je voudrais savoir si il n'existe pas autre chose pour aller plus vite.

Dans l'attente de vous lire, merci à vous tous.

1 réponse

  1. pijaku Messages postés 13513 Date d'inscription   Statut Modérateur Dernière intervention   2 773
     
    Bonjour,
    je voudrais savoir si il n'existe pas autre chose pour aller plus vite
    Dans l'état, ta macro ne doit pas être super longue à exécuter. Mais si tu souhaites l'améliorer, il y a moyen.
    Sache déjà que les Select sont inutiles et ralentissent ton code.
    Donc on va commencer à les supprimer.
    Au lieu de :
    ActiveCell.Offset(0, 1).Select 
    ActiveCell.Value = ComboBox10.Value

    tu peux simplement écrire :
    ActiveCell.Offset(0, 1).Value = ComboBox10.Value

    De plus, la recherche (méthode find) dépends de la saisie dans un textbox par un utilisateur. Que se passe t'il en cas d'erreur de saisie? Le programme buggue. Pas toujours agréable.
    Voici une méthode, grâce à Find, qui permet de traiter l'erreur en cas d'erreur de saisie :
    !!! Dans cette procédure, je suppose que l'on cherche en Colonne A et que l'on reporte les valeurs dans les colonnes voisines. Si ce n'est pas le cas, on peux encore adapter...
    Dim Trouve As Range
    Dim Lign As Long
    With Sheets("STOCKS") 
        'on cherche dans la colonne A, à adapter Columns(1)
        Set Trouve = .Columns(1).Cells.Find(TextBox1, LookAt:=xlPart)
        'si on ne trouve pas TextBox1
        If Trouve Is Nothing Then
            MsgBox "TextBox1 pas trouvé"
            Exit Sub
        Else
        'si on trouve TextBox1, on note à qu'elle ligne.
            Lign = Trouve.Row
        End If
     'décaler de 2 lignes en dessous et noter valeur combobox9 
    .Cells(Lign + 2, 1) = ComboBox9
    'décaler d'1 colonne et noter valeur
    .Cells(Lign + 2, 2) = ComboBox10
    .Cells(Lign + 2, 3) = ComboBox11
    .Cells(Lign + 2, 4) = ComboBox12
    .Cells(Lign + 2, 5) = ComboBox13
    .Cells(Lign + 2, 6) = ComboBox14
    End With


    Si on trouve que ce code contient encore trop de lignes on peux aussi boucler sur les colonnes pour inscrire les combobox dans les bonnes cellules :
    Dim Trouve As Range
    Dim Lign As Long
    Dim Col As Byte
    With Sheets("STOCKS") 
        'on cherche dans la colonne A, à adapter Columns(1)
        Set Trouve = .Columns(1).Cells.Find(TextBox1, LookAt:=xlPart)
        'si on ne trouve pas TextBox1
        If Trouve Is Nothing Then
            MsgBox "TextBox1 pas trouvé"
            Exit Sub
        Else
        'si on trouve TextBox1, on note à qu'elle ligne.
            Lign = Trouve.Row
        End If
        For Col = 1 To 6
            .Cells(Lign + 2, Col) = Me.Controls("ComboBox" & Col + 8)
        Next Col
    End With

    Tu dis...
    0
    1. eideal Messages postés 25 Statut Membre
       
      merci pijaku, ça marche parfaitement
      0