Selection de la premier cellule vide d'une plage

  • Initiateur de la discussion Initiateur de la discussion popcorn
  • Date de début Date de début

Boostez vos compétences Excel avec notre communauté !

Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force. Apprenez, échangez, progressez – et tout ça gratuitement ! 👉 Inscrivez-vous maintenant !

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

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

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
 
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
 
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
 
- Navigue sans publicité
- Accède à Cléa, notre assistante IA experte Excel... et pas que...
- Profite de fonctionnalités exclusives
Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel.
Je deviens Supporter XLD

Discussions similaires

Réponses
3
Affichages
177
Retour