RetrouverDeplacer

Retour vers Excel

Retrouver et Déplacer des données

Voyons comment retrouver une donnée dans excel et à partir de cette dernière copier ou déplacer d'autres cellules

Il faut d'abord déterminer une plage de recherche. L'action sur cette zone sera une boucle.
Cela s'indique en VBA dans une simple procédure For...Next

Sub recherche() 
'on détermine une variable de type cellule 
Dim cel As Range 
'on détermine une boucle sur une plage de cellule, 
'ici de la cellule A1 jusque la dernière cellule remplie adjacente à A1 
'il ne peut pas y avoir d'interruption entre les données 
'sinon la boucle s'arrête 
  For Each cel In Range("A1", Range("A1").End(xlDown)) 
'on détermine maintenant une ou des actions à prendre 
'ces actions peuvent être soumises à condition(s) 
    If cel = "A" Then 
      MsgBox "Vous avez trouvé une cellule qui contient la lettre A dans la cellule " & cel.Address
    End If
 'on passe à la cellule suivante 
  Next
End Sub

Notez que la plage de recherche peut prendre différentes formes :

  • une colonne entière : Range("A:A")
  • des cellules en ligne : Range("A3:AC3")
  • une zone : Range("I7:U20")
Sub recherche() 
For rwIndex = 2 to 4 
  For colIndex = 2 to 10 
    If Cells(rwIndex, colIndex) < .001 Then 
      Cells(rwIndex, colIndex).Value = 0
    End If 
  Next colIndex 
Next rwIndex 
End Sub

On peut aussi référencer la plage de recherche avec une instruction Cells, par exemple Cells(2,2) que l'on peut faire varier aussi

Bref, cela devient une question de syntaxe Bien souvent, on se servira d'une fonction recherche pour copier ou déplacer des données situées dans l'environnement immédiat de notre "trouvaille". Et ici, un concept bien pratique peut être utilisé : OFFSET L'offset est un déplacement fictif du focus ou étant sur la cellule sélectionnée par notre boucle, c'est comme si cette cellule étendait ses petits bras musclés vers la donnée pointée par l'offset. Un exemple cel.Offset(3,-2) signifie que je désire traiter avec la cellule située 3 lignes plus bas et deux colonnes avant ma variable "cel" Je peux bien sûr appliquer n'importe quel traitement à cette cellule comme si mon curseur était sur elle, comme par exemple la recopier ailleurs comme ceci par exemple cel.Offset(0, 6) = cel.Offset(3, -2). Comme vous le voyez, excel travaille sur deux cellules sans quitter sa "sélection" en cours. Ici les déplacements de l'offset sont relatifs et donc lors de la prochaine boucle, excel travaillera sur d'autres cellules. Pensez à faire un pas à pas avec la touche F8 dans une phase de débogage pour vérifier que votre fonction remplit son rôle revoici notre fonction du début pour tester

Sub recherche()
 
 'on détermine une variable de type cellule
   Dim cel As Range
 
 'on détermine une boucle sur une plage de cellule, 
 'dans la colonne D puisque l'on va faire -2 colonnes
 'cela ne pourrait pas fonctionner en colonne A,B
 'ici de la cellule D1 jusque la dernière cellule remplie adjacente à D1
 'il ne peut pas y avoir d'interruption entre les données
 'sinon la boucle s'arrête
    For Each cel In Range("D1", Range("D1").End(xlDown))
 
 'on détermine maintenant une ou des actions à prendre
 'ces actions peuvent être soumises à condition(s)
       If cel = "A" AND cel.Offset(0,1) = "b" Then
          MsgBox "Vous avez trouvé une cellule qui contient la lettre A dans la cellule " & cel.Address
          MsgBox cel.Offset(3, -2).Address
 
 'On copie des cellules ailleurs
          cel.Offset(0, 6) = cel.Offset(3, -2)
          cel.Offset(0, 7) = cel.Offset(4, -2)
       End If
 
 'on passe à la cellule suivante
    Next
End Sub

FIN