cs_mickey89
Messages postés3Date d'inscriptionmardi 24 mai 2005StatutMembreDernière intervention13 août 2009
-
12 avril 2007 à 17:43
cs_MPi
Messages postés3877Date d'inscriptionmardi 19 mars 2002StatutMembreDernière intervention17 août 2018
-
13 avril 2007 à 12:02
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.
cs_MPi
Messages postés3877Date d'inscriptionmardi 19 mars 2002StatutMembreDernière intervention17 août 201822 12 avril 2007 à 23:57
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
cs_lermite222
Messages postés492Date d'inscriptionjeudi 5 avril 2007StatutMembreDernière intervention 2 juillet 20124 13 avril 2007 à 00:06
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
Vous n’avez pas trouvé la réponse que vous recherchez ?
cs_lermite222
Messages postés492Date d'inscriptionjeudi 5 avril 2007StatutMembreDernière intervention 2 juillet 20124 13 avril 2007 à 00:17
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
jrivet
Messages postés7393Date d'inscriptionmercredi 23 avril 2003StatutMembreDernière intervention 6 avril 201260 13 avril 2007 à 10:06
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
cs_MPi
Messages postés3877Date d'inscriptionmardi 19 mars 2002StatutMembreDernière intervention17 août 201822 13 avril 2007 à 12:02
(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