Modifier nom avec un USF dans colonnes masquées

Résolu
marcelio Messages postés 64 Date d'inscription   Statut Membre Dernière intervention   -  
Le Pingou Messages postés 12372 Date d'inscription   Statut Contributeur Dernière intervention   -

Bonjour le Forum,
Dans mon fichier j’ai un USF qui me permet de modifier des noms (sur des colonnes) sur différentes feuilles.
Celui-ci fonctionne bien.
J’ai un 2ème fichier qui est exactement le même, mais qui a les colonnes masquées.
Le souci c’est que je n’arrive pas à trouver le code me permettant de faire fonctionner mon code avec les colonnes masquées.
Dans mon fichier (que j'arrive pas à vous joindre) les colonnes (en jaune) ne sont pas masquées, juste pour que vous les voyiez.
Les feuilles sont protégées mais sans mot de passe.
Merci d’avance.
Marcelio

Private Sub CommandButton2_Click()
If TextBox4 = "" Then Exit Sub
If MsgBox("Remplacer " & TextBox4 & " par " & TextBox2, vbExclamation + vbYesNo, "CONFIRMATION") = vbNo Then Exit Sub
nom = TextBox4
Set c = Sheets("Mois").[AA1:AA100].Find(nom, LookIn:=xlValues, Lookat:=xlWhole)
On Error Resume Next
c.Value = TextBox2
 Set c = Nothing
 
nom = TextBox4
Set c = Sheets("Mois").[BK1:BK100].Find(nom, LookIn:=xlValues, Lookat:=xlWhole)
On Error Resume Next
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:EK22].Find(nom, LookIn:=xlValues, Lookat:=xlWhole)
On Error Resume Next
        c.Value = TextBox2
        Set c = Nothing
End If
Next
UserForm_Initialize
End Sub

Private Sub TextBox2_KeyUp(ByVal KeyCode As MSForms.ReturnInteger, ByVal Shift As Integer)
CommandButton2.Enabled = IIf(TextBox4 = TextBox2, False, True)
End Sub

Private Sub CommandButton3_Click()
Unload Me
End Sub

Private Sub ListBox1_Change()
If kit = True Then Exit Sub
TextBox4 = ListBox1.List(ListBox1.ListIndex, 0)
TextBox2 = TextBox4
End Sub

Private Sub UserForm_Initialize()
With Feuil1
ListBox1.List = .Range("BK1:BK" & .[BK100].End(3).Row).Value
End With
End Sub
A voir également:

18 réponses

danielc0 Messages postés 2110 Date d'inscription   Statut Membre Dernière intervention   260
 

Bonjour,

Il faut quand même fournir quelques explications :

Qu'est ce que représente "c" ? (c.Value = TextBox2)

Qu'est-ce qu'il faut mettre dans textbox4 ? Dans Listbox1 ?

Daniel


0
Le Pingou Messages postés 12372 Date d'inscription   Statut Contributeur Dernière intervention   1 475
 

Bonjour,

Pour joindre le fichier , sur : https://www.swisstransfer.com/fr

et poster le lien.


0
Le Pingou Messages postés 12372 Date d'inscription   Statut Contributeur Dernière intervention   1 475
 

Bonjour,

Vous dites: Les feuilles sont protégées mais sans mot de passe.

De ce fait il faut  supprimer la protection au début du code et la remettre à la fin!

Private Sub CommandButton2_Click()

Sheets("Feuil1").Unprotect

    
'    ...votre code


Sheets("Feuil1").Protect

    
End Sub

0
marcelio Messages postés 64 Date d'inscription   Statut Membre Dernière intervention  
 

Bonjour,

Dans la Listbox1 tous les noms à modifier.

La textbox4 : nom avant la modif (Ancien Nom)

La textbox2 : ou le nom est modifier (Nouveau nom)

Merci à Le Pingou pour joindre le fichier.

https://www.swisstransfer.com/d/8faaa93e-d965-42e1-aaf2-d8c800ef3ccf

Merci

Marcelio


0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
danielc0 Messages postés 2110 Date d'inscription   Statut Membre Dernière intervention   260
 

Je n'ai pas compris. J'ai masqué Semaine01. Le remplacement se fait normalement. Donne un exemple de dysfonctionnement.

Daniel


0
marcelio Messages postés 64 Date d'inscription   Statut Membre Dernière intervention  
 

Ce n'est pas les feuilles qu'il faut masquer, mais seulement les colonnes en jaune.

Marcelio


0
Le Pingou Messages postés 12372 Date d'inscription   Statut Contributeur Dernière intervention   1 475
 

Bonjour,

C'est étonnant car sur poste 1 vous dites la feuille et pour les colonnes : Masquées!

De quelle colonne et sur quel feuille ?

0
marcelio Messages postés 64 Date d'inscription   Statut Membre Dernière intervention  
 

Je dis les colonnes, mais pas la feuille.

Les colonnes en jaune à masquées sur feuille Mois et toutes les feuilles semaine

Dans mon fichier j’ai un USF qui me permet de modifier des noms (sur des colonnes) sur différentes feuilles.

J’ai un 2ème fichier qui est exactement le même, mais qui a les colonnes masquées.

Marcelio


0
Le Pingou Messages postés 12372 Date d'inscription   Statut Contributeur Dernière intervention   1 475
 

Bonjour,

Merci du retour.

Voir fichier :https://www.swisstransfer.com/d/c98466c9-31aa-4da2-9a2d-4f2b0048536f

Essayer en modifiant le code après  : nom = TextBox4 et  Set c = Nothing

Private Sub CommandButton2_Click()
If TextBox4 = "" Then Exit Sub
If MsgBox("Remplacer " & TextBox4 & " par " & TextBox2, vbExclamation + vbYesNo, "CONFIRMATION") = vbNo Then Exit Sub
nom = TextBox4
Set c = Sheets("Mois").[AA1:AA100].Find(nom, LookIn:=xlValues, Lookat:=xlWhole)
On Error Resume Next
c.Value = TextBox2
 Set c = Nothing
 
nom = TextBox4
Columns("BK").EntireColumn.Hidden = False
Set c = Sheets("Mois").Range("BK1:BK100").Find(nom, LookIn:=xlValues, Lookat:=xlWhole)
'Set c = Sheets("Mois").Columns("BK").Find(What:=nom, Lookat:=xlWhole)
On Error Resume Next
c.Value = TextBox2
 Set c = Nothing
Columns("BK").EntireColumn.Hidden = True

0
marcelio Messages postés 64 Date d'inscription   Statut Membre Dernière intervention  
 

J'ai masquer les colonnes jaunes dans les feuilles semaine, et j'ai fait des tests.

Et j'ai rajouté le code suivant pour la colonne AA pour la feuille Mois

nom = TextBox4
Columns("AA").EntireColumn.Hidden = False
Set c = Sheets("Mois").[AA1:AA100].Find(nom, LookIn:=xlValues, Lookat:=xlWhole)
On Error Resume Next
c.Value = TextBox2
 Set c = Nothing
Columns("AA").EntireColumn.Hidden = True

Tout fonctionne correctement pour la feuille Mois

Pour les feuilles semaine j'ai rajouté le code suivant, mais cela ne fonctionne pas.

Columns("DJ:EK").EntireColumn.Hidden = False
For k = 1 To Sheets.Count
If Left(Sheets(k).Name, 7) = "semaine" Then
Set c = Sheets(k).[DJ13:EK22].Find(nom, LookIn:=xlValues, Lookat:=xlWhole)
On Error Resume Next
        c.Value = TextBox2
        Set c = Nothing
Columns("DJ:EK").EntireColumn.Hidden = False

Marcelio

0
Le Pingou Messages postés 12372 Date d'inscription   Statut Contributeur Dernière intervention   1 475
 

Bonjour,

Le code pour les feuilles (semaines) comme ceci:

For k = 1 To Sheets.Count
If Left(Sheets(k).Name, 7) = "semaine" Then
    Sheets(k).Unprotect
    Columns("DJ:EK").EntireColumn.Hidden = False
    Set c = Sheets(k).[DJ13:EK22].Find(nom, LookIn:=xlValues, Lookat:=xlWhole)
    On Error Resume Next
        c.Value = TextBox2
        Set c = Nothing
        Columns("DJ:EK").EntireColumn.Hidden = True
        Sheets(k).Protect
End If
Next


0
marcelio Messages postés 64 Date d'inscription   Statut Membre Dernière intervention  
 

Bonsoir,

J'ai masqué les colonnes jaunes dans les feuilles semaine.

Et cela n'a pas fonctionné.

Marcelio


0
Le Pingou Messages postés 12372 Date d'inscription   Statut Contributeur Dernière intervention   1 475
 

Bonjour,

Eh oui comme ce n'est pas mon code j'ai oublié une indication : ajouter l'instruction : (Sheets(k).) devant Columns.....

For k = 1 To Sheets.Count
If Left(Sheets(k).Name, 7) = "semaine" Then
    Sheets(k).Unprotect
    Sheets(k).Columns("DJ:EK").EntireColumn.Hidden = False
    Set c = Sheets(k).[DJ13:EK22].Find(nom, LookIn:=xlValues, Lookat:=xlWhole)
    On Error Resume Next
        c.Value = TextBox2
        Set c = Nothing
        Sheets(k).Columns("DJ:EK").EntireColumn.Hidden = True
        Sheets(k).Protect
End If
Next


0
marcelio Messages postés 64 Date d'inscription   Statut Membre Dernière intervention  
 

Bonjour Le Pingou et le forum,

Pour les feuilles semaine.

J'ai testé les derniers codes ceux-ci fonctionnent bien.

Mais j'ai fait un essai avec le même nom sur les 4 colonnes.

Et bizarrement seul le 1er a été modifié.

Seriez-vous pourquoi les 4 n'ont pas été modifiés.

Marcelio


0
Le Pingou Messages postés 12372 Date d'inscription   Statut Contributeur Dernière intervention   1 475
 

Bonjour,

Mais j'ai fait un essai avec le même nom sur les 4 colonnes.

La fonction "Find()" cherche le premier nom correspondant. Si vous avez plus d'un nom identique la fonction prendra toujours le premier.


0
danielc0 Messages postés 2110 Date d'inscription   Statut Membre Dernière intervention   260
 

Bonjour,

Essaie :

Private Sub CommandButton2_Click()
  Dim C As Range
  If TextBox4 = "" Then Exit Sub
  If MsgBox("Remplacer " & TextBox4 & " par " & TextBox2, vbExclamation + vbYesNo, "CONFIRMATION") = vbNo Then Exit Sub
  With Sheets("Mois")
    Set C = .[AA1:AA100].Find(Me.TextBox4.Value, , , xlWhole)
    If Not C Is Nothing Then C.Value = Me.TextBox2.Value
    Set C = .[BK1:BK100].Find(Me.TextBox4.Value, , , xlWhole)
    If Not C Is Nothing Then C.Value = Me.TextBox2.Value
  End With
  For k = 1 To Sheets.Count
  If Left(Sheets(k).Name, 7) = "semaine" Then
    With Sheets(k)
      .Unprotect
      For Each C In .[DJ13:EK22]
        If C.Value = Me.TextBox4 Then Debug.Print C.Address(0, 0)
        If C.Value = Me.TextBox4 Then C = Me.TextBox2.Value
      Next C
      .Protect
    End With
  End If
  Next
  UserForm_Initialize
End Sub

0
marcelio Messages postés 64 Date d'inscription   Statut Membre Dernière intervention  
 

Bonjour Daniel,

J'avais trouvé une autre solution, mais cela faisait beaucoup de code.

Du coup ton code est parfait, aucun bug et tout est modifié.

Je te remercie beaucoup de ton aide.

Merci à toi et merci aussi à Le Pingou de son aide.

Bon après-midi à tous les 2 et au forum.

Marcelio


0
marcelio Messages postés 64 Date d'inscription   Statut Membre Dernière intervention  
 

Bonjour Daniel et le forum,

Le fichier fonctionne super bien.

Mais si j'ai un seul nom dans la colonne BK j'ai un message d'erreur.

Aurais tu une solution à ce problème

Merci d'avanve

Marcelio


0
Le Pingou Messages postés 12372 Date d'inscription   Statut Contributeur Dernière intervention   1 475
 

Bonjour,

Juste au passage, modifié comme suit le code:

Private Sub UserForm_Initialize()
With Feuil1
ListBox1.List = .Range("BK1:BK" & 1 + .Range("BK1000").End(xlUp).Row).Value
End With
End Sub


0