Selection de la premier cellule vide d'une plage

popcorn

XLDnaute Occasionnel
Bonjour,

Je cherche comment me retrouver sur la prochaine cellule vide après une recherche de valeur dans une colonne.

Je fais une recherche dans un tableau de la valeur se trouvant en cellule R1.
Il se peut qu'un article se retrouve plusieurs fois, donc via une MFC, toutes les lignes passent en bleu.

Ma cellule active est la première cellule de cette liste, hors si un prix à déjà été saisi, je souhaiterais me positionner sur la première cellule vide qui suit.

J'y suis parvenu hier grâce a une boucle while mais mon excel a planté, j'ai perdu mon bout de code et je ne de me rappelle plus comment je m'y suis prie. Je fais du bricolage en vba donc ça ne me saute pas aux yeux.

Le bout de code :
Code:
Private Sub Worksheet_Change(ByVal Target As Range)
    If Target.Address = "$R$1" Then
        Set c = Columns("B:P").Find(Target.Value, LookIn:=xlValues, lookat:=xlWhole)
            If Not c Is Nothing Then
               Rows(c.Row).Columns("L").Select
        Else
            MsgBox "Article non trouvé"
        Call Inputbox_scan
            End If
End If
End Sub

je fais appel à une inputbox si aucune valeur n'est trouvé :

Code:
Sub Inputbox_scan() ' Ctrl + S
      Dim Scan As Variant
      Scan = Inputbox("Code barre :", "Scan d'article")
      ' Si l'utilisateur n'a saisie aucune donnée et qu'il clique sur OK,
       ' ou si l'utlisateur clique sur Annuler, on quitte la procédure.
      If Scan = "" Then
            MsgBox "Aucune article n'a été scanné"
            'Exit Sub
      ' Sinon inscrire dans R1
      Else
      Range("$R$1").Value = Scan
      ActiveCell.Offset(0, 0).Activate
End If
      Exit Sub
End Sub


Merci de votre aide
 

Pièces jointes

  • selectiontest.xlsm
    90.2 KB · Affichages: 38

JHA

XLDnaute Barbatruc
Bonjour à tous,

Pas sur de tout avoir compris mais tu peux modifier la MFC couleur "bleu", tu sélectionnes la cellule "B2"et tu tapes la formule:
Code:
=ET($E2=$R$1;NON(ESTNUM($L2)))
Cette formule va coloriser en bleu si la cellule "E2" est égale à "R1" et si la cellule "L2" n'est pas numérique.

JHA
 

Pièces jointes

  • selectiontest.xlsm
    21.1 KB · Affichages: 33

popcorn

XLDnaute Occasionnel
Bonjour Joel et JHA,

Merci pour votre aide, excusez moi, je ne pense pas avoir été clair dans mon explication.

Si la valeur de R1 est trouvé dans n'importe quelle colonne du tableau, alors la ligne entière passe bleu, et me positionne la cellule active toujours à l'intersection avec la colonne L

Cela me convient très bien quand une seule ligne bleu apparait car cela signifie que j'ai qu'un article de ce type.

Mais pour plusieurs articles identiques, alors plusieurs lignes passent en bleu et la cellule active est toujours la même.
J'aimerais qu"elle se déplace a la prochaine cellule vide des ligne bleu.

Si je prend un exemple avec "P5" renseigné dans la cellule R1, alors les lignes de 5 à 12 passent en bleu, et la cellule active est L5.
Mon problème se situe à ce niveau si la cellule L5 à déjà un prix, j'aurais souhaité me retrouver dans L6 et ainsi de suite.

Je souhaiterai le faire en vba car j'utiliserai cette macro dans d'autre classeur et il me semble que c'est plus rapide de copier/coller du code que des MFC (je m'y prend surement pas correctement).

Merci
 

Joël GARBE

XLDnaute Nouveau
Comme ça, c'est mieux ?

Code:
Option Explicit

Private Sub Worksheet_Change(ByVal Target As Range)
Dim oCell As Range
Dim oCellRech As Range
Dim c As Range
Dim i As Long
Dim SelectOK As Boolean
SelectOK = False
  For Each oCell In Target
    If oCell.Address = "$R$1" Then
      For Each oCellRech In Range(Range("B2"), Range("L" & Range("B1").CurrentRegion.Rows.Count))
        oCellRech.Interior.ColorIndex = 0
        For i = 2 To 17
          If Cells(oCellRech.Row, i) = oCell Then
            Range(Range("B" & oCellRech.Row), Range("P" & oCellRech.Row)).Interior.ColorIndex = 5
            If Range("L" & oCellRech.Row) = "" Then
              If Not SelectOK Then
                Range("L" & oCellRech.Row).Select
                SelectOK = True
              End If
            End If
          End If
        Next
      Next
    End If
    Exit Sub
  Next
End Sub
 

popcorn

XLDnaute Occasionnel
Bonjour Joel,

Merci mais je n'arrive pas a faire fonctionner ce code. Rien ne se passe.
Je viens de retrouver comment faire ma boucle, je ne sais pas si c'est très académique mais cela fonctionne.

VB:
Private Sub Worksheet_Change(ByVal Target As Range)
    If Target.Address = "$R$1" Then
        Set c = Columns("B:P").Find(Target.Value, LookIn:=xlValues, lookat:=xlWhole)
            If Not c Is Nothing Then
               Rows(c.Row).Columns("L").Select
               ' Boucle tant que pas vide
                 Do While Not (IsEmpty(ActiveCell))
                  NbLigne = NbLigne + 1
                  ActiveCell.Offset(1, 0).Select
                  Loop
        Else
            MsgBox "Article non trouvé"
        Call Inputbox_scan
            End If
End If
End Sub

Merci encore.
Bonne journée
 

Discussions similaires

Réponses
4
Affichages
204

Statistiques des forums

Discussions
312 158
Messages
2 085 825
Membres
102 993
dernier inscrit
VEF