Insertion liste non modifiable par un USF

rudymagny

XLDnaute Occasionnel
Bonsoir à tous,
Je viens pour une petite question sur un USF que j'ai effectué avec de grosses aides de la part des XLDnautes.

Voilà avec mon usf j'insere des données dans une feuille excel.
Aujourd'hui, je voudrais qu'une cellule comporte la donnée que j'ai mise dans la textbox de l'usf mais que je puisse la modifier ensuite dans la feuille excel grace à une sorte de combobox;

Dans mon exemple, il faudrait que la cellule de la colonne J soit égale au contenu de la combobox6 de l'usf mais que je puisse la modifier dans la feuille par les mêmes données de la combobox 6.
Je ne sais pas si je suis bien clair mais je met un fichier en exemple.

Merci d'avance
 

Pièces jointes

  • Question_XLD_liste_non_modifiable.zip
    48.1 KB · Affichages: 30
  • Question_XLD_liste_non_modifiable.zip
    48.1 KB · Affichages: 28
  • Question_XLD_liste_non_modifiable.zip
    48.1 KB · Affichages: 28
C

Compte Supprimé 979

Guest
Re : Insertion liste non modifiable par un USF

Bonsoir RudyMagny,

Si j'ai bien compris ta demande :D

J'ai créé une feuille "Params" que tu peux masquer, qui contient une liste des type de modification. Cette liste est nommée "TypeModif"

Dans le code VBA de ton USF, a chaque fois que tu insères une nouvelle ligne, une validation de donnée est créée.

La source étant : =TypeModif

Ce qui te permet de modifier la valeur sur ta feuille à partir d'une liste.

J'espère avoir été assez clair.

Voilà ;)
 

Pièces jointes

  • Question_XLD_liste_non_modifiable.zip
    53.8 KB · Affichages: 26
  • Question_XLD_liste_non_modifiable.zip
    53.8 KB · Affichages: 26
  • Question_XLD_liste_non_modifiable.zip
    53.8 KB · Affichages: 26

Spitnolan08

XLDnaute Barbatruc
Re : Insertion liste non modifiable par un USF

Bonsoir

ton fichier en retour si bien compris

Cordialement

Edit: Bonsoir BrunoM45, pas rafraichi... J'étais au phone...
Edit 2 : Et en plus on fait la même chose sauf que j'ai mis la liste de validation dans la feuille du mois et que je suis parti du principe que la 1ère liste de validation existait sur la 1ère ligne. Je ne fais donc qu'une recopie de la cellule précédente.
 

Pièces jointes

  • Question_XLD_liste_non_modifiable2.zip
    47.1 KB · Affichages: 26
Dernière édition:

rudymagny

XLDnaute Occasionnel
Re : Insertion liste non modifiable par un USF

Bonjour à vous deux, le forum.
Bon ça y est j'ai appliqué à mon appli et c'est bon merci beaucoup.

Maintenant que je peux changer ma cellule, je voudrais que lorsque je change celle ci, une action de ce type opère:


Private Sub Worksheet_SelectionChange(ByVal Target As Range)
If Application.Intersect(Target, Range("J4:J300")) Is Nothing Then
If Target.Value Like "Ouvrage Neuf ou Refonte BT" Then
With Target.Range("L" & L & ":O" & L)
.HorizontalAlignment = xlCenter
.VerticalAlignment = xlBottom
.WrapText = False
.Orientation = 0
.AddIndent = False
.ShrinkToFit = False
.MergeCells = False
.Font.ColorIndex = 3
End With
End If
Exit Sub
End If
End Sub

Mais je ne vois pas comment récupéer le "L" qui correspond à la ligne que j'ai modifié.

J'espère être clair.
Merci d'avance à vous.
 
C

Compte Supprimé 979

Guest
Re : Insertion liste non modifiable par un USF

Salut Rudymagny,

L'utilisation de : Worksheet_SelectionChange(ByVal Target As Range)
n'est pas correcte puisque les tests seront exécutés à chaque déplacement vers une autre cellule !

Il faut mieux utiliser pour le cas, l'évènement : Worksheet_Change(ByVal Target As Range)

Ce qui pose un autre souci, c'est que le code devra être mis dans chaque feuille de mois (Janvier, Février, etc ...)

Une solution, il faut mettre dans ThisWorkbook, le code suivant :
Code:
Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Range)
  Dim NSh As String, VMois As String
  NSh = Sh.Name
  VMois = "Janvier Février Mars Avril Mai Juin Juillet Août Septembre Octobre Novembre Décembre"
  ' Vérifie que l'on a fait la modif sur une feuille de Mois
  If InStr(1, VMois, NSh) = 0 Then Exit Sub
  ' Vérifie si c'est dans la colonne J
  If Not Intersect(Target, Sh.Range("J4:J300")) Is Nothing Then
    ' Vérifie si il s'agit de Ouvrage neuf
    If Target.Value Like "Ouvrage Neuf ou Refonte BT" Then
      ' Mise en forme des cellules
      With Sh.Range("L" & Target.Row & ":O" & Target.Row)
        .HorizontalAlignment = xlCenter
        .VerticalAlignment = xlBottom
        .WrapText = False
        .Orientation = 0
        .AddIndent = False
        .ShrinkToFit = False
        .MergeCells = False
        .Font.ColorIndex = 3
      End With
    End If
  End If
End Sub

Voili, voilà ;)

A+
 

rudymagny

XLDnaute Occasionnel
Re : Insertion liste non modifiable par un USF

Bonsoir à tous,
Je relance ce fil car ma question est à ce sujet.
Je remercie encore brunoM45 pour son aide.

Je vais être un peu chiant mais avec ce code, à chaque fois que j'insère une ligne ou que je supprime une ligne, j'ai une erreur :

Erreur d'exécution "13"
incompatibilité de type

à cette ligne:
If Target.Value Like "Ouvrage Neuf ou Refonte BT" Then

que puis je faire pour ne plus voir cette erreur?

pour historique, voici le code:

<code>
Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Range)
Dim NSh As String, VMois As String
NSh = Sh.Name
VMois = "Janvier Février Mars Avril Mai Juin Juillet Août Septembre Octobre Novembre Décembre Glissant"
' Vérifie que l'on a fait la modif sur une feuille de Mois
If InStr(1, VMois, NSh) = 0 Then Exit Sub
' Vérifie si c'est dans la colonne J
If Not Intersect(Target, Sh.Range("J4:J300")) Is Nothing Then

If Target.Value Like "Ouvrage Neuf ou Refonte BT" Then
With Sh.Range("L" & Target.Row & ":O" & Target.Row)
.HorizontalAlignment = xlCenter
.VerticalAlignment = xlBottom
.WrapText = False
.Orientation = 0
.AddIndent = False
.ShrinkToFit = False
.MergeCells = False
.Font.ColorIndex = 3
End With
End If
End If
End Sub
</code>

merci d'avance
 

rudymagny

XLDnaute Occasionnel
Re : Insertion liste non modifiable par un USF

Rebonjour à tous,

Je relance ce fil car je rencontre un problème très genant avec cette partie du code que BrunoM45 m'a gentillement donné:
Code:
Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Range)
  Dim NSh As String, VMois As String
  NSh = Sh.Name
  VMois = "Janvier Février Mars Avril Mai Juin Juillet Août Septembre Octobre Novembre Décembre"
  ' Vérifie que l'on a fait la modif sur une feuille de Mois
  If InStr(1, VMois, NSh) = 0 Then Exit Sub
  ' Vérifie si c'est dans la colonne J
  If Not Intersect(Target, Sh.Range("J4:J300")) Is Nothing Then
    ' Vérifie si il s'agit de Ouvrage neuf
    If Target.Value Like "Ouvrage Neuf ou Refonte BT" Then
      ' Mise en forme des cellules
      With Sh.Range("L" & Target.Row & ":O" & Target.Row)
        .HorizontalAlignment = xlCenter
        .VerticalAlignment = xlBottom
        .WrapText = False
        .Orientation = 0
        .AddIndent = False
        .ShrinkToFit = False
        .MergeCells = False
        .Font.ColorIndex = 3
      End With
    End If
  End If
End Sub

elle est placée dans ThisWorkbook.

Lorsque je l'ai ouvert au boulot, j'ai fait des modifs et tout fonctionnait.
Quand je l'ai réouvert, il me sortait des problèmes de chargement dll, et que je noe pouvais pas l'enregistrer.
Pour deviner pourquoi il plante, c'est pas simple, il ne me donne ni nom pour la dll ni d'autres infos.

y a t'il un moyen de faire autrement (en mettant un code dans chaque feuille concernée du classeur)?
A partir du moment ou j'ai retiré ce code, ça marche.

merci d'avance à vous xldiens.
 

rudymagny

XLDnaute Occasionnel
Re : Insertion liste non modifiable par un USF

J'ai bien une idée dans le genre mais peut être qu'il y a une autre façon de le faire?

Code:
Private Sub Worksheet_Change(ByVal Target As Range)
On Error Resume Next
  ' Vérifie si c'est dans la colonne J
  If Not Intersect(Target, Sheets("Janvier").Range("J4:J300")) Is Nothing Then
  
    If Target.Value Like "Ouvrage Neuf ou Refonte BT" Then
        With Sheets("Janvier").Range("L" & Target.Row & ":O" & Target.Row)
            .HorizontalAlignment = xlCenter
            .VerticalAlignment = xlBottom
            .WrapText = False
            .Orientation = 0
            .AddIndent = False
            .ShrinkToFit = False
            .MergeCells = False
            .Font.ColorIndex = 3
        End With
    End If
    
    If Target.Value Like "Modification type 1" Then
        With Sheets("Janvier").Range("L" & Target.Row)
            .HorizontalAlignment = xlCenter
            .VerticalAlignment = xlBottom
            .WrapText = False
            .Orientation = 0
            .AddIndent = False
            .ShrinkToFit = False
            .MergeCells = False
            .Font.ColorIndex = 3
        End With
        With Sheets("Janvier").Range("M" & Target.Row & ":N" & Target.Row)
            .HorizontalAlignment = xlCenter
            .VerticalAlignment = xlBottom
            .WrapText = False
            .Orientation = 0
            .AddIndent = False
            .ShrinkToFit = False
            .MergeCells = False
            .Font.ColorIndex = 55
        End With
        With Sheets("Janvier").Range("O" & Target.Row)
            .HorizontalAlignment = xlCenter
            .VerticalAlignment = xlBottom
            .WrapText = False
            .Orientation = 0
            .AddIndent = False
            .ShrinkToFit = False
            .MergeCells = False
            .Font.ColorIndex = 3
        End With
    End If
    
    If Target.Value Like "Modification type 2" Then
        With Sheets("Janvier").Range("L" & Target.Row & ":N" & Target.Row)
            .HorizontalAlignment = xlCenter
            .VerticalAlignment = xlBottom
            .WrapText = False
            .Orientation = 0
            .AddIndent = False
            .ShrinkToFit = False
            .MergeCells = False
            .Font.ColorIndex = 55
        End With
        With Sheets("Janvier").Range("O" & Target.Row)
            .HorizontalAlignment = xlCenter
            .VerticalAlignment = xlBottom
            .WrapText = False
            .Orientation = 0
            .AddIndent = False
            .ShrinkToFit = False
            .MergeCells = False
            .Font.ColorIndex = 3
        End With
    End If
    
    If Target.Value Like "Electre" Then
        With Sheets("Janvier").Range("L" & Target.Row & ":M" & Target.Row)
            .HorizontalAlignment = xlCenter
            .VerticalAlignment = xlBottom
            .WrapText = False
            .Orientation = 0
            .AddIndent = False
            .ShrinkToFit = False
            .MergeCells = False
            .Font.ColorIndex = 55
        End With
        With Sheets("Janvier").Range("N" & Target.Row & ":O" & Target.Row)
            .HorizontalAlignment = xlCenter
            .VerticalAlignment = xlBottom
            .WrapText = False
            .Orientation = 0
            .AddIndent = False
            .ShrinkToFit = False
            .MergeCells = False
            .Font.ColorIndex = 3
        End With
    End If
    
    If Target.Value Like "Panne TI" Then
        With Sheets("Janvier").Range("L" & Target.Row & ":O" & Target.Row)
            .HorizontalAlignment = xlCenter
            .VerticalAlignment = xlBottom
            .WrapText = False
            .Orientation = 0
            .AddIndent = False
            .ShrinkToFit = False
            .MergeCells = False
            .Font.ColorIndex = 55
        End With
    End If
  End If
End Sub
 
C

Compte Supprimé 979

Guest
Re : Insertion liste non modifiable par un USF

Salut rudymagny,

Une solution, peut-être :
1) Tu ouvres ton editeur VBA
2) Tu vas dans le menu -> Outils -> références

Là, tu regardes si quelque chose est noté : MANQUANT:Nom de l'activex
En sélectionnant la ligne ou est noté manquant, tu verras le chemin et le nom du fichier qui manque.

Voilà

A+
 

Discussions similaires

Réponses
19
Affichages
1 K
Réponses
4
Affichages
149

Statistiques des forums

Discussions
312 763
Messages
2 091 852
Membres
105 078
dernier inscrit
piqpat57