Cellule vide sous un tableau excel
Résolu/Fermé
Skeo
-
26 avril 2010 à 11:01
Polux31 Messages postés 6917 Date d'inscription mardi 25 septembre 2007 Statut Membre Dernière intervention 1 novembre 2016 - 28 avril 2010 à 10:46
Polux31 Messages postés 6917 Date d'inscription mardi 25 septembre 2007 Statut Membre Dernière intervention 1 novembre 2016 - 28 avril 2010 à 10:46
A voir également:
- Cellule vide sous un tableau excel
- Tableau croisé dynamique - Guide
- Excel cellule couleur si condition texte - Guide
- Trier un tableau excel - Guide
- Aller à la ligne dans une cellule excel - Guide
- Tableau ascii - Guide
7 réponses
Polux31
Messages postés
6917
Date d'inscription
mardi 25 septembre 2007
Statut
Membre
Dernière intervention
1 novembre 2016
1 204
26 avril 2010 à 11:19
26 avril 2010 à 11:19
Bonjour,
Pour avoir la dernière ligne de ton tableau
Pour ton exemple :
Évite d'utiliser le .Select. Si tu mets :
C'est pareil à :
Le .Select ralenti l'exécution et n'est pas nécessaire.
;o)
Pour avoir la dernière ligne de ton tableau
Dim DerLig As Long Derlig = Range("B5").End(xlDown).Row + 1
Pour ton exemple :
Dim DerLig As Long Derlig = Range("B5").End(xlDown).Row + 1 Message = InputBox("Entrez un nouvel employé :", "Ajout d'un employé", "Nom de l'employé suivi de la première lettre du prénom") If Message = "" Then Exit Sub ActiveSheet.Unprotect Range("B" & DerLig).Value = Message ActiveSheet.Protect
Évite d'utiliser le .Select. Si tu mets :
Range("B21").Select Selection.Value = "Toto"
C'est pareil à :
Range("B21").Value = "Toto"
Le .Select ralenti l'exécution et n'est pas nécessaire.
;o)
elbosador
Messages postés
42
Date d'inscription
lundi 26 avril 2010
Statut
Membre
Dernière intervention
25 août 2010
4
26 avril 2010 à 11:20
26 avril 2010 à 11:20
J'aurais pensé à faire une boucle entre ta ligne 5 et 13 et si il trouve une cellule vide il te demande d'entrer tes informations.
For i = ActiveCell.Row To 13
'Si la case est vide
If Range("D" & i).Value = "" Then
'Alors demande des infos
Message = InputBox("Entrez un nouvel employé :", "Ajout d'un employé", "Nom de l'employé suivi de la première lettre du prénom")
'Si tu veux remplir qu'une case autrement enlève l'etiquette
GoTo 5
End If
i = i + 1
Next
5
Par sur que ca marche je suis aussi débutant ^^
For i = ActiveCell.Row To 13
'Si la case est vide
If Range("D" & i).Value = "" Then
'Alors demande des infos
Message = InputBox("Entrez un nouvel employé :", "Ajout d'un employé", "Nom de l'employé suivi de la première lettre du prénom")
'Si tu veux remplir qu'une case autrement enlève l'etiquette
GoTo 5
End If
i = i + 1
Next
5
Par sur que ca marche je suis aussi débutant ^^
Merci beaucoup à tout les deux!!!
J'ai choisi la solution de polux31 parce que je ne suis pas bien rodé à l'utilisation des boucles ;) En tout cas ça marche très bien j'ai juste modifier les bordures pour que ça soit correct d'un point de vue visuel et c'est bon!!!
Private Sub CommandButton12_Click()
Dim DerLig As Long
Unload UserForm1
Sheets("Employés").Select
DerLig = Range("employés_titre").End(xlDown).Row + 1
Message = InputBox("Entrez un nouvel employé :", "Ajout d'un employé", "Nom de l'employé suivi de la première lettre du prénom")
If Message = "" Then Exit Sub
ActiveSheet.Unprotect
Range("B" & DerLig).Value = Message
Range("B" & DerLig).Select
Selection.Borders(xlDiagonalDown).LineStyle = xlNone
Selection.Borders(xlDiagonalUp).LineStyle = xlNone
With Selection.Borders(xlEdgeLeft)
.LineStyle = xlContinuous
.Weight = xlThick
.ColorIndex = xlAutomatic
End With
With Selection.Borders(xlEdgeTop)
.LineStyle = xlContinuous
.Weight = xlThin
.ColorIndex = xlAutomatic
End With
With Selection.Borders(xlEdgeBottom)
.LineStyle = xlContinuous
.Weight = xlThick
.ColorIndex = xlAutomatic
End With
With Selection.Borders(xlEdgeRight)
.LineStyle = xlContinuous
.Weight = xlThick
.ColorIndex = xlAutomatic
End With
ActiveSheet.Protect
Sheets("S0").Select
End Sub
Pour ce qui est des Select je suis d'accord et je sais bien qu'il ne faut pas vraiment faire comme ça mais c'est que je ne suis pas bien habitué. Connaitriez vous un tuto pour se perfectionner sur ce point?
Merci encore!
J'ai choisi la solution de polux31 parce que je ne suis pas bien rodé à l'utilisation des boucles ;) En tout cas ça marche très bien j'ai juste modifier les bordures pour que ça soit correct d'un point de vue visuel et c'est bon!!!
Private Sub CommandButton12_Click()
Dim DerLig As Long
Unload UserForm1
Sheets("Employés").Select
DerLig = Range("employés_titre").End(xlDown).Row + 1
Message = InputBox("Entrez un nouvel employé :", "Ajout d'un employé", "Nom de l'employé suivi de la première lettre du prénom")
If Message = "" Then Exit Sub
ActiveSheet.Unprotect
Range("B" & DerLig).Value = Message
Range("B" & DerLig).Select
Selection.Borders(xlDiagonalDown).LineStyle = xlNone
Selection.Borders(xlDiagonalUp).LineStyle = xlNone
With Selection.Borders(xlEdgeLeft)
.LineStyle = xlContinuous
.Weight = xlThick
.ColorIndex = xlAutomatic
End With
With Selection.Borders(xlEdgeTop)
.LineStyle = xlContinuous
.Weight = xlThin
.ColorIndex = xlAutomatic
End With
With Selection.Borders(xlEdgeBottom)
.LineStyle = xlContinuous
.Weight = xlThick
.ColorIndex = xlAutomatic
End With
With Selection.Borders(xlEdgeRight)
.LineStyle = xlContinuous
.Weight = xlThick
.ColorIndex = xlAutomatic
End With
ActiveSheet.Protect
Sheets("S0").Select
End Sub
Pour ce qui est des Select je suis d'accord et je sais bien qu'il ne faut pas vraiment faire comme ça mais c'est que je ne suis pas bien habitué. Connaitriez vous un tuto pour se perfectionner sur ce point?
Merci encore!
En fait il y quand même un petit problème...
Se tableau est utilisé dans une liste et les valeurs de la combobox sont attribuées par l'intermédiaire de RowSource dans les propriétés. Mais les valeurs que l'on rajoute ne font pas partie de la liste... Sauriez vous comment y remédier?
En fait je cherche un code qui permette de désigner la liste par exemple:
Private Sub ComboBox1_Change()
combobox1.listindex = de employé_titre.offset(-1,0) : dernier ligne non vide
salarie = ComboBox1.Value
End Sub
Merci
Se tableau est utilisé dans une liste et les valeurs de la combobox sont attribuées par l'intermédiaire de RowSource dans les propriétés. Mais les valeurs que l'on rajoute ne font pas partie de la liste... Sauriez vous comment y remédier?
En fait je cherche un code qui permette de désigner la liste par exemple:
Private Sub ComboBox1_Change()
combobox1.listindex = de employé_titre.offset(-1,0) : dernier ligne non vide
salarie = ComboBox1.Value
End Sub
Merci
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
Je viens d'essayé avec ce code
Private Sub ComboBox1_Change()
Dim der_case As Long
Dim prem_case As Long
prem_case = Range("employés_titre").Offset(-1, 0)
case_case = Range("employés_titre").End(xlDown).Row
salarie = ComboBox1.Value
End Sub
Mais je ne peut pas (me semble-t-il) définir la plag source de cette manière:
rowsource : B&prem_case:B&der_case
ça renvoit une erreur disant "valeur de propriété non valide"
Private Sub ComboBox1_Change()
Dim der_case As Long
Dim prem_case As Long
prem_case = Range("employés_titre").Offset(-1, 0)
case_case = Range("employés_titre").End(xlDown).Row
salarie = ComboBox1.Value
End Sub
Mais je ne peut pas (me semble-t-il) définir la plag source de cette manière:
rowsource : B&prem_case:B&der_case
ça renvoit une erreur disant "valeur de propriété non valide"
J'ai également essayé avec ça:
Private Sub ComboBox1_Change()
Range("employés_titre").Offset(-1, 0).Select
Range(Selection, Selection.End(xlDown)).Select
ActiveWorkbook.Names.Add Name:="employés", RefersToR1C1:= _
"=Employés!R6C2:R14C2"
salarie = ComboBox1.Value
End Sub
Pas plus de succès ça ne renvoit pas d'erreur mais la liste n'en n'est pas plus mise à jour... (je précise que précédement la liste des employés était nommée "employés" (sans déconner? ;) ) et que rowsource avait comme "argument" Employés!employés...
Private Sub ComboBox1_Change()
Range("employés_titre").Offset(-1, 0).Select
Range(Selection, Selection.End(xlDown)).Select
ActiveWorkbook.Names.Add Name:="employés", RefersToR1C1:= _
"=Employés!R6C2:R14C2"
salarie = ComboBox1.Value
End Sub
Pas plus de succès ça ne renvoit pas d'erreur mais la liste n'en n'est pas plus mise à jour... (je précise que précédement la liste des employés était nommée "employés" (sans déconner? ;) ) et que rowsource avait comme "argument" Employés!employés...
Polux31
Messages postés
6917
Date d'inscription
mardi 25 septembre 2007
Statut
Membre
Dernière intervention
1 novembre 2016
1 204
26 avril 2010 à 12:26
26 avril 2010 à 12:26
La propriété RowSource n'est pas modifiable.
Il faut donc ajouter les Items avec AddItem().
On peut remplir la Combo à l'ouverture de l'userform.
Je te donne un exemple vers 14h
;o)
Il faut donc ajouter les Items avec AddItem().
On peut remplir la Combo à l'ouverture de l'userform.
Je te donne un exemple vers 14h
;o)
Je te remercie mille fois parce que seul je crois que je n'y arriverai jamais...
Je viens d'essayer cette méthode:
Private Sub UserForm_Initialise()
Sheets("Employès").Activate
Range("employés_titre").Offset(-1, 0).Select
Range(Selection, Selection.End(xlDown)).Select
ActiveSheet.Unprotect
ActiveWorkbook.Names.Add Name:="employés", RefersToR1C1:= _
"=Employés!R6C2:R14C2"
ComboBox1.RowSource = "Employés!employés"
ActiveSheet.Protect
End Sub
Mais idem choux blanc.
Et ça aussi:
Private Sub UserForm_Initialise()
Dim i As Integer
Dim der_case, prem_case As Long
prem_case = Range("employés_titre").Offset(-1, 0)
der_case = Range("employés_titre").End(xlDown).Row
For i = prem_case To der_case
ComboBox1.AddItem Sheets("Employés").Cells(B, i)
Next
End Sub
De toute manière je crois qu'il n'y a qu'en tâtonnant que je parviendrai à quelque chose sans aide...
Et concernant la commande AddItems je la connait mais ne l'ai jamais utilisé... Je croyais que ça ne permettais pas les combobox "dynamique"...
Je viens d'essayer cette méthode:
Private Sub UserForm_Initialise()
Sheets("Employès").Activate
Range("employés_titre").Offset(-1, 0).Select
Range(Selection, Selection.End(xlDown)).Select
ActiveSheet.Unprotect
ActiveWorkbook.Names.Add Name:="employés", RefersToR1C1:= _
"=Employés!R6C2:R14C2"
ComboBox1.RowSource = "Employés!employés"
ActiveSheet.Protect
End Sub
Mais idem choux blanc.
Et ça aussi:
Private Sub UserForm_Initialise()
Dim i As Integer
Dim der_case, prem_case As Long
prem_case = Range("employés_titre").Offset(-1, 0)
der_case = Range("employés_titre").End(xlDown).Row
For i = prem_case To der_case
ComboBox1.AddItem Sheets("Employés").Cells(B, i)
Next
End Sub
De toute manière je crois qu'il n'y a qu'en tâtonnant que je parviendrai à quelque chose sans aide...
Et concernant la commande AddItems je la connait mais ne l'ai jamais utilisé... Je croyais que ça ne permettais pas les combobox "dynamique"...
Polux31
Messages postés
6917
Date d'inscription
mardi 25 septembre 2007
Statut
Membre
Dernière intervention
1 novembre 2016
1 204
Modifié par Polux31 le 26/04/2010 à 13:22
Modifié par Polux31 le 26/04/2010 à 13:22
Tu ajoutes ça dans l'éditeur de l'UserForm
;o)
«Ce que l'on conçoit bien s'énonce clairement, Et les mots pour le dire arrivent aisément.»
Nicolas Boileau
Private Sub UserForm_Initialize() Dim ws As Worksheet Dim lig As Long Set ws = Worksheets(1) 'Mettre le numéro ou le nom de la feuille lig = 6 ComboBox1.Clear With ws While .Range("B" & lig).Value <> "" ComboBox1.AddItem .Range("B" & lig).Value lig = lig + 1 Wend End With End Sub
;o)
«Ce que l'on conçoit bien s'énonce clairement, Et les mots pour le dire arrivent aisément.»
Nicolas Boileau
Polux31
Messages postés
6917
Date d'inscription
mardi 25 septembre 2007
Statut
Membre
Dernière intervention
1 novembre 2016
1 204
26 avril 2010 à 13:59
26 avril 2010 à 13:59
Enlève Load UserForm4
UserForm4.Show est suffisant
UserForm4.Show est suffisant
idem même erreur c'est bizard que ça fasse ça alors qu'il n'y pas d'interaction....
Et quand j'enlève le code que tu m'as donné ça remarche mais je ne vois rien de problématique et pourtant... (enfin je suis loin d'être une référence comme tu t'en ai rendu compte je suis pas une flèche en vba ;) Mais le principale est d'être de bonne volonté je pense que c'est facile que quand on sait (et encore...)
En fait j'ai directement mis le code dans la page ou il y a également le code des boutons du userform mais peut être me suis-je trompé? e n'estpas ça l'éditeur du userform peut être?
Merci beaucoup en tout cas tes conseils me sont très utiles
Et quand j'enlève le code que tu m'as donné ça remarche mais je ne vois rien de problématique et pourtant... (enfin je suis loin d'être une référence comme tu t'en ai rendu compte je suis pas une flèche en vba ;) Mais le principale est d'être de bonne volonté je pense que c'est facile que quand on sait (et encore...)
En fait j'ai directement mis le code dans la page ou il y a également le code des boutons du userform mais peut être me suis-je trompé? e n'estpas ça l'éditeur du userform peut être?
Merci beaucoup en tout cas tes conseils me sont très utiles
Polux31
Messages postés
6917
Date d'inscription
mardi 25 septembre 2007
Statut
Membre
Dernière intervention
1 novembre 2016
1 204
Modifié par Polux31 le 26/04/2010 à 14:09
Modifié par Polux31 le 26/04/2010 à 14:09
Vérifie le nom de ta UserForm et vérifie qu'elle ne soit pas déjà ouverte quand le code doit s'éxécuter. Si tu as fait un UserForm4.Hide, UserForm4.Show ne peut pas fonctionner
Rien à faire...
Maintenant le débogeur indique cette ligne:
avec "membre de méthode ou de donnée introuvable":
Private Sub CommandButton14_Click() <======
Unload UserForm1
UserForm4.Load
UserForm4.Show
End Sub
C'est dans userform1 en fait c'est le bouton qui sert à appeler le userform4 où se trouve le code que tu m'as indiqué.
Et le seul userform4.hide se trouve dans le userform4 ce qui ne posai jusqu'alors aucun problème.
la je plante.
Maintenant le débogeur indique cette ligne:
avec "membre de méthode ou de donnée introuvable":
Private Sub CommandButton14_Click() <======
Unload UserForm1
UserForm4.Load
UserForm4.Show
End Sub
C'est dans userform1 en fait c'est le bouton qui sert à appeler le userform4 où se trouve le code que tu m'as indiqué.
Et le seul userform4.hide se trouve dans le userform4 ce qui ne posai jusqu'alors aucun problème.
la je plante.