Renseigner une cellule si une autre est renseignée
Résolu
cs_douda06
Messages postés
67
Date d'inscription
Statut
Membre
Dernière intervention
-
cs_douda06 Messages postés 67 Date d'inscription Statut Membre Dernière intervention -
cs_douda06 Messages postés 67 Date d'inscription Statut Membre Dernière intervention -
A voir également:
- Renseigner une cellule si une autre est renseignée
- Excel cellule couleur si condition texte - Guide
- Aller à la ligne dans une cellule excel - Guide
- Bloquer une cellule excel - Guide
- Diviser une cellule excel en deux horizontalement ✓ - Forum Excel
- Comment colorer une cellule excel en fonction du contenu d'une autre cellule - Forum Bureautique
2 réponses
Bonjour,
Tout d'abord, dans le code "appelant" de la fonction, il faudra référencer 2 paramètres : les numéros des colonnes "Liste" et "type".
Comme ceci :
Nota : Si tu n'es pas sur à 100% de trouver les deux valeurs "Liste" et "Type" en ligne 1 de ta feuille, il faudra faire différemment.
Et la fonction InscriCombo :
Tout d'abord, dans le code "appelant" de la fonction, il faudra référencer 2 paramètres : les numéros des colonnes "Liste" et "type".
Comme ceci :
Dim ColList As Integer, ColType As Integer With Sheets("nom_de_ta_feuille") ColList = .Rows(1).Find("Liste").Column ColType = .Rows(1).Find("Type").Column End With Call InscriCombo("nom_de_ta_feuille", ColList, ColType)
Nota : Si tu n'es pas sur à 100% de trouver les deux valeurs "Liste" et "Type" en ligne 1 de ta feuille, il faudra faire différemment.
Et la fonction InscriCombo :
Sub InscriCombo(NomFeuil As String, Liste As Integer, Type As Integer) Dim Lig As Long, DL As Long With Sheets(NomFeuil) DL = .Columns(Liste).Find("*", , , , xlByColumns, xlPrevious).Row If DL = 1 Then Exit Sub For Lig = 2 to DL If .Cells(Lig, Liste) <> "" Then .Cells(Lig, Type) = "Combobox" Next Lig End With End Sub
Salut,
1- modifier ta sub d'appel comme ceci :
2- InscriCombo devient :
3- Ajouter la fonction :
1- modifier ta sub d'appel comme ceci :
Public Sub CreationFeuille() ' Crée les feuilles Dim w As Worksheet 'feuille Dim r As Range 'plage de cellules Dim c As Range 'cellule Dim ColList As Integer Dim ColType() Application.ScreenUpdating = False 'Définir la plage de titres contenant les préfixes du nom des feuilles With Worksheets("Donnees").Cells(1, colNom) Set r = .Resize(1, .End(xlToRight).Column - .Column + 1) End With 'Ajouter et mettre à jour les feuilles For Each c In r.Cells '- ajouter la feuille Set w = AjoutFeuille(c.Value) '- remplir la feuille Call RemplirFeuille(w, c) 'créer le code événementiel 'Call CreerCode(w.CodeName) '- mettre à jour la feuille X Call MàjFeuilleX(c.Value) Call CollectColType(w, ColType()) Call InscriCombo(w.Name, ColList, ColType()) Next c Application.ScreenUpdating = True MsgBox "feuilles crées" End Sub
2- InscriCombo devient :
Private Sub InscriCombo(shName As String, List As Integer, FType()) Dim Lig As Long, DL As Long, Col As Integer With Sheets(shName) DL = .Columns(List).Find("*", , , , xlByColumns, xlPrevious).Row If DL = 1 Then Exit Sub For Lig = 2 To DL If .Cells(Lig, List) <> "" Then For Col = LBound(FType) To UBound(FType) .Cells(Lig, FType(Col)) = "Picklist" Next End If Next Lig End With End Sub
3- Ajouter la fonction :
Private Sub CollectColType(sh As Worksheet, Tb()) Dim Col, i As Integer With sh For Each Col In .UsedRange.Columns If .Cells(1, Col.Column) Like "*Type*" Then i = i + 1: ReDim Preserve Tb(i): Tb(i) = Col.Column End If Next End With End Sub
Ma faute...
En modifiant le code j'ai omis de te remettre le code donnant le numéro de la colonne Listes.
Donc, si List = 0, DL = .Columns(List).Find("*", , , , xlByColumns, xlPrevious).Row renvoie une erreur, la colonne 0 n'existant pas...
Voici les deux fonctions modifiées :
En modifiant le code j'ai omis de te remettre le code donnant le numéro de la colonne Listes.
Donc, si List = 0, DL = .Columns(List).Find("*", , , , xlByColumns, xlPrevious).Row renvoie une erreur, la colonne 0 n'existant pas...
Voici les deux fonctions modifiées :
Public Sub CreationFeuille() ' Crée les feuilles Dim w As Worksheet 'feuille Dim r As Range 'plage de cellules Dim c As Range 'cellule Dim ColList As Integer Dim ColType() Application.ScreenUpdating = False 'Définir la plage de titres contenant les préfixes du nom des feuilles With Worksheets("Donnees").Cells(1, colNom) Set r = .Resize(1, .End(xlToRight).Column - .Column + 1) End With 'Ajouter et mettre à jour les feuilles For Each c In r.Cells '- ajouter la feuille Set w = AjoutFeuille(c.Value) '- remplir la feuille Call RemplirFeuille(w, c) 'créer le code événementiel 'Call CreerCode(w.CodeName) '- mettre à jour la feuille X Call MàjFeuilleX(c.Value) Call CollectColType(w, ColList, ColType()) Call InscriCombo(w.Name, ColList, ColType()) Next c Application.ScreenUpdating = True MsgBox "feuilles crées" End Sub
Private Sub CollectColType(sh As Worksheet, intList As Integer, Tb()) Dim Col, i As Integer With sh intList = .Rows(1).Cells.Find("Listes").Column For Each Col In .UsedRange.Columns If .Cells(1, Col.Column) Like "*Type*" Then i = i + 1: ReDim Preserve Tb(i): Tb(i) = Col.Column End If Next End With End Sub
Merci pour ta réponse, je l'ai testé et ça marche.
Une autre question stp, si on a plusieurs colonnes Type? ça n'affiche "Combobox" que pour la premiere colonne Type. Si je veux appliquer cette condition à toutes les colonnes qui terminent par "Type" comment faire?
J'ai ajouté un asterisque avant type comme ça:
ColType = .Rows(1).Find("*Type").Column
Mais il parait que je dois l'ajouter dans une boucle, non?
En cas de difficulté n'hésite pas à revenir.
Sinon, tu peux également boucler sur toutes les cellules de ta ligne d'entête et stocker les bonnes colonnes dans une variable tableau ColType()...
Pour être plus précise je t'ai mis un fichier exemple sur cjoint:
https://www.cjoint.com/?3Bntq6fJSXv
Peux tu stp m'aider?
Oui, mais pas avant lundi.
Rappelle le moi stp.
Bon week end
a+
:)