Optimisation code SelectionChange

Résolu
Bonjour,

Voilà mon code :

Private Sub Worksheet_SelectionChange(ByVal Target As Range)

Dim i As Long, DL As Long 'RECHERCHEV
         
    DL = Range("B65536").End(xlUp).Row
        
    For i = 13 To DL
        
        If IsError(Application.VLookup(Range("B" & i).Value, Sheets(2).Range("A1:B20000"), 2, 0)) = True Then
        Range("A" & i).Value = ""
        Else: Range("A" & i).Value = Application.VLookup(Range("B" & i).Value, Sheets(2).Range("A1:B20000"), 2, 0)
    End If

Next i


With Shapes("Bouton 5")
    .Height = 60
    .Width = 150
    
End With

With Shapes("Bouton 3")
    .Height = 60
    .Width = 150
    
End With

With Shapes("Bouton 1")
    .Height = 60
    .Width = 150
    
End With


End Sub


Ce code me ralentit pas mal à chaque fois que je sélectionne une cellule sur ma feuille. Cependant, il faut que ces données soient mises à jour en permanence. Avez-vous une idée pour optimiser tout ça?

Merci d'avance.

Cordialement.

2 réponses

  1. J'ai déjà optimisé un peu cette partie :

     If IsError(Application.VLookup(Range("B" & i).Value, Sheets(2).Range("A1:B20000"), 2, 0)) = False Then
           Range("A" & i).Value = Application.VLookup(Range("B" & i).Value, Sheets(2).Range("A1:B20000"), 2, 0)
           Else: Exit For
           End If
    0
    1. Bonjour,
      il semblerait que ce soit la colonne B qui declanche les recherche:

      Private Sub Worksheet_SelectionChange(ByVal Target As Range)
          Dim i As Long, DL As Long 'RECHERCHEV
          'si pas colonne B sortie
          If Application.Intersect(Target, Range("B:B")) Is Nothing Then Exit Sub
          DL = Range("B65536").End(xlUp).Row
          For i = 13 To DL
              If IsError(Application.VLookup(Range("B" & i).Value, Sheets(2).Range("A1:B20000"), 2, 0)) = True Then
                  Range("A" & i).Value = ""
              Else
                  Range("A" & i).Value = Application.VLookup(Range("B" & i).Value, Sheets(2).Range("A1:B20000"), 2, 0)
                  Exit For
              End If
          Next i
      
      With Shapes("Bouton 5")
          .Height = 60
          .Width = 150
          
      End With
      
      With Shapes("Bouton 3")
          .Height = 60
          .Width = 150
          
      End With
      
      With Shapes("Bouton 1")
          .Height = 60
          .Width = 150
          
      End With
      
      
      End Sub
      
      0
      1. Bonjour et tout d'abord merci pour l'aide !

        Ce code est bien mais il ne fait plus ce que je demande. A savoir que si j'enleve ce qu'il y a en A et que je clique ailleurs, le VlookUp ne s'execute pas. La cellule n'est donc pas remplie.
        0
      2. @KuartzRe

        Ben mettez
        Range("A:A")
        si c'est la colonne A qui doit declancher les recherche
        0
      3. Ca ne marche toujours pas. Que voulez-vous dire par déclencher les recherches?

        En réalité c'est assez simple, ma recherchev recherche la valeur de la colonne B dans une autre feuille et renvoie une valeur en colonne A. Le but est que le rafraîchissement de cette recherche soit continu.
        0
      4. @KuartzRe,

        Que voulez-vous dire par déclencher les recherches? qu'est-ce qui fait que la recherche doit se faire ????
        0
      5. La recherche doit se faire si la valeur en B est dans la table matrice de la feuille 2. Mais finalement, peut-être y a-t-il un moyen pour que si la cellule en A est déjà remplie, la recherche ne se fasse pas...
        0