Modification qui ne se fait pas

Bonjour à tous,

Vous allez certainement pouvoir m'aider. Je suis autodidacte en ce qui concerne excel, et j'essaye de faire des bouts de codes correct ou encore de trouver un maximum de solution moi même.

Mais là, je suis coincé. Dans le cadre de mon boulot, j'ai crée un outil de contrôle des dossiers. A travers celui ci j'ai un useform me permettant de modifier une liste d'utilisateurs, de les ajouter ou les supprimer. Et c'est surtout sur la fonction modifier sur laquelle je bloque. La liste n'est pas modifiée et je ne comprends pas vraiment pourquoi.

Pourriez vous m'aider ?

Merci d'avance.

6outilpicking1.xlsm (483.41 Ko)

Bonjour,

Peux-tu préciser quel objectif tu poursuis quand tu écris quelque chose comme

pole = Me.modifier_pole = Me.ListBox1.List(ListBox1.ListIndex, 0)

Formulée autrement, la question pourrait être: "quelle est la valeur de la variable pole après l'exécution de cette instruction?"

La question n'est pas que de pure forme, puisqu'un peu plus loin, tu compares cette variable à une autre:

If (varnom2(i, 1) = pole) Then .....

Es-tu certain de comparer des choses qui sont comparables?

Merci déjà pour ta réponse, c'est sympa d'essayer de m'aider.

A vrai dire, en regardant ta réponse et le code, il est vrai qu'il y a une erreur que je n'avais pas décelée.

Pour te répondre, ce que je cherche à faire c'est modifier les lignes à partir d'une recherche par le nom. Que sa sélectionne la ligne trouvée, afin de modifier le pole, le manager voir l'adresse mail. Et avec l'userform faire les modifications correspondantes.

J'avais essayé de trouver d'autres codes trouvés ci et là sur le net, mais sans résultats.... Mais à ce que je comprends dans ta réponse, je m'y prends mal. J'avoue que ça fait 2 jours que je me penche dessus mais je bloque un peu..

Selon toi, il y a t'il une solution qui serait donc plus simple et plus facile pour remplacer ce code ?

matimatfr a écrit :

J'avais essayé de trouver d'autres codes trouvés ci et là sur le net, mais sans résultats.... Mais à ce que je comprends dans ta réponse, je m'y prends mal

Ouh là, je n'ai pas dit que tu t'y prenais mal! Ce que je voudrais te faire comprendre, c'est que récupérer des bouts de code, c'est bien, mais, s'il y a une erreur, le mieux est avant tout d'essayer de comprendre!

Pour poursuivre ce que je disais plus tôt, place ton curseur, dans le code, sur la ligne que je mentionnais:

pole = Me.modifier_pole = Me.ListBox1.List(ListBox1.ListIndex, 0)

appuie maintenant sur la touche F9: un gros point rouge doit apparaître dans la marge (un point d'arrêt)

Affiche ton UserForm, sélectionne un item dans ta ListBox et appuie sur "Valider" (côté Modification, bien sûr!). Tout le code va s'exécuter jusqu'à cette fameuse ligne. Appuie maintenant sur F8, pour exécuter cette seule instruction.

Si elle n'est pas visible, affiche la "Fenêtre des Variables locales" ... que vaut ta variable pole? Elle vaudra VRAI ou FAUX en fonction du résultat de la comparaison entre Me.modifier_pole et Me.ListBox1.List(ListBox1.ListIndex, 0) Tu compares ensuite ce VRAI ou FAUX avec les "PGC" , "PGCS", ... qui sont dans la colonne A de ta feuille de calcul (et recopiées dans le tableau varnom2).

Vois-tu maintenant l'erreur que tu avais commises (enfin, la première ... je ne suis pas allé voir plus avant! )

Ceci dit, quand tu écris:

ListBox1.RowSource = "Zonelistecolla"

tu charges dans ta ListBox1, tout le contenu de la plage nommée ... À quoi sert la boucle For i = 1 To 0 qui suit?

Comme tu as garni ta ListBox avec toutes les données de la plage Zonelistecolla, il suffit, par la suite, d'ajouter 2 à la propriété ListIndex de ta ListBox pour obtenir le n° de ligne de l'élément sélectionné!

Pour t'en convaincre, dans ta Sub ListBox1_Click(), ajoute cette ligne

MsgBox Me.ListBox1.ListIndex + 2

... juste après le

If ListBox1.ListIndex = -1 Then Exit Sub

... exécute ton code et sélectionne un élément de ta liste. Note le nombre qui s'affiche, puis vérifie dans ta feuille masquée si ça correspond.

Est-ce que ceci ne serait pas susceptible de simplifier ta procédure de modification?

Ouh là, je n'ai pas dit que tu t'y prenais mal! Ce que je voudrais te faire comprendre, c'est que récupérer des bouts de code, c'est bien, mais, s'il y a une erreur, le mieux est avant tout d'essayer de comprendre!

T'inquiète pas c'était une remarque pour moi, je comprenais que j'étais entrain de faire ça à l'envers

En tout cas, je te remercie, j'ai fais tout les tests que tu m'as indiqué et c'est vrai, qu'en comprenant et en y regardant de plus près, il n'y avait rien de bien cohérent.

Du coup, je me suis servi de ce que tu as écris, et j'ai revu le code en le simplifiant énormément :

Private Sub valider_modif_Click()

Application.ScreenUpdating = False

ligne = ListBox1.ListIndex + 2

With Sheets("Liste")
.Range("A" & ligne) = modifier_pole.Text
.Range("B" & ligne) = modifier_mana.Text
.Range("C" & ligne) = modifier_nom.Text
.Range("D" & ligne) = modifier_mail.Text

End With

End Sub

Seul hic à l'heure actuelle, que j'essaye de comprendre et pour lequel je n'ai pas la réponse pour le moment, c'est qu'il fait bien une modif mais en remplaçant la ligne sélectionnée par la première ligne...

J'imagine donc que mon code est pas encore assez complet pour éviter ce phénomène. Si tu as une idée, je suis preneur, même si je vais continuer à chercher de mon coté aussi.

Bonsoir,

Essaie ce qui suit:

Private Sub valider_modif_Click()

    ligne = ListBox1.ListIndex + 2

    With Sheets("Liste")
    temp_pole = modifier_pole
    temp_nom = modifier_nom
    temp_mana = modifier_mana
    temp_mail = modifier_mail
    Unload Me
    .Range("A" & ligne) = temp_pole
    .Range("B" & ligne) = temp_mana
    .Range("C" & ligne) = temp_nom
    .Range("D" & ligne) = temp_mail
    End With

End Sub

Bonjour,

Merci beaucoup, j'ai fais le test et effectivement ça fonctionne.

J'ai pris le temps d'essayer de comprendre et j'avoue que j'avais pas du tout pensé passer par la constante "temp. "

Merci encore pour le temps passé qui m'a fait comprendre encore de nouvelles choses au vba.

Rechercher des sujets similaires à "modification qui fait pas"