Trouver la premiere cellule vide dans une ligne

Résolu
Signaler
Messages postés
3
Date d'inscription
mardi 24 mai 2005
Statut
Membre
Dernière intervention
13 août 2009
-
Messages postés
3877
Date d'inscription
mardi 19 mars 2002
Statut
Membre
Dernière intervention
23 août 2018
-
Bonjour,

je souhaite connaitre la premiere cellule vide dans une ligne (ici la 11) et y coller ma variable input .
puis je souhaite coller une autre valeur(qui provient d'une cellule) dans la case à sa droite.

Pouvez-vous m'aider svp

Merci

9 réponses

Messages postés
3877
Date d'inscription
mardi 19 mars 2002
Statut
Membre
Dernière intervention
23 août 2018
19
Il y a 256 colonnes. Tu veux écrire dans 2 cellules. Il faut donc lire 255 cellules pour éviter le débordement et causer une erreur.

Dim I as integer
For i = 1 to 255
    If Cells(11,i) = "" then
       cells(11,i) = "ValeurDuInputBox"
       cells(11, i + 1) = "L'autre valeur"  'Range("D25")
    End if  
next

MPi
Messages postés
492
Date d'inscription
jeudi 5 avril 2007
Statut
Membre
Dernière intervention
2 juillet 2012
4
en VB sur un grid ou en VBA sur excel ?
cordialement
louis
Messages postés
3
Date d'inscription
mardi 24 mai 2005
Statut
Membre
Dernière intervention
13 août 2009

en vba sur excel
Messages postés
492
Date d'inscription
jeudi 5 avril 2007
Statut
Membre
Dernière intervention
2 juillet 2012
4
Bon, c'est plus clair, essaie le code ci-dessous
supposons : données sur ligne 5 : début colonne A

Function ChercheRangeVide()
Dim i As Integer
Const R1 = "rempli1" 'rem à remplacer par ta donnée 1
Const R2 = "Rempli2" 'rem à remplacer par ta donnée 2


Worksheets("Feuil1").Activate 'rem adapter éventuellement le nom de la feuille
For i = 1 To ActiveSheet.Columns.Count
    If Cells(5, i).Value = 0 Then
        Cells(5, i).Value = R1
        Cells(5, i + 1).Value = R2
        Exit For
    End If
Next i
End Function
Ca devrait aller
cordialement
louis
Messages postés
492
Date d'inscription
jeudi 5 avril 2007
Statut
Membre
Dernière intervention
2 juillet 2012
4
pour mpi
sorry, mais tu a poster pendant que j'écrivais mon poste
cordialement
louis
Messages postés
492
Date d'inscription
jeudi 5 avril 2007
Statut
Membre
Dernière intervention
2 juillet 2012
4
pour MPi
tu à oublier Exit for
et il est toujours préférable d'activer l'objet de référence, surtout si tu veux tester dans l'éditeur avec F5  et F8
louis
Messages postés
3
Date d'inscription
mardi 24 mai 2005
Statut
Membre
Dernière intervention
13 août 2009

merci à MPI et lermitte222
l'exit for est en effet indispensable

merci encore à vous 2
Messages postés
7393
Date d'inscription
mercredi 23 avril 2003
Statut
Membre
Dernière intervention
6 avril 2012
58
Salut,
Je sais que le sujet est résolu, mais voici des solutions alternatives (pas forcément des plus simples, mais elles utilisent des méthodes proposées par EXCEL)

'=========== l'APPEL
Private Sub CommandButton1_Click()
Dim Resultat As Integer
   'Récupère le numéro de la colonne
   Resultat = PremiereColonneVide
   If Resultat <> -1 Then
       'Remplir les cellules si possible
       ActiveSheet.Cells(11, Resultat).Value = "BLABLA"
       ActiveSheet.Cells(11, Resultat + 1).Value = "AUTRE BLABLA"
   End If
End Sub<hr />
'==== LE CHOIX PARMIS LES FONCTIONS SUIVANTES
'Autre méthode (peu être la plus simple des trois que je propose)
'UTILSANT SPECIALCELLS
Public Function PremiereColonneVide() As Integer
On Error GoTo HandleError
   PremiereColonneVide = ActiveSheet.Rows("11:11").SpecialCells(xlCellTypeBlanks).Column
   If PremiereColonneVide > 255 Then PremiereColonneVide = -1
Exit Function
HandleError:
   PremiereColonneVide = -1
End Function<hr />
'Premiere méthode Renvoie le numéro de la premiere colonne
'Vide ou alors si impossible à ajouter, renvoie -1
''UTILSANT LA METHODE FIND
Public Function PremiereColonneVide() As Integer
On Error GoTo HandleError
   'Selectionne A11
   ActiveWorkbook.ActiveSheet.Range("A11").Select
   'Teste si la premiere cellule est vide
   'Ce test est fait ici car si on passe par Find, et que A11 Vide,
   'on retournera 2 Quoiqu'il arrive (DONC FAUX)
   If IsEmpty(ActiveCell.Value) Then
       PremiereColonneVide = 1
       Exit Function
   End If
   'Utilise la méthode Find de l'objet Range
   ActiveWorkbook.ActiveSheet.Rows("11:11").Find(vbNullString, ActiveCell, xlValues, xlPart, xlByRows, xlNext, False).Activate
   'Récupère la column de la cellule active
   PremiereColonneVide = ActiveCell.Column
   'Si il ne reste qu'une celluel dispo en 256 alors on retourne -1   If PremiereColonneVide 256 Then PremiereColonneVide -1
   Exit Function
HandleError:
'GEstion d'erreur dans le cas où la ligne est pleine
PremiereColonneVide = -1
End Function<hr />
''UTILSANT SELECTION.END
Public Function PremiereColonneVide() As Integer
   'Selectionne A11
   ActiveWorkbook.ActiveSheet.Range("A11").Select
   'Encore un test spécial pour 1 (et 2 aussi )
   If IsEmpty(ActiveCell) Then
       PremiereColonneVide = 1
       Exit Function
   End If
   
   If IsEmpty(ActiveWorkbook.ActiveSheet.Range("B11")) Then
       PremiereColonneVide = 2
       Exit Function
   End If
   Call Selection.End(xlToRight).Select
   PremiereColonneVide = ActiveCell.Column + 1
   If PremiereColonneVide > 255 Then PremiereColonneVide = -1
End Function<hr />

, ----
[code.aspx?ID=41455 By Renfield]

Voila j'espère que ca pourra servir même si c'est peu être moins simple.
@+: Ju£i?n
Pensez: Réponse acceptée
Messages postés
3877
Date d'inscription
mardi 19 mars 2002
Statut
Membre
Dernière intervention
23 août 2018
19
(J'ai effectivement oublié le Exit For... écriture trop rapide sans test...)

Une autre chose qu'il faudrait peut-être vérifier. Si une cellule est vide mais qu'il y a d'autres données à droite, est-ce que tu dois écrire quand même ? ce cas ne s'applique peut-être pas à toi, par contre.

Il faudrait peut-être alors commencer par la droite et aller vers la gauche jusqu'à ce qu'une cellule ne soit pas vide

MPi