Problème de modifications.

Résolu
Signaler
Messages postés
18
Date d'inscription
lundi 9 mars 2009
Statut
Membre
Dernière intervention
17 janvier 2010
-
Messages postés
18
Date d'inscription
lundi 9 mars 2009
Statut
Membre
Dernière intervention
17 janvier 2010
-
Hello,

J'espère être dans le bon salon, si ce n'est pas le cas, je m'en excuse.

Voici mon souci :

J'ai un fichier avec un USF et je souhaite via un ComboBox modifier
les données avec les TextBox.

J'ai fais un code, mais il ne modifies que la ligne 2 ??

ça fait un moment que je tourne en rond je ne comprends pas pourquoi ça ne joue pas pour les autres !

Je précise que je travaille avec Excel 2003.

Voici le code, la partie entourée d'étoiles est celle qui me pose problème :

Private Sub UserForm_Initialize()

With Sheets("Liste")
For i = 2 To .Range("A65000").End(xlUp).Row
If .Cells(i, 1) <> .Cells(i - 1, 1) Then
Modifier.AddItem .Cells(i, 1).Value
End If
Next
End With

End Sub
Private Sub Modifier_Change()

Dim lign As Long

If Modifier <> "" Then
lign = Modifier.ListIndex + 2
TxtDate.Value = Range("B" & lign).Value
PR1.Value = Range("C" & lign).Value
PR2.Value = Range("D" & lign).Value
End If

End Sub

'**********************************************************
Private Sub BtnModifier_Click()

Dim x As Range

Set x = Range("A2:A" & Range("A65536").End(xlUp).Row)

For Each x In x
If Modifier = x Then
x = Modifier
x.Offset(0, 1) = TxtDate
x.Offset(0, 2) = PR1
x.Offset(0, 3) = PR2
End If
Next x

End Sub
'**********************************************************

Private Sub BtnSortie_Click()

End

End Sub


Le mieux, si vous le désirez, est de télécharger le fichier ici.

Je vous remercie par avance de toute l'aide que vous pourrez m'apporter !

JassBass.

11 réponses

Messages postés
682
Date d'inscription
vendredi 6 avril 2007
Statut
Membre
Dernière intervention
4 août 2012
6
ucfoutu a bien mis le doigt sur ton probleme mine de rien
et si tu avais exploré ton code en mode pas à pas tu aurais vu le souci à cette ligne
If Modifier = x Then

en effet Modifier est une chaine sa valuer est donc "valeur"
alors que ton x (que tu aurais dû écrire x.value. Afin de rendre le code plus lisible il faut toujours tout écrire et ne pas se contenter de la valeur par défaut)
que ton x a pour valeurs 1 puis "2" puis 3 puis 4
donc quand tu as if "2" = "2" ça marche et pour tous les autres cas l'égalité n'est pas vérifié "1" n'est pas égal à 1
donc fais une conversion de tes données
soit en string
if csrt(Modifier)= cstr(x.value) then

soit en entier
if cint(Modifier)= cint(x.value) then

suivant ce que sera la nature des valeurs dans le fichier réel

d'où l'intéret de toujours déclarer toutes les variables et de les typer et de mettre en tete de page de code Option Explicit
comme ça VBA te signalera toutes les variables non déclarées et ça t'évitera de nombreuses galères

si c'est la solution, penser : REPONSE ACCEPTEE
Messages postés
18038
Date d'inscription
lundi 7 décembre 2009
Statut
Modérateur
Dernière intervention
11 avril 2018
240
Bonjour,
beaucoup de code montré, une question et une invitation à ouvrir un fichier xls (ce que je ne fais personnellement que si le fichier a été écrit par moi)...
Ne crois-tu pas que tu aurais dû commencer par t'inquiéter de ce qu'est ta plage x (ainsi définie) ?

Fais ce minuscule test (sur n'importe quel projet, même vierge) :

Set x = Range("A2:A" & Range("A65536").End(xlUp).Row)
MsgBox x.Address


Vu ?
Tu as un problème de base, là, non ?
on peut t'y aider, mais dis-nous avec précision ce que tu veux que soit cette plage x !

Et par ailleurs, peux-tu tenter de nous expliquer (commente chaque ligne de ce code) ce que voudrait bien pouvoir dire cette étonnante (à divers titres) partie, par exemple :

For Each x In x
If Modifier = x Then
x = Modifier 


Nul ne peut coder "au hasard" (j'entends par "hasard" : sans savoir la portée de ce que l'on écrit)

____________________
Très intéressante fable, L'OISELEUR, L'AUTOUR ET L'ALOUETTE !
Cliquer sur "Réponse acceptée" (en bas d'une solution avérée adéquate) rendra service à d'autres. PENSEZ-Y.
Messages postés
18
Date d'inscription
lundi 9 mars 2009
Statut
Membre
Dernière intervention
17 janvier 2010

Hello,

Apparemment toi tu en sais beaucoup de choses non ?

N'as-tu jamais été débutant !?

Si justement j'ai écris ici, c'est que je ne suis pas un tout bon et je ne sais pas tout et que j'ai grandement besoin d'aide après pas mal de temps passé dessus.

Désolé, mais tu ne m'aide en rien... Pas constructif.
Quoique je suis d'accord avec toi pour le fait que je devrais commenter mes semblants de codes.

Je pensais qu'en étant poli, en ayant fait déjà un début de la chose et le tout avec un français plutôt correcte, on obtiendrait de l'aide dans un forum comme celui-çi ?
Je ne pensais pas qu'il fallait être un doué (comme toi), désolé de ne pas l'être.

Tu sais si ça t'ennuie de m'aider, pas de problème, passe à un autre, mais évites de rajouter une réponse... Pas la peine, ça pollue le post.

Merci quand même ucfoutu.

Cdt.

JassBass.
Messages postés
18
Date d'inscription
lundi 9 mars 2009
Statut
Membre
Dernière intervention
17 janvier 2010

Re,

ucfoutu, si tu avais un poil plus confiance en les gens, tu aurais téléchargé le fichier et tu aurais su avec précision ce que je souhaitais.

Pour les autres, (et même pour toi ucfoutu si tu acceptes de bien vouloir m'aider plutôt que de me tester ou juger), je quand même tâcher d'expliquer le problème, malgré le fait que je pense qu'un fichier exemple vaut tous les discours.

J'ai une liste de numéro dans la colonne A, je précise ça commence en A2, la ligne 1 étant les titres des colonnes.
Colonne B la date
Colonne C PR1
Colonne C PR2

Via le formulaire, je souhaite modifier les données.
Avec la ComboBox "Modifier" je sélectionne le numéro 2 et que je modifie les TextBox "PR1" et/ou "PR2" ou même la TextBox "TxtDate", qu'il me fasse les modifications dans la bonne ligne de la feuille.

Pour l'instant, j'ai que 4 lignes de remplies (donc jusqu'en A5)

Lorsque je sélectionne dans la ComboBox "Modifier" le 1 ou 3 ou 4 et que je modifies les TextBox, et que je clique sur les CommandButton "BtnModifier" (là où est la macro donc) il ne se passe rien, mais lorsque je sélectionne le 2 et que je modifies, il modifie bien le 2 (donc la ligne 3 sur la feuille !

Voilà, ça m'étonnerai que ça soit plus clair pour autant.

Merci pour votre aide.


JassBass.
Messages postés
18038
Date d'inscription
lundi 7 décembre 2009
Statut
Modérateur
Dernière intervention
11 avril 2018
240
Désolé, ami, mais rien à faire : je n'ouvrirai jamais un fichier xls non écrit par moi-même, même si j'avais confiance en celui qui me le transmet ! Avoir confiance en toi ? pourquoi pas ? avoir confiance en ta prudence et en épouser les éventuelles conséquences si elle n'a pas été suffisante ? Non ! Désolé ! Rien à faire (tu pourrais transmettre des petites "bébêtes" à ton insu :). Conclusion : ne compte par sur moi pour télécharger et ouvrir ton fichier !
Je pense par contre tout simplement qu'un problème spécifique et isolé doit toujours (et dsans faille) être exposé, avec le code (isolé) qui le concerne et les explications nettes qui le concernent.
Je t'ai posé une question claire : tu n'y as absolument pas répondu.
Les choses restent donc dans le flou et je le regrette pour toi.
Je ne reviendrai sur cette discussion que lorsque je saurai (exprimé techniquement, clairement, en détail et avec précision) :
Pour moi (et tu l'as d'ailleurs toi-même dit) ton problème ne commence pas à ta combo, mais à ton bouton BtnModifier et aux instructions qui s'y trouvent et qui concernent une plage x et sont censées modifier des cellules (lesquelles ?)

- ce que tu attends que soit ta plage x
- comment (but) tu veux l'exploiter
Point barre. Tout cela est technique et doit s'exprimer techniquement et sans omissions.
Bonne chance.


____________________
Très intéressante fable, L'OISELEUR, L'AUTOUR ET L'ALOUETTE !
Cliquer sur "Réponse acceptée" (en bas d'une solution avérée adéquate) rendra service à d'autres. PENSEZ-Y.
Messages postés
18038
Date d'inscription
lundi 7 décembre 2009
Statut
Modérateur
Dernière intervention
11 avril 2018
240
Une précision, quand même : ce que j'ai nexprimé en matière de sécurité reste valable même en désactivant les macros ...... dans certains cas bien "calculés" par l'initiateur (pas forcément toi) d'une certaine "propagation".
Mais toi, continue avec TES mesures de sécurité, comme TU les comprends et les vois.... Elles ne sont définitivement pas les miennes.

____________________
Très intéressante fable, L'OISELEUR, L'AUTOUR ET L'ALOUETTE !
Cliquer sur "Réponse acceptée" (en bas d'une solution avérée adéquate) rendra service à d'autres. PENSEZ-Y.
Messages postés
18
Date d'inscription
lundi 9 mars 2009
Statut
Membre
Dernière intervention
17 janvier 2010

Re,

Merci pil_poil !

Là je dois absolument partir, je regarde ça de près demain matin et reviendrai te confirmer si ça joue ou pas (si j'ai compris ou pas .

Sorry de ne pouvoir m'en occuper de suite.

Merci encore pour ta réponse.

Cdt, JassBass.
Messages postés
18038
Date d'inscription
lundi 7 décembre 2009
Statut
Modérateur
Dernière intervention
11 avril 2018
240
C'est l'intégralité de l'ambiguïté, qui est à lever :
Dim x As Range, R As Range
Set x = Range("A2:A" & Range("A65536").End(xlUp).Row)
For Each R In x
  If R.Value = modifier Then
    R.Offset(0, 1).Value = TxtDate.Value
    R.Offset(0, 2) = PR1.value
    R.Offset(0, 3) = PR2.value
  End If
Next


Goût personnel, par bailleurs :
Jer préfèrerais ceci
Set x = ActiveSheet.Range("A2:A" & UsedRange.Rows.Count - 1 -2)

à une référence à la plage Range("A65536") (puis remonter)
_Mais ce n'est qu'un choix personnel.
___________________
Très intéressante fable, L'OISELEUR, L'AUTOUR ET L'ALOUETTE !
Cliquer sur "Réponse acceptée" (en bas d'une solution avérée adéquate) rendra service à d'autres. PENSEZ-Y.
Messages postés
18
Date d'inscription
lundi 9 mars 2009
Statut
Membre
Dernière intervention
17 janvier 2010

Bonjour le Forum,

Bon pil_poil j'ai modifier la chose come ceci :

'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
Private Sub BtnModifier_Click()

Dim x As Range

For Each x In Range("A2:A" & Range("A65536").End(xlUp).Row)
If CStr(x.Value) = CStr(Modifier) Then
x = Modifier
x.Offset(0, 1) = TxtDate
x.Offset(0, 2) = PR1
x.Offset(0, 3) = PR2
End If
Next x

End Sub
'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''

Et ça joue !

Par contre ni en String ni en Integer !?

Bref, résolu.

Je retiendrais tes conseils !

Encore merci m'sieur !

Agréable dimanche à toi et à tous.

JassBass.
Messages postés
18
Date d'inscription
lundi 9 mars 2009
Statut
Membre
Dernière intervention
17 janvier 2010

Re,

Tiens je n'avais pas vu ton message ucfoutu, à vrai dire je pensais pas que tu allais y mettre une solution vu comme c'était parti hier

Bref, je m'appercois que tu es méfiant, mais pas rancunier (tout à ton honneur et je te comprends sur tes mesures de sécurité).

Bref, te remercie de m'avoir aidé aussi.

Je n'ai pas testé ton code, mais vais le faire de suite.

Je reviendrais te dire ce qu'il en est.

Cdt, JassBass.
Messages postés
18
Date d'inscription
lundi 9 mars 2009
Statut
Membre
Dernière intervention
17 janvier 2010

Re,

Ben ça joue ucfoutu.

Vais tâcher de bien comprendre tout ça.

Un grand merci et bonne fin de week !

JassBass.