Re,
d'accord je vais donc garder cette solution de côté et continuer avec find.
Re,
d'accord je vais donc garder cette solution de côté et continuer avec find.
N'étant pas passer par cette filière, je n'ai aucune idée du contenu pédagogique de ce cursus. Donc ça n'aide pas vraiment.
De plus, je me souviens des quelques cours d'informatique que j'ai pu avoir dans mes études post-bac : le prof en apprenait plus que nous pendant les TP (on était deux ou trois à faire en moins de 10 min ce qu'il avait prévu de nous faire faire en 4h).
Je ne comprends pas pourquoi tu intègres un FindNext à ton code. Tu as dis que ta date était unique. Dans ce cas, pourquoi en chercher plusieurs occurrences ?Ce code est l'exemple donner dans le lien qui a été envoyé au dessus.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10 With Worksheets(1).Range("a1:a500") Set c = .Find(2, lookin:=xlValues) If Not c Is Nothing Then firstAddress = c.Address Do c.Value = 5 Set c = .FindNext(c) Loop While Not c Is Nothing And c.Address <> firstAddress End If End With
Dans ton code, la variable "c" représente la cellule trouvée.celui ci trouve bien la valeur ça c'est bon mais il remplace cette même valeur qui est 2 par 5 a la suite.
Donc "c.Value = ..." va changer la valeur de cette cellule.
Si tu veux que le code en modifie une autre, il faut lui dire où elle se trouve par rapport à la cellule trouvée, en utilisant la propriété Offset.
Ou alors récupérer le numéro de ligne de cette cellule en utilisant la propriété Row et l'utiliser dans un Cells(,) pour désigner la cellule que tu souhaites.
Vire ce "On Error Resume Next" !!!!!Et au niveau de mon propre code
j'ai ça
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7 Private Sub Env_Don_Click() Dim madate As Date Dim c madate = CDate(Me.Date_Txt.Text) On Error Resume Next
En phase de développement, ce type d'instruction est une horreur qui n'apporte que des ennuis.
C'est normal puisque tu lui as demander de ne pas tenir compte des erreurs.ça ne me fais pas d'erreur mais je ne sais pas encore si cela fonctionne vraiment du coup.
Du coup, ça ne fonctionne pas mais tu ne sais pas pourquoi.
Sans le On Error Resume Next, ça ne fonctionnerait sans doute pas mieux mais au moins tu pourrais savoir pourquoi et tu aurais une chance de pouvoir le corriger.
Je ne sais pas qui a conseillé de remplacer un Find par une boucle mais ça fait bricolage.
Merci de cliquer sur pour chaque message ayant aidé puis sur pour clore cette discussion.
Re,
Ce n'est pas mon code mais celui du lien que vous m'avez envoyer.
je disais seulement que j'avais compris ce que ce code si me disais mais que je ne savais pas vraiment comment l'adapter au mien.
D'accord je vais retirer les lignes qui n'ont dans touts les cas rien a faire la.Dans ton code, la variable "c" représente la cellule trouvée.
Donc "c.Value = ..." va changer la valeur de cette cellule.
Si tu veux que le code en modifie une autre, il faut lui dire où elle se trouve par rapport à la cellule trouvée, en utilisant la propriété Offset.
Ou alors récupérer le numéro de ligne de cette cellule en utilisant la propriété Row et l'utiliser dans un Cells(,) pour désigner la cellule que tu souhaites.
Fait, et oui du coup j'ai bien une erreur merci.Vire ce "On Error Resume Next" !!!!!
En phase de développement, ce type d'instruction est une horreur qui n'apporte que des ennuis.
C'est normal puisque tu lui as demander de ne pas tenir compte des erreurs.
Du coup, ça ne fonctionne pas mais tu ne sais pas pourquoi.
Sans le On Error Resume Next, ça ne fonctionnerait sans doute pas mieux mais au moins tu pourrais savoir pourquoi et tu aurais une chance de pouvoir le corriger.
Ce lien sert juste à comprendre la syntaxe et l'utilisation de la méthode Find.
L'exemple qu'il contient n'est bien sûr pas à appliquer directement à ton code. Il faut en comprendre chaque élément pour savoir comment l'adapter à ton cas.
C'est sûr que si pour toi "adapter" ça veut dire faire un copier/coller, ça ne va pas fonctionner.je disais seulement que j'avais compris ce que ce code si me disais mais que je ne savais pas vraiment comment l'adapter au mien.
Regarde l'aide de la méthode Find, sa syntaxe et ses paramètres.Fait, et oui du coup j'ai bien une erreur merci.
Mais comme je sens que tu vas faire une demande ici chaque fois que tu vas rencontrer un bug avant même d'avoir pris la peine de rechercher sérieusement par toi-même, je crois que je vais un peu m'éloigner de cette discussion.
Merci de cliquer sur pour chaque message ayant aidé puis sur pour clore cette discussion.
Re,
Je ne me fou pas de vous, je ne comprend vraiment pas.
j'avoue que mettrem'as bloqué longtemps, c'était une erreur.
Code : Sélectionner tout - Visualiser dans une fenêtre à part On Error Resume Next
j'ai donc la ligne surligné en jaune et j'ai tenté toute sorte de chose comme :
Code : Sélectionner tout - Visualiser dans une fenêtre à part compare = Cells.Find(madate, LookIn:=xlDate)ou encore la première
Code : Sélectionner tout - Visualiser dans une fenêtre à part compare = Cells.Find(Me.Date_Txt.Value, LookIn:=xlDate, LookAt:=xlWhole) 'car ma date viens de la valeur de Date_Txt converti avec CDate
je ne comprend pas , ce qu'il ne va pas.
Code : Sélectionner tout - Visualiser dans une fenêtre à part compare = .Find(madate, LookIn:=xlDate)
Je lui dit bien regarde dans la plage A1:A800 si madate y est ? (en tout cas c'est ce que je crois lui demander depuis tout a l'heure)
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17 With Worksheets(3).Range("A1:A800") 'Va a la feuille 3 et cellules de ("A1 à A800) madate = CDate(Me.Date_Txt.Text) compare = .Find(madate, LookIn:=xlDate) 'Met Méthode .Find dans compare If compare Is Nothing Then ' Si compare ne trouve rien alors MsgBox ("La date n'as pas été trouvé.") Do Loop While Not compare Is Nothing And compare.Address <> firstAddress End If End With
Re,
Voila c'est exactement ce que j'ai en ce moment et exactement ce que je comprend pourtant il m'affiche qu'il ne trouve pas la date.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17 With Worksheets(3).Range("A:A") 'Va a la feuille 3 et range A compare = .Find(madate) 'Met Méthode .Find dans compare If compare Is Nothing Then ' Si compare ne trouve rien alors MsgBox ("La date n'as pas été trouvé.") Do 'Faire num_ligne = num_ligne + 1 Loop While compare Is Nothing And compare.Address <> madate ' Tant que compare ne trouve rien et que compare et different de firstadress End If End With
BOnjour
As-tu testé en mode debug que la date que tu cherches est bien au format date ?
doit marcher
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3 Dim compare As Range Set compare = Worksheets(1).Range("a1:a500").Find(CDate(Me.Date_Txt.Value), LookAt:=xlWhole) If compare is nothing then msgbox "non trouvé"
Ne pas oublier au préalable de tester que la saisie est bien une date valide
Chris
PowerQuery existe depuis plus de 13 ans, est totalement intégré à Excel 2016 &+. Utilisez-le !
Quand un homme a faim, mieux vaut lui apprendre à pêcher que de lui donner un poisson.
Confucius
----------------------------------------------------------------------------------------------
En cas de résolution, n'hésitez pas cliquer sur c'est toujours apprécié...
Oui apparemment cette partie la ne pose plus problème après les dernières modifications.
Le code a l'air de fonctionner car quand je lui demande de chercher une date existante dans ma colonne il trouve mais quand je lui donne une date impossible comme 01/01/1799. (rapport improblable).
Il me dit bien date introuvable et hop petit crash avec l'erreur 91
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20 With Worksheets(3).Range("A:A") 'Va a la feuille 3 et range A madate = CDate(Me.Date_Txt.Text) Set compare = .Find(madate) 'Met Méthode .Find dans compare If compare Is Nothing Then ' Si compare ne trouve rien alors MsgBox ("La date n'as pas été trouvé.") Do 'Faire num_ligne = num_ligne + 1 Loop While compare Is Nothing And compare.Address <> madate ' Tant que compare ne trouve rien et que ce que contient compare et different de madate End If End With End Suble format de saisie sera forcement valide car la date vien du calendrier, par contre la date en elle même comme dit si dessus par exemple 01/01/1799 est complètement impossible.Ne pas oublier au préalable de tester que la saisie est bien une date valide
Je part chercher comment régler cette erreur.
Merci à tous pour votre aide.
Re, dans la fenêtre espion je vois que le type de compare.Address et un Int variable, cependant stocker une date dans un int c'est pas vraiment possible avec les / ?
Cela peut venir de la ? Ou peut-être que je vais chercher trop loin ?
"Variable objet ou variable de with non définie" je ne vois pas quel variable déclarer puisque .Address n'est pas une variable et compare est déclaré comme :
Code : Sélectionner tout - Visualiser dans une fenêtre à part Dim compare
Bonjour
drôle d'idée, que celle de rechercher tant qu'une adresse est différente d'une ... date.
Je n'accepte pas de demande d' "amitié" individuelle. Tout développeur est pour moi un ami.
Je n'ouvre AUCUN classeur tiers (avec ou sans macro ******). Ne m'en proposez donc pas .
****** : Non, non ... un classeur .xlsx ne "peut" par exemple et entre autres pas contenir un activex (de surcroît invisible) , "bien sûr" ...
Il est illusoire de penser que l'on saurait exprimer valablement et précisément en un langage (rigide) de développement ce que l'on peine à exprimer dans le langage naturel, bien plus souple.
Re,
Désolé je comprenais que compare.Address contient madate quand elle existe, sinon il ne contient rien.
mais je me suis dit que c'était bon au départ puisque si je retire .Address il ne me donne aucune indication, par exemple quand je selectionne 01/01/1800
Il ne me dit pas qu'il n'a pas trouvé la date.
Edit: Je reviens sur ce que j'ai dit j'ai remis et retirer Address et l'erreur est la même
Et compare a l'air de ne rien recevoir du tout.
Re,
Re, si cela me semble logique j'ai fini par le voir et l'annoncer dans le message precedent.
Cela vous semble certainement très simple mais je vous confirme que pour moi c'est un vrai casse tête, votre expérience fait surement que vous savez ou aller chercher l'information et comment la traiter.
Malheureusement j'ai moins d'un ans de programmation derrière moi et encore, cela ne me parait pas tout de suite vraiment évident.
Une fois que cela fonctionnera, je ne reproduirais plus la même erreur.
Désolé pour les desagrements.
Edit : j'ai remplacer And par Or dans ma boucle et plus de crash.
Merci de cliquer sur pour chaque message ayant aidé puis sur pour clore cette discussion.
Je me suis obstiné avec cette boucle par ce que pour moi elle servait aussi a lire ma colonne pour retrouver ma date mais Find le fait déja en fait.
Désolé je suis long a la détente
Du coup j'ai essayé comme ça mais le text du textbox ne ce stocke pas dans la cellules que je veut .
J'ai mis en commentaire exactement ce que je comprend faire.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20 With Worksheets(3).Range("A:A") 'Va a la feuille 3 et range A Set compare = .Find(madate) 'Met Méthode .Find dans compare If compare Is Nothing Then ' Si compare ne trouve rien alors MsgBox ("La date saisie est incorrect.") ElseIf compare = madate Then 'Sinon si compare = madate alors Sheets("Feuil2").Cells(compare, 2).Value = TextBox1.Text 'dans Feuil2 a la cellule de compare, colonne 2 écrire le txt de textbox1 End If End With End Sub
Regarde la syntaxe de l'objet Cells, en particulier quel est la nature du premier paramètre.
Ce que je remarque surtout, c'est que tu ne te donnes pas vraiment la peine de chercher par toi-même à résoudre les problèmes vu la vitesse à laquelle tu fais tes demandes à chaque résolution.
Etre débutant ne t'handicape pas pour consulter l'aide VBA qui est accessible par une touche (F1) et très bien conçue.
Merci de cliquer sur pour chaque message ayant aidé puis sur pour clore cette discussion.
je regarde en même temps pas de soucis, je suis actuellement sur ce lien car j'avais taper mon erreur sur le forum et je suis tomber sur une proposition d'aller voir ce tutoriel :
https://loufab.developpez.com/tutori...pelformulaire/
Bonjour à tous,
J'ai avancé et suis arriver a ce que je voulais faire.
Merci pour votre aide.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65 Private Sub Env_Don_Click() Dim madate As Date Dim ligne As Integer Dim oWksht As Worksheet Dim lastrow As Long Dim myCell As Range madate = CDate(Me.Date_Txt.Text) Sheets("Feuil1").Select Sheets("Feuil1").Unprotect "543210" Range("C6") = TextBox1.Value Range("C7") = TextBox2.Value Range("C8") = TextBox3.Value Range("C9") = TextBox4.Value Range("C10") = TextBox5.Value Range("C11") = TextBox6.Value Range("B32").Value = TextBox7.Text Range("G4") = Date_Txt.Text Range("C16") = TextBox8.Value Range("C17") = TextBox9.Value Range("C18") = TextBox10.Value Sheets("Feuil1").Protect "543210" Sheets("Feuil2").Visible = True Sheets("Feuil2").Select Set oWksht = Sheets("Feuil2") lastrow = oWksht.Range("A" & Rows.Count).End(xlUp).Row 'Rows.Count descend a la dernière ligne de la feuil1 plage A puis remonte avec .End(xlUp).row a la dernière ligne remplie et en prend la valeur Range("A1").Activate Set myCell = oWksht.Range("A14:A" & lastrow).Find(what:=madate, LookIn:=xlValues, _ LookAt:=xlWhole, SearchOrder:=xlByRows, SearchDirection:=xlNext, _ MatchCase:=False, SearchFormat:=False) If myCell Is Nothing Then MsgBox ("Date incorrect.") ElseIf Not myCell Is Nothing Then ligne = myCell.Row 'Ligne de la date Sheets("Feuil2").Cells(ligne, 2).Value = TextBox1.Text 'Parcipant Sheets("Feuil2").Cells(ligne, 3).Value = TextBox2.Text 'Parcipant Sheets("Feuil2").Cells(ligne, 4).Value = TextBox3.Text 'Parcipant Sheets("Feuil2").Cells(ligne, 5).Value = TextBox4.Text 'Parcipant Sheets("Feuil2").Cells(ligne, 6).Value = TextBox5.Text 'Parcipant Sheets("Feuil2").Cells(ligne, 7).Value = TextBox6.Text 'Parcipant Sheets("Feuil2").Cells(ligne, 8).Value = TextBox7.Text 'commentaire Sheets("Feuil2").Cells(ligne, 9).Value = TextBox8.Text 'accident Sheets("Feuil2").Cells(ligne, 10).Value = TextBox9.Text 'accident Sheets("Feuil2").Cells(ligne, 11).Value = TextBox10.Text 'accident End If ActiveWindow.SelectedSheets.Visible = False Exit Sub End Sub
Remplace
Par
Code : Sélectionner tout - Visualiser dans une fenêtre à part ElseIf Not myCell Is Nothing Then
et supprime le dernier
Code : Sélectionner tout - Visualiser dans une fenêtre à part Else
Code : Sélectionner tout - Visualiser dans une fenêtre à part Exit Sub
Merci de cliquer sur pour chaque message ayant aidé puis sur pour clore cette discussion.
Re,
C'est fait.
Mais du coup est ce que le programme s'attend a avoir autre chose après mon ElseIf si je le laisse ?
Ou par ce que c'est pas propre ? Et pourquoi retirer le Exit Sub ?
Vous avez un bloqueur de publicités installé.
Le Club Developpez.com n'affiche que des publicités IT, discrètes et non intrusives.
Afin que nous puissions continuer à vous fournir gratuitement du contenu de qualité, merci de nous soutenir en désactivant votre bloqueur de publicités sur Developpez.com.
Partager