liens entre feuilles pour faciliter saisies avec liste déroulante

Kracoucas

XLDnaute Nouveau
Bonjour,
J'aimerai à partir de deux feuilles bases faciliter la partie saisie pour que les cellules jaunes de la feuilles saisie puissent se remplir facilement à l'aide éventuellement de liste déroulante semis automatique.
Est ce possible.Merci pour votre aide.
Mathieu
 

Pièces jointes

  • Base test1.xlsx
    16.7 KB · Affichages: 127

Dugenou

XLDnaute Barbatruc
Re : liens entre feuilles pour faciliter saisies avec liste déroulante

Bonjour,

Voir dans la PJ si c'est ce que tu recherches.

Il faut nommer les zones de données pour tes listes
puis données/validation/liste

Cordialement
 

Pièces jointes

  • listes deroulantes.xls
    41 KB · Affichages: 183
  • listes deroulantes.xls
    41 KB · Affichages: 179
  • listes deroulantes.xls
    41 KB · Affichages: 182

hoerwind

XLDnaute Barbatruc
Re : liens entre feuilles pour faciliter saisies avec liste déroulante

Bonjour et bienvenu sur le forum,

Excuses pour le retard de la réponse, mais je n'avais pas vu ta question hier.

Si entre-temps tu avais consulté les anciens messages affichés dans le bas de cette page sous "Discussions similaires" tu aurais déjà eu réponse à ta question.

En pièce jointe un petit exemple.
La plage Parcelles!A:A a été nommée de façon dynamique (menu Insertion - Nom - Définir), la longueur de la liste s'adapte au nombre de valeurs contenues dans cette colonne.
En Saisies!A2 une liste de validation (menu Données - Validation) te permet de faire un choix.
Cette cellule (sans choix) peut être copiée vers le bas pour obtenir la même liste de choix sur les autres cellules.

Je te laisse faire à l'identique pour les autres colonnes sur lesquelles tu souhaites implanter des listes de validation.

Edition : re ... salut Dugenou !
 

Pièces jointes

  • ListeValidation.xlsx
    15 KB · Affichages: 149

Kracoucas

XLDnaute Nouveau
Re : liens entre feuilles pour faciliter saisies avec liste déroulante

Merci à tous,
Voilà ce que j'ai fait en cherchant de partout.
Dites moi si vous connaissez une manière plus simple ou plus efficace.
Merci encore pour votre aide.
 

Pièces jointes

  • Copie de Base test2.xlsx
    19.1 KB · Affichages: 134

Dugenou

XLDnaute Barbatruc
Re : liens entre feuilles pour faciliter saisies avec liste déroulante

Salut,

Pour moi il n'y a rien à ajouter ! Sûr que Hoerwind trouvera encore des améliorations. Vraiment top la méthode "dynamique" !

Peut être certaines cellules peuvent être calculées : quand tu as choisi la ville et le propriétaire on peut afficher les parcelles ou cépages correspondants.

Tiens j'y pense : il y a dans les fichiers des listes de Monique (voir en téléchargement je pense) des listes enchainées : le choix dans une cellule change la liste dans la cellule suivante.

Bonne découverte !
 

hoerwind

XLDnaute Barbatruc
Re : liens entre feuilles pour faciliter saisies avec liste déroulante

Re,

Si tu tries Parcelles!A:E sur la colonne A, la recherche sous la liste de validation sera plus aisée, car par ordre alphabétique.

Mais tu peux également créer une liste de validation qui n'affiche que les villes qui commencent par une lettre préalablement saisie en Saisies!A:A.
Fais une recherche sous les anciens messages, tu trouveras plusieurs exemples.
Consulte aussi (sur le net) le site de Jacques Boisgontier.
 

PMO2

XLDnaute Accro
Re : liens entre feuilles pour faciliter saisies avec liste déroulante

Bonjour,

Si le VBA ne vous fait pas peur voici un exemple un peu compliqué.
L'idée est de contrôler l'évènement SelectionChange de la feuille Saisies pour que des listes (DropDown)
se construisent dynamiquement.

1) dans la fenêtre de code de la feuille "Saisies" copiez le code suivant

Code:
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
Call DelListe
With Target
  If .Column = 5 Or .Column > 9 Then Exit Sub
  If .Row = 1 Then Exit Sub
  If .Rows.Count > 1 Or .Columns.Count > 1 Then Exit Sub
End With
Call AddListe(Target)
End Sub

2) dans un module standard copiez le code suivant

Code:
'### Constantes à adapter à votre usage ###
Const PRODUITS As String = "Produits"
Const PARCELLES As String = "Parcelles"
Public Const COLONNE_LISTBOX As Long = 3
'##########################################

Dim var

Sub AddListe(R As Range)
Dim numCol&
Dim lastLig&
Dim i&
Dim Sh As Worksheet
Dim Sh2 As Worksheet
Dim R2 As Range
Dim S As Shape
Set Sh = R.Parent
numCol& = R.Column
If numCol& < 5 Then
  Set Sh2 = ThisWorkbook.Sheets(PARCELLES)
  lastLig& = Sh2.[a65536].End(xlUp).Row
  var = Sh2.Range("a2:d" & lastLig& & "")
  Set R2 = Sh2.Range(Sh2.Cells(2, numCol&), Sh2.Cells(lastLig&, numCol&))
ElseIf numCol& > 5 Then
  Set Sh2 = ThisWorkbook.Sheets(PRODUITS)
  lastLig& = Sh2.[a65536].End(xlUp).Row
  Set R2 = Sh2.Range("a2:h" & lastLig& & "")
  var = R2
  If numCol& = 6 Then i& = 8
  If numCol& = 7 Then i& = 2
  If numCol& = 8 Then i& = 5
  If numCol& = 9 Then i& = 7
  Set R2 = Sh2.Range(Sh2.Cells(2, i&), Sh2.Cells(lastLig&, i&))
End If
Set S = Sh.Shapes.AddFormControl(xlDropDown, _
   R.Left, R.Top, R.Width, R.Height)
S.ControlFormat.ListFillRange = Sh2.Name & "!" & R2.Address
S.OnAction = "DropDownSurClic"
S.Select
Selection.DropDownLines = 12
R.Select
End Sub

Sub DropDownSurClic()
Dim S As Shape
Dim DD As DropDown
Dim R As Range
Dim lig&
Dim T()
Dim i&
For Each S In ActiveSheet.Shapes
  If S.FormControlType = xlDropDown Then
    Set DD = S.OLEFormat.Object
    Exit For
  End If
Next S
lig& = Selection.Row
Set R = ActiveSheet.Range(Cells(lig&, 1), Cells(lig&, 4))
ReDim T(1 To 1, 1 To 4)
If Left(DD.ListFillRange, Len(PARCELLES)) = PARCELLES Then
  For i& = 1 To 4
    T(1, i&) = var(DD.ListIndex, i&)
  Next i&
Else
  T(1, 1) = var(DD.ListIndex, 8)
  T(1, 2) = var(DD.ListIndex, 2)
  T(1, 3) = var(DD.ListIndex, 5)
  T(1, 4) = var(DD.ListIndex, 7)
  Set R = R.Offset(0, 5)
End If
R = T
Call DelListe
Application.EnableEvents = False
Selection.Offset(1, 0).Select
Application.EnableEvents = True
End Sub

Sub DelListe(Optional dummy As Byte)
Dim S As Shape
For Each S In ActiveSheet.Shapes
  If S.FormControlType = xlDropDown Then
    S.Cut
  End If
Next S
End Sub

Cordialement.

PMO
Patrick Morange
 

kahatif

XLDnaute Nouveau
Re : liens entre feuilles pour faciliter saisies avec liste déroulante

Bonsoir à tous, je suis nouveau sur le forum et je voudrai vous demander de l'aide pour savoir si quelqu'un pouvait m'aider à rassembler une série d'adresse mail pour pouvoir les écrire en une seule fois. Sachant que les adresses que j'ai sont dans une même colonne.
Avec Excel, j'ai essayé de créer une deuxième colonne qui ne contient que des virgules mais je n'arrive pas à les fusionner touts dans une même cellules.
 

PMO2

XLDnaute Accro
Re : liens entre feuilles pour faciliter saisies avec liste déroulante

Bonjour dreamalain, bonjour à tous,

Pour la saisie semi-automatique sur 3 lettres une piste où j'utilise des ComboBox

1) copiez le code suivant dans la fenêtre de code de la feuille où s'effecturons les saisies (nommez cette feuille "Test")

Code:
Private Sub Worksheet_Deactivate()
Call DelComboBox
End Sub

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
Call DelComboBox
With Target
  If .Column > 9 Then Exit Sub
  If .Row = 1 Then Exit Sub
  If .Rows.Count > 1 Or .Columns.Count > 1 Then Exit Sub
End With
Call AddComboBox(Target)
End Sub

2) créez une feuille nommée "Base" et renseignez ces cellules sur 9 colonnes et plusieurs lignes
(la ligne 1 est considérée comme ligne de titres)

3) copiez le code suivant dans un module standard

Code:
'### Constantes à adapter ###
Const FEUILLE_BASE As String = "Base"
Const FEUILLE_TEST As String = "Test"
'############################

Const CBOX_NAME As String = "tempo_pmo"

Dim myCBox As clsCombBoxEvents
Dim CB As MSForms.ComboBox
Dim OL As OLEObject

Sub AddComboBox(R As Range)
Dim PlageData As Range
Dim var
Dim T()
Dim i&
Dim Col&
Dim cpt&
Col& = R.Column
Set PlageData = Sheets(FEUILLE_BASE).UsedRange
Set PlageData = PlageData.Offset(1, 0).Resize(PlageData.Rows.Count - 1, PlageData.Columns.Count)
var = PlageData

For i& = 1 To UBound(var, 1)
  If var(i&, Col&) <> "" Then
    cpt& = cpt& + 1
    ReDim Preserve T(1 To 1, 1 To cpt&)
    T(1, cpt&) = var(i&, Col&)
  End If
Next i&
Set OL = Sheets(FEUILLE_TEST).OLEObjects.Add(ClassType:="Forms.ComboBox.1", _
      Left:=R.Left, Top:=R.Top, Width:=R.Width, Height:=R.Height)
OL.Name = CBOX_NAME
Set CB = OL.Object
With CB
  .MatchEntry = fmMatchEntryComplete
  .List = Application.WorksheetFunction.Transpose(T)
  .ColumnCount = 1
  If UBound(T, 2) > 19 Then
    .ListRows = 20
  Else
    .ListRows = UBound(T, 2)
  End If
End With
'--- Ne pas initialiser la classe directement mais hors de cette procédure ---
Application.OnTime Now + TimeValue("00:00:00"), "InitEvents"

'########################################################
'### Pour éviter le bug de CB.DropDown, on active     ###
'### l'OLEObject et on simule l'appui de la touche F4 ###
ActiveSheet.OLEObjects(CBOX_NAME).Activate
SendKeys "{F4}"
'########################################################
End Sub

Sub InitEvents(Optional dummy As Byte)
Set myCBox = New clsCombBoxEvents
Set myCBox.Cbo = ActiveSheet.OLEObjects(CBOX_NAME).Object
End Sub

Sub DelComboBox(Optional dummy As Byte)
Dim OL As OLEObject
For Each OL In Sheets(FEUILLE_TEST).OLEObjects
  If OL.Name = CBOX_NAME Then
  OL.Activate
    OL.Cut
    Set CB = Nothing
  End If
Next OL
End Sub

4) créez un module de classe et renommez-le clsCombBoxEvents
(dans le VBE menu Affichage/Explorateur de projets, sélectionnez le module de classe et faites F4 puis changez la propriété (Name) )

5) copiez le code suivant dans la fenêtre de code du module de classe

Code:
Public WithEvents Cbo As MSForms.ComboBox

Private Sub Cbo_Click()
CelluleActive = Cbo.Value
Call DelComboBox
End Sub

Private Function CelluleActive() As Range
Set CelluleActive = ActiveCell
End Function


Comme c'est plutôt compliqué, je mets un exemple en pièce jointe.

Cordialement.

PMO
Patrick Morange
 

Discussions similaires