Optimisation de mon "code"

Bonjour,

j'ai ce code qui fonctionne mais, il aurait besoin d'aller plus vite. Je débute encore sur excel et je pense que c'est largement optimisable.

Je ne sais pas trop par où commencer j'attends vos conseils.
Merci

Sub CBO_ville_Exit(ByVal Cancel As MSForms.ReturnBoolean)

'RECHERCHE DES DONNEES PAR LE NOM

'Désactive le rafraichissement de l'écran
Application.ScreenUpdating = False

Sheets("BD_Ville").Select
Range("D1").Select

If CBO_ville = "" Then
Exit Sub
Else

Do Until ActiveCell = UCase(CBO_ville) Or ActiveCell = ""
Selection.Offset(1#).Select
Loop

If ActiveCell = UCase(CBO_ville) Then

ActiveCell.Select
Selection.Offset(0, -2).Select
Me.CBO_DEP = ActiveCell 'Département
Selection.Offset(0, -1).Select
Me.CBO_ID_BD_VILLE = ActiveCell 'ID_ville
Selection.Offset(0, 8).Select
Me.CBO_code_postal = ActiveCell 'Code postal

End If
End If

'Réactive le rafraichissement de l'écran
Application.ScreenUpdating = True

End Sub

Bonjour,

Tu peux déjà te passer des .Select et .Activate qui sont inutiles. A l'inverse d'un utilisateur, VBA n'a pas besoin de "voir" ni de "manipuler" un élément pour interagir avec. Par contre, il faut bien préciser sur quoi on travaille.

Exemple :

Sheets("BD_Ville").Select
Range("D1").Select
If Acticell = "Machin" Then MsgBox "Truc"
'S'écrit tout simplement :
If Sheets("BD_Ville").Range("D1") = "Machin" Then MsgBox "Truc"

ActiveCell est à éviter pour la simple raison que tu risques de t'y perdre car cette syntaxe n'est pas très parlante sur l'emplacement de cette cellule. Idem avec les Offset

Bonsoir,

Je ne sais pas trop par où commencer j'attends vos conseils

Pour faire suite à la réponse de Pedro (que je ne peux qu'approuver) on ne peut guère te répondre autrement au seul vu de ce code.

Donc mon conseil est de joindre le fichier ET de préciser un peu le contexte : Visiblement le Combo est dans un UserForm...

Mais comment ce UserForm est-il lancé ? A partir de la Sheets("BD_Ville")ou à partir d'une autre feuille ?

A+

J'ai un bouton sur la feuille BD_Ville (c'est une base de données qui regroupe toutes les villes de France avec la localisation etc.) , j'ai simplement affecté une macro dessus qui m'ouvre un formulaire. C'est un formulaire de lecture qui va chercher des infos dans la base avant de les afficher dans le formulaire (d'où les CBO_machin qui sont mes combo box ). Je tape le nom d'une ville et ça me sort les données que je cherche (Code poste et numéro de département pour l'instant).

L'objectif pour moi c'est d’accéder aux données de cette base depuis une autre feuille (sans l'ouvrir). Mon code fonctionne il prend juste trop de temps à s’exécuter (15s environ) à mon gout.

Je reviens vers vous plus tard pour vous apportez plus de précision

Salut Galopin01 !

Un essai :

Sub CBO_ville_Exit(ByVal Cancel As MSForms.ReturnBoolean)
'RECHERCHE DES DONNEES PAR LE NOM
Dim Lig As Long

Application.ScreenUpdating = False 'Désactive le rafraichissement de l'écran
Application.Calculation = xlCalculationManual 'Désactive le recalcul auto des formules Excel

With Sheets("BD_Ville") 'Tout élément qui débute par "." s'y rattache
    If CBO_ville = "" Then
        Exit Sub
    Else
        For Lig = 1 To .Range("D" & Rows.Count).End(xlUp).Row 'Boucle sur les lignes
            If .Range("D" & Lig) = UCase(CBO_ville) Then
                Me.CBO_DEP = .Range("B" & Lig) 'Département
                Me.CBO_ID_BD_VILLE = .Range("A" & Lig) 'ID_ville
                Me.CBO_code_postal = .Range("H" & Lig) 'Code postal
                Exit For 'Inutile de continuer la boucle, on à trouvé le résultat
            End If
        Next Lig
    End If
End With

Application.Calculation = xlCalculationAutomatic 'Réactive le calcul auto
Application.ScreenUpdating = True 'Réactive le rafraichissement de l'écran (optionnel car automatique en fin de macro)

End Sub

Sans sélection de cellule en cellule, ce devrait être plus rapide...

Merci beaucoup Pedro22 ça fonctionne effectivement beaucoup mieux.

Je ne connaissais pas cette façons de faire pour boucler sur les lignes. Je vais modifier le reste de mon code en prenant le tiens pour exemple.

Rechercher des sujets similaires à "optimisation mon code"