Modifier nom avec un USF

Bonjour le forum,

Je me suis créé un fichier pour modifier les noms des personnes avec un USF sur certaines feuilles.

Une fois validé j’ai un bug et je n’arrive pas à corriger ce bug.

en jaune : c.Value = TextBox2

D’avance merci

PJ

Modif_Nom.xlsm (39,9 Ko)

   Set c = Sheets("Mois").[BK1:BK100].Find(Nom, LookIn:=xlValues, Lookat:=xlWhole)
 

“mois” au lieu d’ ”année”

Bonjour

A quoi sert cette ligne

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

Désolé je me suis tromper de fichier, le fichier c’est bien avec l’onglet Mois.

Mais le problème est toujours présent.

PJ

Merci djn pour le code celui-ci fonctionne bien sur mon fichier test.

Mais sur mon gros fichier du travail j’ai toujours le bug.

en jaune :
c.Value = TextBox2

PJ

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

Bonjour djn et le Forum,

c.Value = TextBox2 est le premier

Merci

PJ

en changeant vos données en un tableau structuré …

je pense que le 2ième “c.value=textbox2.value” cause l’erreur quand on n’a pas une telle cellule dans la feuille

Modif_Nom.xlsm (40,6 Ko)

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

Bonjour

Ton fichier avec mes adaptations

Testes et dis moi

Modif_Nom.xlsm (44,1 Ko)

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.,

Bonsoir messieurs et le Forum,

Désolé de vous répondre si tard.

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

PJ

Merci pour ton retour

“Mais bien sur pas dans la feuille Mois.”

Effectivement lié à ceci :

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

La balle est dans ton camp

A toi d’oeuvrer

À ta disposition pour t’aider si besoin

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. .

re

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

  1. Avez-vous vérifié ce que je vous ai écrit dans mon EDIT de mon post précédent ?
  2. 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 ?
  3. Lorsque vous modifiez un nom c’est bien juste pour une question d’orthographe ?

Bonjour Messieurs et le Forum,

Je voulais vous remercier pour toute l’aide que vous m’avez apportée que ce soit code ou fichiers.

Mais finalement j’ai trouvé la solution grâce au code de FFO.

FFO à ajouter : On Error Resume Next

If Left(Sheets(k).Name, 7) = « semaine » Then

On Error Resume Next

Du coup j’ai vais pareil pour Mois

Set c = Sheets(« Mois »).[BK1:BK100].Find(Nom, LookIn:=xlValues, Lookat:=xlWhole)

On Error Resume Next

Maintenant tout fonctionne correctement et aucun bug.

Merci encore et bonne journée à vous et au Forum

PJ

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 …

Modif_Nom (2).xlsm (37,4 Ko)

Si on se trompe de feuille, on aura encore ce bug, mais alors c’est au programmeur de résoudre cela.

Ok merci de votre retour

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

If not c is nothing then

Bonjour

“on error …, c’est quelque chose vous utilisez cela en dernier recours, pas courant. Cela cache l’erreur au lieu de la corriger.”

Je ne te suis pas sûr ce point car la ligne de code en rapport :

Set c = Sheets(« Mois »).[BK1:BK100].Find(Nom, LookIn:=xlValues, Lookat:=xlWhole)

A impérativement besoin du résultat à savoir le nom recherché dans la zone et l’onglet cité dans son expression sinon bug obligatoire

Or un nom recherché n’est pas systématiquement présent dans tous les onglets à analyser

Donc tu auras obligatoirement un bug dans ceux où ils est absent

C’est une situation normal

Donc pour la gérer pas d’autre choix que d’utiliser cette ligne de code :

On Error Resume Next

La modification à réaliser doit se faire dans les onglets détenteurs du nom concerné uniquement

Cas de force majeure

Mais bien d’accord avec toi il est à utiliser avec parcimonie

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.