Excel / VBA - Sélectionnez des cellules entre 2 mots-clés

  • Problème
  • Solution

Problème

J'essaie d'écrire une macro qui commence à partir de la cellule active - monte dans la colonne en sélectionnant par exemple 20 cellules et recherche le mot de recherche "A" - la sélectionne. Puis, dans la colonne, recherche le mot de recherche suivant "B" (qui dans ce cas est la première instance de tout ce qui a une valeur $), sélectionne toutes les cellules entre les 2 mots de recherche et supprime toutes les lignes. Voici ce que j’ai eu jusqu’à présent (la première partie où il est question de "N" consiste simplement à le placer sur le bon enregistrement que nous voulons supprimer.

Exemple de code:

 Faire tant que vrai

Set Cell = Columns (11) .Find (Quoi: = "N", _

Après: = Cellules (11, 11), _

LookIn: = xlFormulas, _

LookAt: = xlPart, _

SearchOrder: = xlByRows, _

SearchDirection: = xlNext, _

MatchCase: = False, _

SearchFormat: = False)

Si la cellule n'est rien, alors quittez

Cell.Select

ActiveCell.Select

ActiveCell.EntireRow.Range ("A1"). Sélectionnez

Plage (Sélection, Sélection.Offset (-20, 0)). Sélectionnez

Mais le code ne fonctionne pas correctement.

Solution

Vous devez savoir où se trouve la première cellule. et vous devez à nouveau trouver où se trouve la deuxième cellule. Utilisez la fonction ci-dessous

 Sous MyOrigSubDefHere ()

Dim lFirstHit As Long

Dim lSecondHit As Long

Faire tant que vrai

lFirstHit = getItemLocation ("N", Colonnes (11),, False)

Si (lFirstHit = 0), puis quitter, puis

lSecondHit = getItemLocation ("B", Range (Cellules (lFirstHit + 1, 11), Cellules (Rows.Count, 11)),, False)

Si (lSecondHit = 0) puis quittez Do

Lignes (lFirstHit & ":" & lSecondHit) .Supprimez

Boucle

End Sub

Fonction publique getItemLocation (sLookFor As String, _

rngSearch As Range, _

Facultatif bFullString As Boolean = True, _

Facultatif bLastOccurance As Boolean = True, _

Facultatif bFindRow As Boolean = True) As Long

'trouve la première / dernière ligne / colonne dans une plage pour une chaîne spécifique

Dim Cell As Range

Dim iLookAt As Integer

Dim iSearchDir As Integer

Dim iSearchOdr As Integer

Si (bFullString) _

ensuite

iLookAt = xlWhole

Autre

iLookAt = xlPart

Fin si

Si (bLastOccurance) _

ensuite

iSearchDir = xlPrevious

Autre

iSearchDir = xlNext

Fin si

Si non (bFindRow) _

ensuite

iSearchOdr = xlByColumns

Autre

iSearchOdr = xlByRows

Fin si

Avec rngSearch

Si (bLastOccurance) _

ensuite

Définir Cell = .Find (sLookFor, .Cells (1, 1), xlValues, iLookAt, iSearchOdr, iSearchDir)

Autre

Définir Cell = .Find (sLookFor, .Cells (.Rows.Count, .Columns.Count), xlValues, iLookAt, iSearchOdr, iSearchDir)

Fin si

Terminer par

Si la cellule n'est rien alors

getItemLocation = 0

ElseIf Not (bFindRow) _

ensuite

getItemLocation = Cell.Column

Autre

getItemLocation = Cell.Row

Fin si

Set Cell = Nothing

Fonction de fin

Merci à rizvisa1 pour cette astuce.

Article Précédent Article Suivant

Les Meilleurs Conseils