Trouver la première cellule vide d'une ligne [RÉSOLU]

MaximeRoth

XLDnaute Junior
Bonjours,

Je ne sais pas si mon intitulé est clair, je vais donc détailler ce que je souhaite faire.

Je souhaite à partie d'une valeur d'une textbox, la comparer dans une feuille Excel pour trouver la ligne correspondante. Une fois cela fait je souhaiterai trouver la dernière colonne remplie de cette ligne.

Si vous avez une idée je suis preneur =D

Merci d'avance et bonne journée.

Max
 
Dernière édition:

VDAVID

XLDnaute Impliqué
Re : Trouver la première cellule vide d'une ligne

Bonjour Maximeroth,

Pas facile de t'aider sans un petit fichier exemple pour y voir plus clair.

Une piste, à adapter à ton fichier !
Si ce n'est pas ça que tu cherchais je te conseille d'en mettre un :)

Code:
Sub Chercher()

Dim Valo As Variant
Dim c As Range
Dim Absc As Long
Dim Dercol As Integer
Dim Dercollet As String

    Valo = TextBox1.Value
        
        With Sheets("Nomdetafeuil")
        
            Set c = .Cells.Find(Valo, , xlValues, xlWhole)
           
            If Not c Is Nothing Then
            
                Absc = c.Row
                Dercol = .Cells(Absc, 256).End(xlToLeft).End(xlUp).Column
                Dercollet = Mid(.Cells(Absc, Dercol).Address, 2, InStr(2, .Cells(Absc, Dercol).Address, "$") - 2)
                MsgBox "La dernière colonne est la n° " & Dercol & vbNewLine & "ou encore la colonne " & Dercollet, vbInformation, "Dernière colonne"
                Else
                MsgBox "La valeur rentrée n'a pas été trouvée", vbCritical
                
            End If
            
        End With
        
End Sub

Bonne journée
 

MaximeRoth

XLDnaute Junior
Re : Trouver la première cellule vide d'une ligne

Bonjour VDAVID,

Merci pour ta réponse. Je ne suis pas sur d'avoir saisi l'ensemble de ton code.
Mais voici un fichier exemple.
Sur la feuille "Notices" tu retrouves toutes les notices différentes (BENU001 ==> BENU009)
Sur le Userform1 tu peux choisir une notices parmi les 9 proposé. Je souhaiterais alors que la textbox1 affiche la dernière version de la notice, soit la dernière cellule remplie de la ligne de la notice.

J'ai essayé avec ce code :
Code:
Dim x As Range
    
        Set x = Sheets("Notices").Cells.Find(ComboBox1.Value, , xlValues, xlWhole, , , False) 'permet de trouver la ligne correspondant à la valeur de la combobox1
    
        If x Is Nothing Then
            MsgBox "Code non reconnu", , "Erreur"
            
        Else
                Cells(x, 256).End(xlToLeft).Offset(0, 1).Select 'sélectionne la première cellule vide rencontrée dans la ligne
                Selection.Offset(0, -1).Select
                TextBox1.Value = ActiveCell.Value
        End If

Mais j'obtiens une erreur d’incompatibilité de type.

A+

Max
 

Pièces jointes

  • Notice et version.xlsm
    16.5 KB · Affichages: 54

Caillou

XLDnaute Impliqué
Re : Trouver la première cellule vide d'une ligne

Bonjour,

Sur la ligne qui pose problème:
Code:
Cells(x, 256).End(xlToLeft).Offset(0, 1).Select
il faut remplacer x par x.row
Code:
Cells(x.row, 256).End(xlToLeft).Offset(0, 1).Select
car dans ton code, x est déclaré en tant que cellule, et c'est la ligne de la cellule que tu souhaites atteindre !

Caillou
 

VDAVID

XLDnaute Impliqué
Re : Trouver la première cellule vide d'une ligne

Re Maximeroth,

Remplace ton code par :

Code:
Private Sub ComboBox1_Change()

Dim x As Range
Dim Absc As Long
    
        Set x = Sheets("Notices").Cells.Find(ComboBox1.Value, , xlValues, xlWhole, , , False) 'permet de trouver la ligne correspondant à la valeur de la combobox1
    
        If x Is Nothing Then
            MsgBox "Code non reconnu", , "Erreur"
            
        Else
                Absc = x.Row
                TextBox1.Value = Cells(Absc, 256).End(xlToLeft).Value 'sélectionne la première cellule vide rencontrée dans la ligne
        End If
        
End Sub

Le problème vient du "x" qui est définit en tant que Range et non pas en valeur de la ligne concernée.

Avec ça ton problème devrait être résolu :)

Bonne journée

EDIT : Bonjour Caillou
 

laetitia90

XLDnaute Barbatruc
Re : Trouver la première cellule vide d'une ligne

bonjour MaximeRoth,VDAVID

essai comme cela dans click... tu ecris rien dans change


Code:
Private Sub ComboBox1_Click()
TextBox1 = Cells(ComboBox1.ListIndex + 2, Rows(ComboBox1.ListIndex + 2).Find("*", , , , , xlPrevious).Column)
End Sub

ps :bonjour caillou
 
Dernière édition:

MaximeRoth

XLDnaute Junior
Re : Trouver la première cellule vide d'une ligne

Merci à Caillou, VDAVID et Laeticia pour vos réponse.

J'ai choisi de mettre en place la solution proposé par VDAVID et Caillou.

Juste une dernière petite question,

Est t'il possible de faire une fonction Find sur une ligne?
Je veux dire cette ligne de code:

Code:
Set x = Sheets("Notices").Cells.Find(ComboBox1.Value, , xlValues, xlWhole, , , False) 'permet de trouver la ligne correspondant à la valeur de la combobox1
    
        If x Is Nothing Then
            MsgBox "Code non reconnu", , "Erreur"

Me permet de savoir si ma combobox1 est bien une des valeur présente dans mon tableau. Ce que je voudrais c'est la même chose mais sur une ligne. Par exemple j'ai déterminé la ligne de la notice BENU001 je voudrais ajouter une nouvelle version (la B par exemple), mais je voudrais d'abord contrôler qu'il n'y est pas déjà de version B.

Encore merci à vous deux en attendant.

A+

Max
 
Dernière édition:

Efgé

XLDnaute Barbatruc
Re : Trouver la première cellule vide d'une ligne

Bonjour MaximeRoth, VDAVID, Caillou, laetitia90 :),
Juste une remarque en passant:
Sous Excel 2003 il y avait bien 256 colonnes, mais comme le fichier exemple est en .xlsm il y a 16 384 colonnes. dons je pense qu'il est préférable d'utiliser "Columns.Count" qui permet d'être compatible avec toutes les versions.
VB:
Cells(x.row, Columns.Count).End(xlToLeft).Offset(0, 1).Select


Mais la version de laetitia90 résoud le problème

Cordialement
 

Caillou

XLDnaute Impliqué
Re : Trouver la première cellule vide d'une ligne

Bonjour à tous,

Est t'il possible de faire une fonction Find sur une ligne?

C'est l'argument SearchOrder (5eme argument) qui permet de définir le sens de la recherche.
Recherche par ligne :
Code:
Set x = Sheets("Notices").Cells.Find(ComboBox1.Value, , xlValues, xlWhole, xlByRows , , False)

Recherche par colonne :
Code:
Set x = Sheets("Notices").Cells.Find(ComboBox1.Value, , xlValues, xlWhole, xlByColumns , , False)

Caillou
 

job75

XLDnaute Barbatruc
Re : Trouver la première cellule vide d'une ligne [RÉSOLU]

Bonjour à tous,

Voir le fichier joint avec cette macro dans l'USF :

Code:
Private Sub ComboBox1_Change()
Dim lig As Variant
lig = Application.Match(ComboBox1, [Notices], 0)
If IsError(lig) Then ComboBox1 = "": TextBox1 = "": Exit Sub
TextBox1 = [Notices].EntireRow.Cells(lig, Columns.Count).End(xlToLeft)
End Sub
Voir la plage dynamique nommée Notices.

A+
 

Pièces jointes

  • Notice et version(1).xls
    45.5 KB · Affichages: 65

Discussions similaires

Réponses
8
Affichages
222

Statistiques des forums

Discussions
312 090
Messages
2 085 210
Membres
102 820
dernier inscrit
SIEG68