Vba excel : utilisation de .Find et Offset
Résolu
eideal
Messages postés
20
Date d'inscription
Statut
Membre
Dernière intervention
-
eideal Messages postés 20 Date d'inscription Statut Membre Dernière intervention -
eideal Messages postés 20 Date d'inscription Statut Membre Dernière intervention -
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.
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.
A voir également:
- Excel vba offset
- Liste déroulante excel - Guide
- Word et excel gratuit - Guide
- Déplacer colonne excel - Guide
- Si ou excel - Guide
- Excel compter cellule couleur sans vba - Guide
1 réponse
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 :
tu peux simplement écrire :
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...
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 :
Tu dis...
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...
eideal
Messages postés
20
Date d'inscription
Statut
Membre
Dernière intervention
merci pijaku, ça marche parfaitement