Cellule vide excel vba

miriam8 Messages postés 6 Date d'inscription jeudi 25 février 2010 Statut Membre Dernière intervention 9 mars 2010 - 25 févr. 2010 à 02:51
jordane45 Messages postés 36614 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 9 décembre 2022 - 9 mars 2010 à 23:16
Bonjour,
j'aurai besoin d'un conseil sur un projet vba que je dois faire en cours. je vous explique le cas l'idée c'est de permettre à un utilisateur de remplir une base de donnée sur un tableau excel à partir d'inputbox. le soucis c'est qu'au début je demande à l'utilisateur le nombre d'employés qu'il veut saisir et jai créé une boucle qui permet de lui fournir les données qu'il faut. sauf qu'au moment où on veut à nouveau saisir les données la macro les réécris automatique à la 1ère ligne.
après quelques recherches j'ai réussi à intégrer la cellule vide grâce à
ligne = Range("A1").End(xlDown).Row + 1

Range("A" & ligne).Select

mais du coup ca ne marche pas quand la 1ere ligne du tableau est vide ca ne marche qu'à partir de la 2nd.
si quelqu'un peut m'aider merci d'avance.

11 réponses

ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 228
25 févr. 2010 à 08:27
Bonjour,

la propriété Row s'applique à une plage (un Range).
Regarde ce que tu fais (je décompose volontairement ici ton instruction, au demeurant mal écrite)
Dim ligne As Range
Set ligne = Range("A1").End(xlDown)
MsgBox ligne.Row
Set ligne = Range("A1")
MsgBox ligne.Row

cela devrait te permettre de comprendre

____________________
Vous aimez Codes-Sources ? Il vous aide ? Cliquez ici pour l'aider à continuer
Cliquer sur "Réponse acceptée" en bas d'une solution adéquate est
0
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 228
25 févr. 2010 à 09:08
Je crains par ailleurs assez fort que tu n'aies mis quelque-part un "On Error Resume next" (ou similaire).
Si tel est bien le cas : enlève-le (il cache l'erreur et ligne garde donc sa valeur précédente, si variable static ou générale)


____________________
Vous aimez Codes-Sources ? Il vous aide ? Cliquez ici pour l'aider à continuer
Cliquer sur "Réponse acceptée" en bas d'une solution adéquate est
0
jordane45 Messages postés 36614 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 9 décembre 2022 342
25 févr. 2010 à 09:19
Bonjour,

Ucfoutu explique bien la raison de ton souci.
Au lieu de Range("A1") tu devrais utiiliser Range("A:A")

En ce qui me concerne, lorsque je cherche la dernière ligne, je préfère utiliser la fonction :

Function DernLign()
Set DL = Cells.Find("*", LookIn:=xlValues, SearchOrder:=xlByRows, SearchDirection:=xlPrevious)
If Not DL Is Nothing Then
DernLign = DL.Row
End If
End Function

et pour appeller cette fonction :
Dern_Ligne = DernLign()

J'ai une autre question : plutot que d'utiliser plein d'inputbox... pourquoi ne pas te tourner vers une Fenêtre de saisie contenant directement tout les champs nécessaires ?
tu pourrais le faire en utilisant les Userform.

Cordialement,
Jordane,
0
miriam8 Messages postés 6 Date d'inscription jeudi 25 février 2010 Statut Membre Dernière intervention 9 mars 2010
25 févr. 2010 à 14:25
merci beaucoup pour tous vos conseils!!!
je suis une novice en VBA mais j'ai compris le problème sauf que quand j'ai tenté d'utiliser range ("A:A") ca ne marche pas quand même
en fait il y aurai un debogage au niveau de:
Range("A" & ligne).Select

mais je n'arrive pas à le corriger

j'ai donc tenté la formule de jordane 45
ca marche mais ca écrase la toute première ligne du tableau où sont notées les caractéristiques des données à entrer.

vous devez surement me prendre pour une super nulle :) mais j'ai vraiment beaucoup besoin de vos conseils.
ps: @ jordane 45 je me disais bien que c'était laborieux tous ces inputbox
je ne connais pas ta technique est ce que tu peux m'en dire plus

merci encore à tous
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
miriam8 Messages postés 6 Date d'inscription jeudi 25 février 2010 Statut Membre Dernière intervention 9 mars 2010
25 févr. 2010 à 14:30
AH OUI et en plus avec la function dernlign()
quand on veut ressaisir à nouveau ca écrase les données précédentes
0
jordane45 Messages postés 36614 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 9 décembre 2022 342
25 févr. 2010 à 15:23
Bonjour miriam8,
1 - Je ne comprend pas en quoi la fonction dern_ligne écrase ta ligne de titre ?
Cette fonction te donner le N° de ta dernière ligne utilisée. donc pour avoir la première ligne vide.. il faut ajouter +1.

2 - Tu me dis qu'à chaque fois ça écrase les données précédentes... est ce que dans ton code, avant chaque ajout, tu vérifie le N° de ta dernière ligne ?

3 - Pour les userform..; regarde sur le net. Il y a pas mal de tutos sur le sujet ( tapes les mots clé : "VBA EXCEL Userform" et tu devrais trouver ton bonheur.

3 - bis +++ .. Je vais essayer de trouver le temps de te créer un exemple que je te mettrais en téléchargement... (je pense qu'il sera mis en ligne avant 19h00 aujourd'hui .)

@++ Jordane

Cordialement,
Jordane,
0
miriam8 Messages postés 6 Date d'inscription jeudi 25 février 2010 Statut Membre Dernière intervention 9 mars 2010
25 févr. 2010 à 15:37
merci beaucoup pour ton investissement dans mon projet :)
disons que dans mon code j ai crée un compteur et le problème se pose au niveau de la boucle
c'est à dire qu'au début je demande à l'utilisateur combien d'employés il veut entrer et en fonction du nombre je propose une boucle où il aura autant d'inputbox qu'il veut.
là où je bloque c'est quand à nouveau je lui repose la question du nombre d'employés qu'il veut à nouveau saisir ben la boucle revient au début du tableau et écrase donc les données déjà saisi.
je sais pas si mon explication est plus claire :)

merci Jordane
0
jordane45 Messages postés 36614 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 9 décembre 2022 342
25 févr. 2010 à 17:05
Hello,

Comme promis, voici un petit classeur d'exemple pour utiliser les Userform : Exemple_Userform

Dans la feuille 2 je t'ai mis des captures écran avec des explications.
Le code est également commenté.

N'hésites pas à me contacter si tu rencontres des soucis pour l'utiliser ou si tu as encore besoin d'aide

PS : dans mon code je n'ai pas mis comment vider les éléments du userform ni comment le fermer.
pour vider il suffit de mettre sa valeur à ""
  userform1.textbox1.value  = ""

Pour fermer la fenêtre de saisie :
Userform1.hide 'permet de le cacher sans perdre le données contenues dedans
Unload userform1 'pour le vider de la mémoire


Cordialement,
Jordane,
0
miriam8 Messages postés 6 Date d'inscription jeudi 25 février 2010 Statut Membre Dernière intervention 9 mars 2010
25 févr. 2010 à 18:19
ca marche!!!!!!!!!!!! je te remercie infiniment
merci merci :):)

Cordialement,
miriam
0
miriam8 Messages postés 6 Date d'inscription jeudi 25 février 2010 Statut Membre Dernière intervention 9 mars 2010
9 mars 2010 à 19:06
Bonjour, je reviens vers vous à nouveau pour un dernier conseil :)
j'aurai besoin de faire une macro qui me permettrai de me dire le nombre de lignes utilisées dans mon tableau
j'ai trouvé un code mais il me prend en compte les lignes vides ce qui me donne une mauvaise réponse. je voudrai donc un moyen de modifier ce code afin qu'il ne prenne pas en compte les lignes vides

voila le code:
Dim nblignes As Integer
Dim employés As Worksheet

Set employés = ActiveSheet

nblignes = employés.UsedRange.Rows.Count

qu'est ce que vous en pensez?
merci d'avance
miriam
0
jordane45 Messages postés 36614 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 9 décembre 2022 342
9 mars 2010 à 23:16
bonjour Miriam,

si tu désires connaitre la dernière ligne utilisée ( ou la dernière colonne ) de ta feuille Excel, tu peux utiliser la fonction
'find' de la façon suivante :


function Derniere_Ligne(Nom_Feuille as string) as long  ' changer ligne par colonne si c'est pour rechercher la derniere colonne.
     Sheets(Nom_Feuille).activate
    Derniere_Ligne = Cells.Find("*", Range("A1"), , , xlByRows, xlPrevious).Row 'pour les lignes
   ' Derniere_Colonne = Cells.Find("*", Range("A1"), , , xlByColumns, xlPrevious).Column  'si c'est pour les colonnes 

End function



Et pour l'utiliser...
sub test()
employés = ActiveSheet.name
Ma_derniere_Ligne = Derniere_Ligne(employés)
Msgbox Ma_derniere_Ligne ' pour afficher le résultat histoire de tester ^^
end sub


Voila.
Je l'ai écrit sans avoir excel de lancé mais je pense que c'est bon (a force de l'utiliser ^^ ).
J'espère que ça te convient.

N'hésites pas à revenir vers moi si tu as un souci.


Cordialement,
Jordane,
0