Bonjour,

Je voudrais créer une nouvelle feuille Excel grâce à VBA, qui serait en fait une nouvelle table d'une base de données.

Pour cela j'ai un userform qui contient une combobox qui demande le type de feuille que je veux ajouter, pour "typer" la feuille. Par exemple on va voir les feuilles/tables de type "GEST_" suivi du nom de la table de gestion.

Les types de feuilles sont répertoriés dans une feuille Excel appelée "GEST_TABLES_TYPE" , dont la colonne B contient le préfixe, comme " GEST_ " et la colonne C contient la signification du préfixe (par exemple "Table de gestion (permet de gérer les contraintes...)" ).

Dans la combobox l'utilisateur voit la liste des significations de préfixes. Il rajoute le reste du nom de table dans un champ. Lorsqu'il appuie sur un bouton "OK", la valeur choisie dans la combobox est stockée dans une variable typet et la valeur entrée dans le champ, dans une variable desc. Jusque là pas de problème, normalement je peux récupérer les valeurs.

Mais lorsque je fais un with sheets pour parcourir ma feuille de gestion de tables avec un for et if dedans, ça bloque au niveau du end if, et ça sans message d'erreur.

Au début j'avais un message qui m'affichait "type d'argument byref incompatible". J'ai réalisé que j'avais mal déclaré certaines variables et j'ai réctifié cela, mais maintenant il n'y a plus d'erreur, juste un surlignage jaune sur le end if... Je n'avais pas mis de Else avant, mais je l'ai rajouté en pensant que ça changerait quelque chose.. Apparemment ça ne change rien..

Voilà le code pour le userform :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
 
 
Option Explicit
 
 
Public prefixet As Variant
Public desc As String
Public Sub Bouton_OkTypeTable_Click()
 
        'déclaration de variables
        Dim typet As String
        Dim desc As String
        Dim prefixet As Variant
        Dim lig As Integer
        Dim drlig As Integer
 
        'récupération valeur choisie dans la combobox
        typet = COMBOBOX_TYPETABLE.Value
 
        'récupération valeur entrée dans la textbox
        desc = TEXTBOX_DESCTBL.Value
 
        'détermination du préfixe  à utiliser
        With Sheets("GEST_TABLES_TYPE")
 
            drlig = Sheets("GEST_TABLES_TYPE").Range("A1").End(xlDown).Row
 
            For lig = 2 To drlig
 
                'si la signification du préfixe dans la feuille correspond à la signification choisie alors
                If (typet = Sheets("GEST_TABLES_TYPE").Range("C" & lig).Value) = True Then
                    'récupérer le préfixe associé
                    prefixet = Sheets("GEST_TABLES_TYPE").Range("B" & lig).Value
                Else
 
 
                End If
 
            Next lig
 
 
        End With
 
 
 
        Add_Table desc, prefixet 'appel de la sub add_table
 
 
 
End Sub
Le userform appelle la fonction add_table située dans un module (option explicit a été écrit au debut du module) :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
 
 
Sub Add_Table(ByRef tableUser As String, ByRef typetableUser As Variant)
    'Cette sub ajoute une table
    ' Déclaration des variables
    Dim nomTable As String
    Dim nomcomplet As String
    Dim typetable As Variant
 
 
    nomTable = tableUser
    typetable = typetableUser
 
 
     ' Attribue le nom choisi à la feuille
 
    nomcomplet = typetable & nomTable
    Sheets.Add
    ActiveSheet.Name = nomcomplet
 
 
End Sub
Pourriez-vous m'aider s'il vous plaît.. ? Merci d'avance