Vba excel : utilisation de .Find et Offset
Résolu/Fermé
eideal
Messages postés
20
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 20 Date d'inscription mercredi 23 juin 2010 Statut Membre Dernière intervention 20 février 2017 - 16 janv. 2012 à 13:33
eideal Messages postés 20 Date d'inscription mercredi 23 juin 2010 Statut Membre Dernière intervention 20 février 2017 - 16 janv. 2012 à 13:33
A voir également:
- Vba find offset
- Vba ouvrir un fichier excel avec chemin ✓ - Forum VB / VBA
- Excel compter cellule couleur sans vba - Guide
- Vba attendre 1 seconde ✓ - Forum VB / VBA
- Ava find - Télécharger - Divers Utilitaires
- Partition find and mount - Télécharger - Récupération de données
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 754
16 janv. 2012 à 08:53
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