Userform / Macros à faire correspondre avec noms feuille

Bonjour,

Je suis en difficulté sur la création d'un fichier permettant la saisie de données, via Userform.

Il y a plusieurs zones (A, B, C, D, E, etc.)

Parmi ces zones, différents type d'interventions (T, R, F, ...)

Et des parcelles, selon la zone.

_____

Chaque feuille Excel, correspond à 1 type d'intervention au sein d'1 zone.

Exemple :

Zone A, intervention R => nom de la feuille = RZA

Zone B, intervention F => nom de la feuille = FZB

etc.

____

Bref, dans l'idée je vais avoir plusieurs feuilles différentes.

Mais là où je bloque, c'est sur le Userform.

J'aimerais qu'1 seul Userform soit capable de valider les données selon chaque type (Zone ou Intervention)

Sachant que je vais garder la même logique sur les noms de feuille, est-ce possible ? Sinon ça veut dire... de faire 1 userform par feuille, le fichier va exploser non?

__

J'ai peur que ma demande ne soit pas bien comprise, je vous transmets un petit fichier de base (où seule 2 zones existent (A et B), et 3 interventions (T, R et F))

Ne pas s'attarder sur les éventuelles coquilles, tout est en chantier. (cependant je suis preneur de chaque conseils)

Merci beaucoup pour votre aide.

Bien cordialement.

Bonjour

J'aimerais qu'1 seul Userform soit capable de valider les données selon chaque type (Zone ou Intervention)

Avec une USERFORM cela est possible si la structure de vos feuilles est identique.

Est-ce que dans la feuille BDD la liste type ne devrait pas avoir un T aussi ?

Est-ce que dans la feuille BDD la liste type ne devrait pas avoir un T aussi ?

Bonjour Dan,

Oui tout à fait, c'est un oubli de ma part. (Fichier original mis à jour)

La structure des feuilles sera toujours la même, le nom sera toujours :

<type d'intervention> <zone>

Merci :)

Cordialement.

Bonjour,

Dans l'USF faites ceci :
1. Tout en haut de vos codes, ajoutez cette ligne (juste au dessous de Dim current...)

Dim feuille As String

2. Remplacez la sub initialize par celle ci-dessous

Private Sub UserForm_Initialize()

Call buildCalendar

With Sheets("BDD")
    ComboBox1.List = .ListObjects("Liste_Zone").DataBodyRange.Value
    ComboBox2.List = .ListObjects("Type_Inter").DataBodyRange.Value
    For i = 1 To 4
        Controls("CheckBox" & i).Caption = .Range("A" & i + 1).Value
    Next i
End With
End Sub

3. Dans l'USF, ajoutez ce code

Private Sub ComboBox2_Change()
Dim TS As ListObject
Dim i As Byte

If ComboBox1.ListIndex = -1 Or ComboBox2.ListIndex = -1 Then
    MsgBox "veuillez compléter la zone et le type"
    Exit Sub
End If
ComboBox3.Clear

feuille = ComboBox2.Value & "Z" & ComboBox1.Value
On Error Resume Next
Set TS = Sheets(feuille).ListObjects("S" & feuille)

If TS Is Nothing Then MsgBox ("Vérifiez que :" & vbCrLf & vbCrLf & _
    "1. la feuille " & feuille & " existe dans le fichier " & vbCrLf & _
    "2. le tableau structuré S" & feuille & " est défini dans le gestionnaire de noms !"), , "Problème feuille ou Tableau structuré": Exit Sub

ComboBox3.List = TS.ListColumns(1).DataBodyRange.Value
End Sub

Les feuilles doivent toujours être nommées en 3 lettres et doivent toujours avoir un Z en deuxième lettre.
Les tableaux structurés doivent être nommés en B7:Dx doivent être nommés dans le gestionnaire de noms en commençant par un S.
Si la feuille ou le nom du tableau structuré n'est pas défini, le code vous enverra un message pour vous le signaler.
La combobox3 "Parcelles" est complétée sur base du choix de la combobox2 (Type)

Faites un test

NB : ne repostez pas votre fichier, inutile d'alourdir le forum et j'ai le votre comme fichier de travail que je complète sur base de vos commentaires

Excellent ! Pour un premier test c'est génial.

J'ai simplement adapté le Ajouter_Click() comme ceci :

Set tb = Sheets(feuille).ListObjects(feuille)

Merci infiniment.

Cordialement.

J'ai simplement adapté le Ajouter_Click() comme ceci :

Oui c'est bon cela. Je n'avais pas regardé ce code là

Si besoin d'autre chose, dites moi

Cordialement

Merci Dan,

J'ai toujours des questions mais ça ne concerne plus ce sujet particulièrement.

Je bloque sur le Spinbutton et sur les check box. Je suppose qu'il est préférable de monter un nouveau sujet avec un nom explicite.

Je posterais demain mes nouvelles questions.

Cordialement.

Je bloque sur le Spinbutton et sur les check box. Je suppose qu'il est préférable de monter un nouveau sujet avec un nom explicite.

C'est peut-être simple si vous m'expliquez votre souci avec ces deux objets

Pour le Spinbutton, je souhaitais faire en sorte que ça fasse +0.25 ou -0.25.

Avec ce code :

Private Sub SpinButton1_SpinDown()
    TextBox2.Text = Val(TextBox2.Text) - 0.25
End Sub
Private Sub SpinButton1_SpinUp()
    TextBox2.Text = Val(TextBox2.Text) + 0.25
End Sub

ça augmente bien de 0.25 mais ça ne va pas plus loin que ça.

Pourtant avec la valeur 1 ça fonctionne.

__________

Pour les Checkbox je souhaitais simplement faire en sorte que, si la case est cochée, cela renseigne la ou les valeurs dans le tableau structuré.

Dans ce style :

If CheckBox1.Value = True Then .Item(ligne, 4) = CheckBox1.Caption
If CheckBox1.Value = True And CheckBox2.Value = True Then .Item(ligne, 4) = CheckBox1.Caption & " " & CheckBox2.Caption 

Mais c'est vraiment pas la bonne méthode. D'autant plus que je vais probablement rajouter des noms.

Merci

Cordialement.

Bonjour

Pour le Spinbutton, je souhaitais faire en sorte que ça fasse +0.25 ou -0.25.

Faites ceci dans votre USF

1. Code Initialize : ajoutez cette ligne juste au-dessus du END SUB

TextBox2.Value = 0

2. Dans les deux code SpinButton1, remplacez l'instruction VAL par CDBL


Pour les Checkbox je souhaitais simplement faire en sorte que, si la case est cochée, cela renseigne la ou les valeurs dans le tableau structuré.

Dans le code Private Sub Ajouter_Click(),

1. Ajoutez ces deux lignes au début du code

Dim intervenant As String
Dim i As Byte

2. Remplacez cette ligne

.Item(ligne, 4) = CheckBox1.Caption.....

par ceci

For i = 1 To 4
    If Controls("Checkbox" & i) = True Then
     If intervenant = vbNullString Then
        intervenant = Controls("Checkbox" & i).Caption
     Else: intervenant = intervenant & ", " & Controls("Checkbox" & i).Caption
    End If
Next i
.Item(ligne, 4) = intervenant

Faites un test et dites moi

Bonjour Dan,

Pour le spinbutton impeccable, ça fonctionne du premier coup

Pour les checkbox j'ai eu une erreur :

"Erreur de compilation : Next sans For"

J'ai simplement rajouter un "End If" comme ceci :

For i = 1 To 4
    If Controls("Checkbox" & i) = True Then
     If intervenant = vbNullString Then
        intervenant = Controls("Checkbox" & i).Caption
     Else: intervenant = intervenant & ", " & Controls("Checkbox" & i).Caption
    End If

   END IF

Next i
.Item(ligne, 4) = intervenant

Et ça fonctionne

C'est parfait, merci beaucoup pour toute cette aide !

Bien cordialement.

EDIT : en fait j'ai un petit problème sur les 0.25.

Dans le tableau structuré, il met bien 0.25 mais ce n'est pas considéré comme une valeur (ça ne s'additionne pas par exemple)

Il me sort du texte apparemment.

Pour les checkbox j'ai eu une erreur : "Erreur de compilation : Next sans For"
J'ai simplement rajouter un "End If" comme ceci

Oups, oui exact, je n'avais pas retesté avant de poster. Mais vous avez bien fait en rajoutant ce END IF qui manquait


Dans le tableau structuré, il met bien 0.25 mais qui ce n'est pas considéré comme une valeur (ça ne s'additionne pas par exemple)

Une textbox renvoie toujours du texte. Modifiez la ligne comme ceci :

.Item(ligne, 3) = CDbl(TextBox2.Value)

Impeccable, ça fonctionne

Merci mille fois!

Cordialement.

Rechercher des sujets similaires à "userform macros correspondre noms feuille"