Set c = Sheets("Annees").[BK1:BK100].Find(nom, LookIn:=xlValues, Lookat:=xlWhole)
Votre liste se trouve dans la feuille Mois
Edit : votre code comme ceci
Private Sub CommandButton2_Click()
Dim c As Range
Dim nom As String
If TextBox4 = "" Then Exit Sub
If MsgBox("Remplacer " & TextBox4 & " par " & TextBox2, vbExclamation + vbYesNo, "CONFIRMATION") = vbNo Then Exit Sub
nom = TextBox4
Set c = Sheets("Mois").[BK1:BK100].Find(nom, LookIn:=xlValues, Lookat:=xlWhole)
c.Value = TextBox2
Set c = Nothing
For k = 1 To Sheets.Count
If Left(Sheets(k).Name, 7) = "semaine" Then
Set c = Sheets(k).[DJ13:EK21].Find(nom, LookIn:=xlValues, Lookat:=xlWhole)
If Not c Is Nothing Then
c.Value = TextBox2
End If
End If
Next k
Unload Me
End Sub
Le bug se produit à quel endroit du code. Car c.Value = TextBox2 est à deux endroits.
Edit : cela n’a rien avoir avec votre demande mais pour la sub Initialize, utilisez plutôt ce code qui est plus parlant ou compréhensif que d’utiliser le rows(3).end dans votre ligne.
Private Sub UserForm_Initialize()
With Feuil1
ListBox1.List = .Range("BK1:BK" & .Range("BK" & Rows.Count).End(xlUp).Row).Value
End With
End Sub
A mon avis c’est le premier car dans le deuxième si vous utilisez le code que je vous ai donné, il n’y aura pas de bug mais bon c’est assez curieux puisque les valeurs reprises dans la listbox proviennent de la feuille Mois et que c.value vient de cette feuille mois
Pour faire un test, juste avant la ligne c.Value = TextBox2 qui bugue , mettez cette instruction
Msgbox c.address
Si la valeur est trouvée le message vous renverra l’adresse de la cellule concernée. Le cas échéant vous n’aurez aucune info.
Sans voir le vrai fichier ce n’est pas facile …
Edit : vérifiez aussi que :
votre feuille Mois est bien orthographiée comme dans votre code.
dans le nom de l’onglet vous n’avez pas un espace devant le M ou derrière le S
Attention j’ai volontairement supprimé la ligne du Bug qui modifie le nom dans la liste de référence de ceux-ci
:
Set c = Sheets(« Annees »).[BK1:BK100].Find(Nom, LookIn:=xlValues, Lookat:=xlWhole) c.Value = TextBox2
En ajustant le nom de l’onglet « Années » qui n’a aucune donnée dans ton fichier par celui « Mois » qui a bien cette liste présente dans la colonne citée « BK » cela résout bien ce dysfonctionnement mais qui resurgit à l’identique sur ton fichier de travail
Comme il est dit même cause même effet : “Années” “Mois” “autre ….”
Il faut bien déterminer ce paramètre à inclure dans toute cette commande sinon soucis soucis
Dans cette incertitude j’ai donc supprimé cette mise à jour et de pouvoir ainsi tester les suivantes
A toi de la rétablir avec la bonne cible à utiliser
comme c’est un tableau structuré, c’est même inutile de préciser la feuille. On peut même déplacer le TS dans la feuille ou vers une autre feuille, il ne faut pas modifier le code VBA.,
djn : j’ai ajouter Msgbox c.address et du coup maintenant c’est lui qui est en jaune.
FFO Le fichier fonctionne sans bug pour les noms dans les onglets semaine.
Mais bien sur pas dans la feuille Mois.
et Cow18 : un bug à la dernière ligne
Dim Nom, i, c As Range
Nom = TextBox4.Value 'ancien nom
If Nom = "" Then Exit Sub
If MsgBox("Remplacer " & TextBox4 & " par " & TextBox2, vbExclamation + vbYesNo, "CONFIRMATION") = vbNo Then Exit Sub
With Range("TBL_Noms").ListObject 'le tableau
R = Application.IfError(Application.Match(Nom, .DataBodyRange.Columns(1), 0), 0) 'trouver nom dans lapremière colonne
If R = 0 Then
MsgBox "introuvable"
Else
.DataBodyRange.Cells(R, 1).Value = TextBox2.Value 'remplacer ancien nom par nouveau nom
.Range.RemoveDuplicates Array(1), xlYes 'supprimer les doublons
Attention j’ai volontairement supprimé la ligne du Bug qui modifie le nom dans la liste de référence de ceux-ci
:
Set c = Sheets(« Annees »).[BK1:BK100].Find(Nom, LookIn:=xlValues, Lookat:=xlWhole) c.Value = TextBox2
En ajustant le nom de l’onglet « Années » qui n’a aucune donnée dans ton fichier par celui « Mois » qui a bien cette liste présente dans la colonne citée « BK » cela résout bien ce dysfonctionnement mais qui resurgit à l’identique sur ton fichier de travail
Comme il est dit même cause même effet : “Années” “Mois” “autre ….”
Il faut bien déterminer ce paramètre à inclure dans toute cette commande sinon soucis soucis
Dans cette incertitude j’ai donc supprimé cette mise à jour et de pouvoir ainsi tester les suivantes
A toi de la rétablir avec la bonne cible à utiliser
si l’erreur est sur cette ligne, vous pouvez la supprimer, c’est pour supprimer les doublons, mais cela n’était pas dans votre demande initiale, donc peut-être pas nécessaire.
Avec l’utilisation des tableaux structurés, la place de ce tableau est connue par Excel, donc inutile de la préciser, son nom suffit. Comme ça, cela prévient de faire des erreurs. .
PJ87
djn : j’ai ajouter Msgbox c.address et du coup maintenant c’est lui qui est en jaune.
Vous l’avez ajouté où ? Au premier c.value = textbox2 ou au deuxième ?
C’est que la valeur c n’est pas trouvée. Donc vous avez un souci avec le nom de votre feuille ou que la plage que vous avez définie dans le set c = …. n’est pas correcte
Dites-moi ce que vous modifiez comme nom dans la liste lorsque vous avez le bug
Avez-vous vérifié ce que je vous ai écrit dans mon EDIT de mon post précédent ?
Sinon autre question quand vous exécutez le code vous le faites bien depuis la feuille Mois comme dans votre fichier posté ? En gros c’est bien la fiche mois qui est sélectionnée lorsque vous modifiez un nom ?
Lorsque vous modifiez un nom c’est bien juste pour une question d’orthographe ?
on error …, c’est quelque chose vous utilisez cela en dernier recours, pas courant. Cela cache l’erreur au lieu de la corriger.
la macro de FFO “légèrement” corrigée et sans “on error”. “c” est déclaré comme “range” et s’il est “nothing”, le “Find” n’a rien trouvé, donc on ne peut rien faire, comme ça, on a contourné l’erreur …
Mais tout de même curieux que ce soit une histoire de guillemets.
Puis comme Cow18, les on error resume next… bof
Si vous mettez cela à cet endroit votre feuille mois ne devrait pas être adaptée suivant votre nouveau choix en textbox2. Idem pour la feuille Semaine
Si vous cliquez dans la listbox sur un nom c’est qu’il existe dans la feuille mois. D’où je n’arrive pas à comprendre votre bug sachant que le nom choisi est chargé en textbox4 et que vous corrigez le nom en textbox2
Comme je vous avais donné dans mon code au début du fil, ajoutez ceci avant le c.value = textbox2 pour la feuille Mois
FFO, as-tu vérifié cela dans le PJ du poste 16 + mon explication ? Ne dis pas des bêtises !
Si on se trompe et on écrit une feuille inexistante, il y a un bug, si on cherche quelque chose qui n’y est pas, c devient “nothing” et on continue seulement avec c<>nothing.