Vba excel : utilisation de .Find et Offset
Résolu/Fermé
eideal
eideal
- Messages postés
- 21
- Date d'inscription
- mercredi 23 juin 2010
- Statut
- Membre
- Dernière intervention
- 20 février 2017
eideal
- Messages postés
- 21
- Date d'inscription
- mercredi 23 juin 2010
- Statut
- Membre
- Dernière intervention
- 20 février 2017
1 réponse
pijaku
16 janv. 2012 à 08:53
- Messages postés
- 12257
- Date d'inscription
- jeudi 15 mai 2008
- Statut
- Modérateur
- Dernière intervention
- 3 septembre 2021
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 :
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...
16 janv. 2012 à 13:33