Vba excel : utilisation de .Find et Offset

Résolu/Fermé
eideal Messages postés 21 Date d'inscription mercredi 23 juin 2010 Statut Membre Dernière intervention 20 février 2017 - 14 janv. 2012 à 15:52
eideal Messages postés 21 Date d'inscription mercredi 23 juin 2010 Statut Membre Dernière intervention 20 février 2017 - 16 janv. 2012 à 13:33
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

pijaku Messages postés 12263 Date d'inscription jeudi 15 mai 2008 Statut Modérateur Dernière intervention 4 janvier 2024 2 744
16 janv. 2012 à 08:53
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
eideal Messages postés 21 Date d'inscription mercredi 23 juin 2010 Statut Membre Dernière intervention 20 février 2017
16 janv. 2012 à 13:33
merci pijaku, ça marche parfaitement
0