eastpeople
Messages postés105Date d'inscriptiondimanche 16 décembre 2007StatutMembreDernière intervention11 novembre 2008
-
29 mai 2008 à 15:48
mortalino
Messages postés6786Date d'inscriptionvendredi 16 décembre 2005StatutMembreDernière intervention21 décembre 2011
-
3 juin 2008 à 20:40
Bonjour,
Je reposte un message car j'ai de nouveau un problème sur un de mes codes.
J'ai un textebox où on rentre des activités puis quand on valide elle se met dans excel et quand on veut en rentrer une autre, il faut qu'elle se mette en dessous de celle qui est déja inscrite.
Voila mon code:
Private Sub ok_click()
Dim Ws As Worksheet
Dim Ligne As Integer
Set Ws = Sheets("abonnements")
Ligne = Ws.Range("A2").End(xlDown).Row + 1
rep = MsgBox("Voulez-vous rentrer une autre activité ?", _
vbYesNo + vbQuestion, "Programmer une autre activité ?")
If rep = vbYes Then
ADM.Show
End If
End Sub
Avec ce code ma premiere activité se met dans A8 et la suivante recouvre la première et je ne sais pas pourquoi.
Merci de m'aider.
Bonne journée à tous.
bigfish_le vrai
Messages postés1835Date d'inscriptionvendredi 13 mai 2005StatutMembreDernière intervention20 novembre 201315 29 mai 2008 à 20:00
...
mortalino, je pense que le find est une bonne solution mais souvent mal utilisé. find estpas vraiment
la bonne fonction pour une recherche de cellule vide par contre efficace pour les cellules non vide.
Donc quand on recherche une cellule avec il est preferable de le faire comme suit :
Dim LinePremCellVide As Long
LinePremCellVide = Sheets("feuil1").Columns(1).Find("*", , , xlByRows, xlPrevious).Row + 1
Cette methode recherche la derniere celule non vide et ne tient pas compte des cellules vides intercalées en suite il suffit de lui ajouté 1
pour avoir la premiere cellule vide.
essais avec ton timer et dit moi ce que tu en penses
A+
Vous n’avez pas trouvé la réponse que vous recherchez ?
eastpeople
Messages postés105Date d'inscriptiondimanche 16 décembre 2007StatutMembreDernière intervention11 novembre 2008 29 mai 2008 à 20:44
Bon ben écoutez je désespere aucune de vos solutions ne marche.
Je vous remet mon code pour voir si g pa fé une betise
Private Sub UTIL_Initialize()
Dim LinePremCellVide As Long
LinePremCellVide = Sheets("abonnements").Columns(1).Find("*", , , xlByRows, xlPrevious).Row + 1
For i = 14 To DerniereLigne
If Range("A" & i).Value <> vbNullString Then
type_dact.AddItem Range("A" & i).Value
End If
Next i
End Sub
J'ai mis la deuxième solution mais même l'autre ne marche pas.
bigfish_le vrai
Messages postés1835Date d'inscriptionvendredi 13 mai 2005StatutMembreDernière intervention20 novembre 201315 29 mai 2008 à 21:26
...
non mais non ! ce que j'ai donné n'est pas pour toi... desolé pour la confusion que cela provoque
Si tu utilises ce que je t'ai donné tu doit utiliser les meme variables ! Ce que t'a donné mortalino marche tres bien sauf que dans un de tes precedent poste tu l'as induit en erreur avec
Private Sub type_dact_Change()
type_dact.RowSource = "abonnements!A14:A" & DerniereLigne
End Sub
ca c'est pas bon donc dans le code qu'il t'as donné remplace dans la boucle for le 14 par 2
Private Sub UTIL_Initialize()
dim i as integer, DerniereLigne as integer
DerniereLigne = Ws.Range("A65536").End(xlUp).Row + 1
for i = 2 to DerniereLigne
If range("A" & i).Value <> vbNullString Then
type_dact.AddItem range("A" & i).Value
end if
next i
end sub
eastpeople
Messages postés105Date d'inscriptiondimanche 16 décembre 2007StatutMembreDernière intervention11 novembre 2008 29 mai 2008 à 21:43
Alors on reprends j'ai marqué:
Private Sub UTIL_Initialize()
Dim i As Integer, DerniereLigne As Integer
DerniereLigne = Ws.Range("A65536").End(xlUp).Row + 1
For i = 2 To DerniereLigne
If Range("A" & i).Value <> vbNullString Then
type_dact.AddItem Range("A" & i).Value
End If
Next i
End Sub
mais ca marche toujours pas.
Je comprend vraiment pas.
bigfish_le vrai
Messages postés1835Date d'inscriptionvendredi 13 mai 2005StatutMembreDernière intervention20 novembre 201315 29 mai 2008 à 22:17
...
Ok je veux bien addmetre que cela ne marche mais il doit quand bien ce passer quelque chose
nous dire que cela ne marche pas ne t'aidera vu qu'on pourra pas t'aider avec si peut d'info, donc:
- la liste est vide ? la liste n'est pas complete ? la liste est complete mais les lignes blanches sont toujours la ?
- le code plante ? si le code plante quel est le message d'erreur ? quelle ligne est surlignée par le VBE ?
quelque question bete mais on ne sais jamias :
la Sub UTIL_Initialize() est telle dans le code du userform nomé UTIL ? la liste est t'elle dans le userform UTIL ? quel type de controle utilises-tu pour ta liste, une listbox une combobox ? son nom est-il type_dact ?
eastpeople
Messages postés105Date d'inscriptiondimanche 16 décembre 2007StatutMembreDernière intervention11 novembre 2008 29 mai 2008 à 22:24
Oui c'est vrai desolée mais la panique me gagne.
Alors la liste est compléte mais les lignes blanches sont toujours la.
La sub est bien dans le code du userform UTIL, la liste est dans le userform
Pour la liste j'ai juste changé une proprieté pour qu'on ne puisse rien marquer dedans.C'est une combobox
et son nom est bien type_dact.
Merci de votre aide
bigfish_le vrai
Messages postés1835Date d'inscriptionvendredi 13 mai 2005StatutMembreDernière intervention20 novembre 201315 29 mai 2008 à 22:31
...
eeeeeeeeh ! mais !! dit donc il y une partie qui a disparu depuis ton premier poste !?!
Dim Ws As Worksheet
Set Ws = Sheets("abonnements")
sans ça cela ne peut fonctionner. aarf ! pourquoi je ne l'ai pas vu avant ?
Private Sub UTIL_Initialize()
Dim i As Integer, DerniereLigne As Integer
Dim Ws As Worksheet
Set Ws = Sheets("abonnements")
DerniereLigne = Ws.Range("A65536").End(xlUp).Row + 1
For i = 2 To DerniereLigne
If Range("A" & i).Value <> vbNullString Then
type_dact.AddItem Range("A" & i).Value
End If
Next i
End Sub
bigfish_le vrai
Messages postés1835Date d'inscriptionvendredi 13 mai 2005StatutMembreDernière intervention20 novembre 201315 29 mai 2008 à 22:45
...
donc la liste est bien créée mais les lignes blanches sont toujours la ! tien tien... pas sur que la correction dans mon dernier poste resolve le probleme ???
Si la liste est bien creee et ce avec les lignes blanches cela veut dire que la condition if est toujours vrai, donc :
Si cela ne marche toujours pas essai de remplacer vbNullString par "" ou alors Range("A" & i).Value par Range("A" & i).textmais surtout pas les deux !!!
eastpeople
Messages postés105Date d'inscriptiondimanche 16 décembre 2007StatutMembreDernière intervention11 novembre 2008 29 mai 2008 à 22:57
Alors j'ai donc mis
Private Sub UTIL_Initialize()
Dim i As Integer, DerniereLigne As Integer
Dim Ws As Worksheet
Set Ws = Sheets("abonnements")
DerniereLigne = Ws.Range("A65536").End(xlUp).Row + 1
For i = 2 To DerniereLigne
If Range("A" & i).Value <> vbNullString Then
type_dact.AddItem Range("A" & i).Value
End If
Next i
End Sub
mais malheureusement ça marche pas, toujours pareil pas de message d'erreur, mais toujours ces mêmes lignes blanches.
eastpeople
Messages postés105Date d'inscriptiondimanche 16 décembre 2007StatutMembreDernière intervention11 novembre 2008 30 mai 2008 à 09:39
Bonjour, reprenons, j'ai essayé de changer vbNullString par "", pas de changement, j'ai donc essayé de changer value par text, idem pas de changement.
Comme tu dis la liste est créer, mais toutes ces eternelles lignes blanches.
Je confirme qu'il n'y a aucun espace dans mes cellules excel vides.
Molenn
Messages postés797Date d'inscriptionmardi 7 juin 2005StatutMembreDernière intervention23 février 20117 30 mai 2008 à 11:29
Tiens Mortalino, ça faisait longtemps ^^
Un moyen très simple de vérifier si tes cellules sont réellements vides ou non.
Tu rajoutes une formule dans une colonne de ton fichier EXCEL :
=ESTVIDE(TaCellule)
et tu copies cette formule sur toutes tes lignes.
Si tu n'as pas de VRAI, c'est que ta cellule contient quelque chose, que ça soit un espace, une tabulation, un retour charriot ... un truc qui ne se voit pas à l'écran quoi.
Parce que je confirme qu'un simple :
if range("A1").value <>"" then blabla fonctionne si la cellule est réellement vide.
Sinon, tu peux aussi tenter de rajouter une ligne dans ton code :
If Range("A" & i).Value <> vbNullString Then
type_dact.AddItem Range("A" & i).Value
debug.print Range("A" & i).Value
End If
Une fois que ta macro a tourné, tu retournes dans l'éditeur VB, tu ouvres la fenêtre d'exécution (ctrl+G) et tu regardes ce qui a été ajouté à ta comboBox. Si tu as un espace ou une tabulation (suffit de déplacer la flèche vers le bas pour le voir, tu dois rester coller à gauche si c'est vide), tu le verras tout de suite.
eastpeople
Messages postés105Date d'inscriptiondimanche 16 décembre 2007StatutMembreDernière intervention11 novembre 2008 30 mai 2008 à 15:21
Ok donc si jme souvien bien dans mes cours le 0=faux et le 1=vrai donc je peux en deduire que toute mes cases contiennent quelque chose???
Mais quoi et commen faire pour le supprimer?
Merci beaucoup
Molenn
Messages postés797Date d'inscriptionmardi 7 juin 2005StatutMembreDernière intervention23 février 20117 30 mai 2008 à 16:28
Tu obtiens des 0 et des 1 avec la formule ESTVIDE ? Etonnant, mais pourquoi pas.
Ce que tu peux faire, c'est par exemple mettre le bout de code suivant dans un module (et bien dans un module, si tu le mets dans le code d'une feuille, ça ne fonctionnera pas) :
Public Function CodeCaractère(Cellule As Range)
CodeCaractère = Asc(Cellule.Value)
End Function
Ensuite, sur ta feuille, tu colles le code suivant :
=CodeCaractère(A1)
et tu copies la formule sur toutes les lignes dont tu as besoin.
Si la cellule est bien vide, ta formule devrait t'afficher #VALEUR, si elle contient quelque chose, tu obtiendras le code caractère de ce qui est contenu, par exemple 10 pour un retour charriot, 13 pour le retour à la ligne (ou l'inverse, je ne sais jamais ), 9 pour une tabulation de mémoire, 32 pour un espace.
Charge à toi de vider tes cellules proprement, soit à la main soit par une macro (le code pour vider est cellule, c'est Range("A1").Clearcontents ).
Molenn
Messages postés797Date d'inscriptionmardi 7 juin 2005StatutMembreDernière intervention23 février 20117 3 juin 2008 à 10:42
Dans tes cases des 0 ? Je ne comprends pas.
Reprenons un truc tout simple, tu as bien mis dans un module le bout de code donné plus haut.
Mettons que la seule cellule vide que tu veuilles tester est la "A1" (tu remplaceras bien entendu par ta bonne référence de cellule).
En B1, tu vas écrire la formule suivante :
=CodeCaractère(A1)
Quand tu valides la formule, qu'est-ce qu'il y a d'affiché en B1 ?
Si c'est 0, à priori, ça correspondrait au caractère Null (que je ne connaissais pas tiens) : http://www.commentcamarche.net/base/ascii.php3
Si c'est ça, tu peux toujours bidouiller ton code, au lieu de faire :
If Range("A" & i).Value <> vbNullString Then
et bien, tu fais
If Asc(Range("A" & i).Value) <> 0 Then