IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Macros et VBA Excel Discussion :

Erreur incompatibilité de type


Sujet :

Macros et VBA Excel

  1. #1
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Juillet 2019
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Aube (Champagne Ardenne)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juillet 2019
    Messages : 10
    Points : 2
    Points
    2
    Par défaut Erreur incompatibilité de type
    Bonjour à tous,

    Je viens vers vous car j'ai un problème sur mon fichier, il s'agit de l'erreur "13" incompatibilité de type.

    Etant débutant en VBA j'ai récupéré un code sur un autre forum que j'ai modifier pour correspondre à mes besoins, mais il se trouve que j'ai une erreur lorsque j’appuie sur mon bouton "Modifier Utilisateur" ensuite je choisi dans mon tableau un utilisateur et lorsque j'appuie sur "Valider modifications" ou "Supprimer" mon erreur apparaît.

    Lorsque je fais débogage j'arrive sur cette ligne :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
       If Not Range(NomTableau).Item(Enreg, c).HasFormula Then
    Qui viens de la partie

    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
    Private Sub B_valid_Click()
      Enreg = Me.Enreg
      For c = 1 To NbCol
       If Not Range(NomTableau).Item(Enreg, c).HasFormula Then
         tmp = Me("textbox" & c)
         If IsNumeric(Replace(tmp, ".", ",")) And InStr(tmp, " ") = 0 Then
            tmp = Replace(tmp, ".", ",")
            Range(NomTableau).Item(Enreg, c) = CDbl(tmp)
         Else
             If IsDate(tmp) Then
               Range(NomTableau).Item(Enreg, c) = CDate(tmp)
             Else
               Range(NomTableau).Item(Enreg, c) = tmp
             End If
         End If
        Else
         Range(NomTableau).Item(Enreg - 1, c).Copy
         Range(NomTableau).Item(Enreg, c).PasteSpecial Paste:=xlPasteFormats
        End If
      Next c
      MsgBox ("Utilisateur mis à jour")
      UserForm_Initialize
      'raz
    End Sub
    Je suis a court d'idée quand a la résolution de mon problème. Je vous ai joint mon fichier si vous voulez voir comment ca se passe.

    Je vous remercie d'avance pour l'aide que vous m'apporterez.
    Fichiers attachés Fichiers attachés

  2. #2
    Expert confirmé Avatar de Patrice740
    Homme Profil pro
    Retraité
    Inscrit en
    Mars 2007
    Messages
    2 475
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 70
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Retraité
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Mars 2007
    Messages : 2 475
    Points : 5 630
    Points
    5 630
    Par défaut C'est pas surprenant !
    Bonjour,

    Aucune variable typée, quand on code ainsi, il ne faut pas s'étonner d'une Incompatibilité de type.
    Quand je vois ce code, j'ai les poils qui se hérissent !!!
    Je te conseille de lire ces billets :
    Problème variables publiques Pierre F
    [plage] une fausse bonne idée
    et ces tutos :
    Fondements sur les variables et les constantes
    Utiliser les variables en VBA Excel

    J'ajouterais qui lorsqu'on travaille sur un Range depuis un formulaire, il faut toujours le rattacher à son parent.

  3. #3
    Expert éminent sénior Avatar de Menhir
    Homme Profil pro
    Ingénieur
    Inscrit en
    Juin 2007
    Messages
    16 037
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2007
    Messages : 16 037
    Points : 32 866
    Points
    32 866
    Par défaut
    Citation Envoyé par Diutaru Voir le message
    j'ai récupéré un code sur un autre forum
    Pourquoi ne pas avoir posé la question dans cet "autre forum" ?

    Lorsque je fais débogage j'arrive sur cette ligne :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
       If Not Range(NomTableau).Item(Enreg, c).HasFormula Then
    Lorsque le bug se produit, que contiennent précisément les variables NomTableau, Enreg et c.
    NomTableau est-il supposé être le nom d'un tableau structuré ou d'une zone nommée ?
    Quelle est la taille de cette zone ?

  4. #4
    Membre éclairé
    Homme Profil pro
    Inscrit en
    Octobre 2013
    Messages
    385
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Octobre 2013
    Messages : 385
    Points : 661
    Points
    661
    Par défaut
    Bonjour,

    Le problème vient de la variable Enreg qui devrait être un nombre (= numéro de ligne).

    Elle fait référence à Me.Enreg, soit la textbox qui s'appelle Enreg dans ton Userform.
    Et si tu regardes bien en bas à droite de ton userform quand tu sélectionnes un Utilisateur, le champs N° Ligne reçoit une valeur qui n'est pas un numéro de ligne.

  5. #5
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Juillet 2019
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Aube (Champagne Ardenne)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juillet 2019
    Messages : 10
    Points : 2
    Points
    2
    Par défaut Fonctionnement avant
    Bonjour,

    Je tiens a préciser que mon code fonctionnait avant que j'ajoute simplement le nom de mes colonnes dans le haut de la listbox, l'enregistrement se faisait et la suppression également.

    J'ai ajouter l'ancienne version pour que vous voyez que ca marche.
    Fichiers attachés Fichiers attachés

  6. #6
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Juillet 2019
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Aube (Champagne Ardenne)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juillet 2019
    Messages : 10
    Points : 2
    Points
    2
    Par défaut
    Citation Envoyé par Menhir Voir le message
    Pourquoi ne pas avoir posé la question dans cet "autre forum" ?


    Lorsque le bug se produit, que contiennent précisément les variables NomTableau, Enreg et c.
    NomTableau est-il supposé être le nom d'un tableau structuré ou d'une zone nommée ?
    Quelle est la taille de cette zone ?
    Bonjour Menhir, je n'ai pas posé la question sur cet "autre forum" car enfaite c'est quelqu'un qui met juste des listbox ou autres sur un site et on les récupère juste, enfaite c'est plus un site de ressources qu'autre chose.

    La variable "NomTableau" contient mon tableau qui est créer dans la page BD donc "Tableau1"
    La variable "Enreg" contient "?"
    La variable "c" contient "1"

    Je viens effectivement de voir que dans ma colonne N° de ligne je ne la récupère pas, mon problème vient donc de la je pense.

  7. #7
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Juillet 2019
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Aube (Champagne Ardenne)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juillet 2019
    Messages : 10
    Points : 2
    Points
    2
    Par défaut
    Citation Envoyé par mat955 Voir le message
    Bonjour,

    Le problème vient de la variable Enreg qui devrait être un nombre (= numéro de ligne).

    Elle fait référence à Me.Enreg, soit la textbox qui s'appelle Enreg dans ton Userform.
    Et si tu regardes bien en bas à droite de ton userform quand tu sélectionnes un Utilisateur, le champs N° Ligne reçoit une valeur qui n'est pas un numéro de ligne.
    Bonjour mat955,

    En effet après remarque je n'avais pas fais gaffe a ca étant donné que dans ma V1 elle fonctionnait, je vois donc que le problème vient de la alors.
    Il faut donc que j'arrive a récupérer mon N° de ligne pour que ca fonctionne de nouveau.

  8. #8
    Expert éminent sénior Avatar de Menhir
    Homme Profil pro
    Ingénieur
    Inscrit en
    Juin 2007
    Messages
    16 037
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2007
    Messages : 16 037
    Points : 32 866
    Points
    32 866
    Par défaut
    Quand un bug se produit, le premier réflexe doit être de vérifier le contenu des variables impliquées dans la ligne de code.
    Un proverbe de programmeur dit "le diable se cache dans la variable".
    Citation Envoyé par Diutaru Voir le message
    La variable "Enreg" contient "?"
    Ca ne ressemble pas trop à un numéro de ligne...

  9. #9
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Juillet 2019
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Aube (Champagne Ardenne)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juillet 2019
    Messages : 10
    Points : 2
    Points
    2
    Par défaut
    Citation Envoyé par Menhir Voir le message
    Ca ne ressemble pas trop à un numéro de ligne...
    Oui en effet je m'en suis rendu compte après avoir lu les messages, enfaite j'ai changé un truc avant

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    Private Sub ListBox1_Click()
      For i = 1 To NbCol
        Me("textbox" & i) = Me.ListBox1.Column(i - 1)
      Next i
      Me.Enreg = Me.ListBox1.Column(i - 1)
    End Sub
    Dans cette partie du code (Celui de ma V1) quand j'affichais le nom de mes colonnes de tableau j'avais une autre erreur qui est :
    Erreur d'exécution '-2147024809(80070057) Impossible de lire la propirété Column. Argument non valide.

    Donc j'avais remplacé
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
      Me.Enreg = Me.ListBox1.Column(i - 1)
    par
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
      Me.Enreg = Me.ListBox1.Column(Nbcol - 1)
    Et c'est a partir de ce moment que ma nouvelle erreur est apparu.

  10. #10
    Membre confirmé
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2015
    Messages
    369
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 28
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2015
    Messages : 369
    Points : 518
    Points
    518
    Par défaut
    Bonjour à vous,

    Columns

  11. #11
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Juillet 2019
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Aube (Champagne Ardenne)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juillet 2019
    Messages : 10
    Points : 2
    Points
    2
    Par défaut
    Citation Envoyé par révèr Voir le message
    Bonjour à vous,

    Columns
    Bonjour révèr,

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     Me.Enreg = Me.ListBox1.Column(Nbcols - 1)
    J'ai rajouter un s et effectivement je récupère mon N° de ligne, intervient désormais une nouvelle erreur.
    Erreur d'execution '70' Permission refusée.
    Lorsque je clique sur débogage il me renvoie ici
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
       Me.ListBox1.List = TblBD
    Et de plus il me change le nom de mes colonnes dans mon tableau.

  12. #12
    Membre confirmé
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2015
    Messages
    369
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 28
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2015
    Messages : 369
    Points : 518
    Points
    518
    Par défaut
    Qu'est-ce que TblBd ? Où est sa déclaration ? Quel type de variable est-ce ?

    Pour alimenter une ComboBox ou ListBox, j'espère que cela fonctionne identiquement (je n'ai jamais utilisé de ListBox)

    Si TblBD est un OBJET de type tableau (Tableau Structuré - onglet création - renommé TblBd) alors...

    En supposant que ta procédure se situe dans le module de feuille en question...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    Dim Cell As Range
    Dim t As ListObject
     
    Set t = ListObjects("TblBd")
     
    For Each Cell In t.ListColumns(Choix_Colonne).DataBodyRange.SpecialCells(xlCellTypeConstants)
    'Pour chaque cellule contenant quelque chose dans la colonne choisie...
       If ListBox1.ListIndex = -1 Then
    'Si l'Index n'existe pas encore - donc que la valeur n'est pas dans la liste - évite les doublons
          ListBox1.AddItem Cell.Value
    'Alors ajoute la valeur de la cellule active dans la liste
       End If
    Next Cell

  13. #13
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Juillet 2019
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Aube (Champagne Ardenne)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juillet 2019
    Messages : 10
    Points : 2
    Points
    2
    Par défaut
    Citation Envoyé par révèr Voir le message
    Qu'est-ce que TblBd ? Où est sa déclaration ? Quel type de variable est-ce ?

    Pour alimenter une ComboBox ou ListBox, j'espère que cela fonctionne identiquement (je n'ai jamais utilisé de ListBox)

    Si TblBD est un OBJET de type tableau (Tableau Structuré - onglet création - renommé TblBd) alors...

    En supposant que ta procédure se situe dans le module de feuille en question...
    Mon TblBd se situe ici, il est déclaré tout en haut.

    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
    Option Compare Text
    Dim f, Rng, RngBD, TblBD(), NbCol, NomTableau
     
    Private Sub UserForm_Initialize()
       NomTableau = "Tableau1"                                   '--- à Adapter suivant le nom du tableau'
       Set f = Sheets("BD")
       Set f2 = Sheets("BD")
       Set RngBD = f.[A1].CurrentRegion.Offset(1)
       NbCol = Range(NomTableau).Columns.Count
       TblBD = Range(NomTableau).Resize(, NbCol + 1).Value       '--- Array: + rapide'
       For i = 1 To UBound(TblBD): TblBD(i, NbCol + 1) = i: Next i  '--- No enregistrement'
       Me.ListBox1.List = TblBD
       Me.ListBox1.ColumnCount = NbCol + 1
       Me.ListBox1.ColumnWidths = "100;100;100;100;100;100;100;100;100;100;100;100;100;100;100;100;100;100;100;100;100;100;100;100;100;100;100" 'Taille des colonnes'
       Me.ListBox1.ColumnHeads = True
       Set RngFiltre = f2.[A1].CurrentRegion.Offset(1).Resize(f2.[A1].CurrentRegion.Rows.Count - 1)
       Me.ListBox1.RowSource = RngFiltre.Address(External:=True)
       '--- ComboBox choix colonne filtre'
       Me.ComboChoixColFiltre.List = Application.Transpose(Range(NomTableau).Offset(-1).Resize(1))
       Me.ComboTri.List = Application.Transpose(Range(NomTableau).Offset(-1).Resize(1))
       Me.ComboChoixColFiltre.ListIndex = 0
       Me.LabelColFiltre.Caption = "Filtre:" & Me.ComboChoixColFiltre
       '--- Combobox recherche'
       Set d = CreateObject("scripting.dictionary")
       For i = 1 To UBound(TblBD)
         d(TblBD(i, 1)) = ""
       Next i
       temp = d.keys
       Tri temp, LBound(temp), UBound(temp)
       Me.ComboBoxRech.List = temp
       '--- Labels'
       TblTitre = Application.Transpose(Range(NomTableau).Offset(-1).Resize(1))
       For i = 1 To NbCol
         Me("label" & i) = TblTitre(i, 1)
       Next i
       For i = NbCol + 1 To 18
          Me("label" & i).Visible = False: Me("TextBox" & i).Visible = False
       Next i
       '--- non standard  pour alimenter les comboboxs'
       Me.Textbox2.List = Array("Consolidation - Reporting", "DOSI", "KEYRUS", "Contrôle de Gestion Groupe", "DAF / DFT / Fiscalité", "CSP - Nogent+Folschviller", "Division Neuhauser", "Division Agriculture", "Division Vigne", "Division Négoce", "Division Meunerie", "Division Ingrédients", "Division Neuhauser Industrie", "Division Retail", "Division Biotechnologies", "Division Malterie", "Division R&LS", "RH", "AUDIT", "Group Nac", "SANS DIVISION") 'Ajout d'une division'
       Me.TextBox13.List = Array("STANDARD", "ADMIN") '---Ajouter des rôles BFC PROD'
       Me.TextBox14.List = Array("STANDARD", "ADMIN") '---Ajouter des rôles BFC REC'
       Me.TextBox15.List = Array("BUSINESS", "EXECUTOR", "ADMIN") '---Ajouter des rôles FIM PROD'
       Me.TextBox16.List = Array("BUSINESS", "EXECUTOR", "ADMIN") '---Ajouter des rôles FIM REC'
       Me.TextBox17.List = Array("STANDARD", "ADMIN") '---Ajouter des rôles BPC PROD'
       Me.TextBox18.List = Array("STANDARD", "ADMIN") '---Ajouter des rôles BPC REC'
       Me.TextBox19.List = Array("STANDARD", "ADMIN") '---Ajouter des rôles ICS PROD'
    End Sub
    Après étant donné que je connais que trop peu le VBA je n'ai pas réponse à toutes les questions.
    Je ne vois pas ou je dois intégrer la partie du code que tu m'a transmis.

  14. #14
    Membre confirmé
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2015
    Messages
    369
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 28
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2015
    Messages : 369
    Points : 518
    Points
    518
    Par défaut
    La déclaration d'une variable requiert un type

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    Dim nombre As Integer
    Dim chaîne_textuelle As String
    Dim objet As ListObject
    Dim plage_cellule As Range
    'etc...

  15. #15
    Expert confirmé Avatar de Patrice740
    Homme Profil pro
    Retraité
    Inscrit en
    Mars 2007
    Messages
    2 475
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 70
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Retraité
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Mars 2007
    Messages : 2 475
    Points : 5 630
    Points
    5 630
    Par défaut
    Citation Envoyé par Patrice740 Voir le message
    Aucune variable typée, quand on code ainsi, il ne faut pas s'étonner d'une Incompatibilité de type.
    Quand je vois ce code, j'ai les poils qui se hérissent !!!
    Je te conseille de lire ces billets :
    Problème variables publiques Pierre F
    [plage] une fausse bonne idée
    et ces tutos :
    Fondements sur les variables et les constantes
    Utiliser les variables en VBA Excel

    J'ajouterais qui lorsqu'on travaille sur un Range depuis un formulaire, il faut toujours le rattacher à son parent.
    Citation Envoyé par révèr Voir le message
    La déclaration d'une variable requiert un type


    Bonjour révèr, tu ne fait que confirmer ce que j'ai dit dès le début (que de temps perdu !!!!)

    EDIT : plutôt que lui donner le poisson, il vaut mieux l'apprendre à pêcher ... En voyant son dernier code, je vois qu'il n'applique pas les conseils en lien, les a-t'il lus ?

  16. #16
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Juillet 2019
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Aube (Champagne Ardenne)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juillet 2019
    Messages : 10
    Points : 2
    Points
    2
    Par défaut
    Citation Envoyé par Patrice740 Voir le message


    Bonjour révèr, tu ne fait que confirmer ce que j'ai dit dès le début (que de temps perdu !!!!)

    EDIT : plutôt que lui donner le poisson, il vaut mieux l'apprendre à pêcher ... En voyant son dernier code, je vois qu'il n'applique pas les conseils en lien, les a-t'il lus ?
    Pour votre information oui je les ai lu, et je m'efforce de les comprendre, je me renseigne actuellement sur le sujet mais je n'arrive pas a comprendre pourquoi mon code fonctionnait avant et du fait que j'ai juste rajouter un Columnheads ca ne fonctionne plus.
    De base ce n'est pas mon domaine du tout j'essaye donc de m'initier a tout ca.
    Je sais bien que la méthode de récupérer quelque chose de déjà existant n'est pas la meilleure pour apprendre.
    J'ai au passage lu les liens que vous avez transmis plus haut mais je ne vois pas ce que je dois faire.

  17. #17
    Membre confirmé
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2015
    Messages
    369
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 28
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2015
    Messages : 369
    Points : 518
    Points
    518
    Par défaut
    Bonjour Patrice,

    J'avais bien vu que tu l'avais précisé. Je me suis permis de le lui rappeler au vu de son précédent code en lui fournissant des exemples, bien qu'ils soient aussi présents dans les billets que tu lui as partagés.

    Je ne lui donne pas le poisson, mais au-delà de l'apprendre à pêcher je lui donne aussi la canne à pêche et la bobine Dans le sens où je fournis des exemples. Alors oui, il y en a dans les billets aussi, je les avais par ailleurs consultés lorsque j'ai commencé mon projet. Mais parfois, pour une raison qui m'est inconnue, intégrer des exemples directement dans une discussion semble aider

    Diutaru, pour rentrer dans le langage courant, quelque chose te choque-t-il dans cette phrase ...

    Je déclare cette personne.

    Il manque un bout à la phrase ne penses-tu pas ? Il en va de même pour une variable, il faut la déclarer... d'un type
    Tu ne peux pas juste dire : "Je déclare ma_variable"... mais "Je déclare ma_variable en tant que Integer, String..."

  18. #18
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Juillet 2019
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Aube (Champagne Ardenne)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juillet 2019
    Messages : 10
    Points : 2
    Points
    2
    Par défaut
    Citation Envoyé par révèr Voir le message
    Diutaru, pour rentrer dans le langage courant, quelque chose te choque-t-il dans cette phrase ...

    Je déclare cette personne.

    Il manque un bout à la phrase ne penses-tu pas ? Il en va de même pour une variable, il faut la déclarer... d'un type
    Tu ne peux pas juste dire : "Je déclare ma_variable"... mais "Je déclare ma_variable en tant que Integer, String..."
    Alors pour ma part non rien ne me choque, dans la phrase que tu as mis je vois que tu veux déclarer une personne mais on la cible pas assez.
    Sinon étant donné que je n'arrive pas a comprendre, ne serait-il pas plus simple que je rajoute une seconde listbox au dessus avec le nom des différentes colonnes ?

    Si on compare ma V1 :
    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
    Option Compare Text
    Dim f, Rng, TblBD(), NbCol, NomTableau
     
    Private Sub UserForm_Initialize()
       NomTableau = "Tableau1"                                   '--- à Adapter suivant le nom du tableau'
       NbCol = Range(NomTableau).Columns.Count
       TblBD = Range(NomTableau).Resize(, NbCol + 1).Value       '--- Array: + rapide'
       For i = 1 To UBound(TblBD): TblBD(i, NbCol + 1) = i: Next i  '--- No enregistrement'
       Me.ListBox1.List = TblBD
       Me.ListBox1.ColumnCount = NbCol + 1
       Me.ListBox1.ColumnWidths = "100;100;100;100;100;100;100;100;100;100;100;100;100;100;100;100;100;100;100;100;100;100;100;100;100;100;100" 'Taille des colonnes'
       '--- ComboBox choix colonne filtre'
       Me.ComboChoixColFiltre.List = Application.Transpose(Range(NomTableau).Offset(-1).Resize(1))
       Me.ComboTri.List = Application.Transpose(Range(NomTableau).Offset(-1).Resize(1))
       Me.ComboChoixColFiltre.ListIndex = 0
       Me.LabelColFiltre.Caption = "Filtre:" & Me.ComboChoixColFiltre
       '--- Combobox recherche'
       Set d = CreateObject("scripting.dictionary")
       For i = 1 To UBound(TblBD)
         d(TblBD(i, 1)) = ""
       Next i
       temp = d.keys
       Tri temp, LBound(temp), UBound(temp)
       Me.ComboBoxRech.List = temp
       '--- Labels'
       TblTitre = Application.Transpose(Range(NomTableau).Offset(-1).Resize(1))
       For i = 1 To NbCol
         Me("label" & i) = TblTitre(i, 1)
       Next i
       For i = NbCol + 1 To 18
          Me("label" & i).Visible = False: Me("TextBox" & i).Visible = False
       Next i
       '--- non standard  pour alimenter les comboboxs'
       Me.Textbox2.List = Array("Consolidation - Reporting", "DOSI", "KEYRUS", "Contrôle de Gestion Groupe", "DAF / DFT / Fiscalité", "CSP - Nogent+Folschviller", "Division Neuhauser", "Division Agriculture", "Division Vigne", "Division Négoce", "Division Meunerie", "Division Ingrédients", "Division Neuhauser Industrie", "Division Retail", "Division Biotechnologies", "Division Malterie", "Division R&LS", "RH", "AUDIT", "Group Nac", "SANS DIVISION") 'Ajout d'une division'
       Me.TextBox13.List = Array("STANDARD", "ADMIN") '---Ajouter des rôles BFC PROD'
       Me.TextBox14.List = Array("STANDARD", "ADMIN") '---Ajouter des rôles BFC REC'
       Me.TextBox15.List = Array("BUSINESS", "EXECUTOR", "ADMIN") '---Ajouter des rôles FIM PROD'
       Me.TextBox16.List = Array("BUSINESS", "EXECUTOR", "ADMIN") '---Ajouter des rôles FIM REC'
       Me.TextBox17.List = Array("STANDARD", "ADMIN") '---Ajouter des rôles BPC PROD'
       Me.TextBox18.List = Array("STANDARD", "ADMIN") '---Ajouter des rôles BPC REC'
       Me.TextBox19.List = Array("STANDARD", "ADMIN") '---Ajouter des rôles ICS PROD'
    End Sub
    de ma V2 :

    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
    Option Compare Text
    Dim f, Rng, RngBD, TblBD(), NbCol, NomTableau
     
    Private Sub UserForm_Initialize()
       NomTableau = "Tableau1"                                   '--- à Adapter suivant le nom du tableau'
       Set f = Sheets("BD")
       Set f2 = Sheets("BD")
       Set RngBD = f.[A1].CurrentRegion.Offset(1)
       NbCol = Range(NomTableau).Columns.Count
       TblBD = Range(NomTableau).Resize(, NbCol + 1).Value       '--- Array: + rapide'
       For i = 1 To UBound(TblBD): TblBD(i, NbCol + 1) = i: Next i  '--- No enregistrement'
       Me.ListBox1.List = TblBD
       Me.ListBox1.ColumnCount = NbCol + 1
       Me.ListBox1.ColumnWidths = "100;100;100;100;100;100;100;100;100;100;100;100;100;100;100;100;100;100;100;100;100;100;100;100;100;100;100" 'Taille des colonnes'
       Me.ListBox1.ColumnHeads = True
       Set RngFiltre = f2.[A1].CurrentRegion.Offset(1).Resize(f2.[A1].CurrentRegion.Rows.Count - 1)
       Me.ListBox1.RowSource = RngFiltre.Address(External:=True)
       '--- ComboBox choix colonne filtre'
       Me.ComboChoixColFiltre.List = Application.Transpose(Range(NomTableau).Offset(-1).Resize(1))
       Me.ComboTri.List = Application.Transpose(Range(NomTableau).Offset(-1).Resize(1))
       Me.ComboChoixColFiltre.ListIndex = 0
       Me.LabelColFiltre.Caption = "Filtre:" & Me.ComboChoixColFiltre
       '--- Combobox recherche'
       Set d = CreateObject("scripting.dictionary")
       For i = 1 To UBound(TblBD)
         d(TblBD(i, 1)) = ""
       Next i
       temp = d.keys
       Tri temp, LBound(temp), UBound(temp)
       Me.ComboBoxRech.List = temp
       '--- Labels'
       TblTitre = Application.Transpose(Range(NomTableau).Offset(-1).Resize(1))
       For i = 1 To NbCol
         Me("label" & i) = TblTitre(i, 1)
       Next i
       For i = NbCol + 1 To 18
          Me("label" & i).Visible = False: Me("TextBox" & i).Visible = False
       Next i
       '--- non standard  pour alimenter les comboboxs'
       Me.Textbox2.List = Array("Consolidation - Reporting", "DOSI", "KEYRUS", "Contrôle de Gestion Groupe", "DAF / DFT / Fiscalité", "CSP - Nogent+Folschviller", "Division Neuhauser", "Division Agriculture", "Division Vigne", "Division Négoce", "Division Meunerie", "Division Ingrédients", "Division Neuhauser Industrie", "Division Retail", "Division Biotechnologies", "Division Malterie", "Division R&LS", "RH", "AUDIT", "Group Nac", "SANS DIVISION") 'Ajout d'une division'
       Me.TextBox13.List = Array("STANDARD", "ADMIN") '---Ajouter des rôles BFC PROD'
       Me.TextBox14.List = Array("STANDARD", "ADMIN") '---Ajouter des rôles BFC REC'
       Me.TextBox15.List = Array("BUSINESS", "EXECUTOR", "ADMIN") '---Ajouter des rôles FIM PROD'
       Me.TextBox16.List = Array("BUSINESS", "EXECUTOR", "ADMIN") '---Ajouter des rôles FIM REC'
       Me.TextBox17.List = Array("STANDARD", "ADMIN") '---Ajouter des rôles BPC PROD'
       Me.TextBox18.List = Array("STANDARD", "ADMIN") '---Ajouter des rôles BPC REC'
       Me.TextBox19.List = Array("STANDARD", "ADMIN") '---Ajouter des rôles ICS PROD'
    End Sub
    Il n'y a pas grande différence et pourtant ca fonctionne, enfaite c'est ca que je n'arrive pas a voir pourquoi.

    Edit : J'ai également remarqué que dans mon tableau de la V1 mon numéro de ma première ligne est le N°1 alors que dans ma V2 le numéro de ligne est le N°0, il ne faudrait pas simplement ajouter comme une incrémentation ou quelque chose comme ca ?

  19. #19
    Expert confirmé Avatar de Patrice740
    Homme Profil pro
    Retraité
    Inscrit en
    Mars 2007
    Messages
    2 475
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 70
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Retraité
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Mars 2007
    Messages : 2 475
    Points : 5 630
    Points
    5 630
    Par défaut
    Re,
    Citation Envoyé par Diutaru Voir le message
    ... mais je n'arrive pas a comprendre pourquoi mon code fonctionnait avant et du fait que j'ai juste rajouter un Columnheads ca ne fonctionne plus ....
    Lorsqu'un code n'est pas écrit dans les règles, le fait qu'il fonctionne est dû au hasard : celui de ne pas s'être trouvé dans les conditions où il ne fonctionne plus.
    C'est pour ça qu'il ne faut jamais chercher pourquoi il ne fonctionne plus mais simplement pourquoi il ne fonctionne pas ?.
    ... mais je ne vois pas ce que je dois faire.
    Réécrire ton code en tenant compte des conseils divulgués :
    - Commencer ton module par Option Explicit
    - Supprimer toutes les variables déclarées en début de module
    - Déclarer et typer les variables dans les Sub
    - Remplace les évaluations de cellule par la cellule,
    par exemple au lieu de Set RngBD = f.[A1].CurrentRegion.Offset(1) écrire Set RngBD = f.Range("A1").CurrentRegion.Offset(1).
    - Précise le parent du Range,
    par exemple NbCol = Range(NomTableau).Columns.Count écrire NbCol = f.Range(NomTableau).Columns.Count.
    - etc ...

    Ceci dit, je n'utilise jamais ColumnHeads, je remplace par des Labels.

  20. #20
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Juillet 2019
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Aube (Champagne Ardenne)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juillet 2019
    Messages : 10
    Points : 2
    Points
    2
    Par défaut
    D'accord, je vois la manière de penser.

    Je vais tenter de modifier les choses et je verrais bien, le développement n'étant pas du tout ma branche je nage complètement. Je vous remercie de l'aide que vous m'avez apporté malgré mes difficultés de compréhension.

    J'avais penser mettre des labels mais comme ils doivent suivre mon tableau qui dispose de 28 colonnes c'est compliqué de les faire tenir sur une seule ligne.

Discussions similaires

  1. [AC-2010] Erreur "incompatibilité de type"
    Par oreoolep dans le forum VBA Access
    Réponses: 4
    Dernier message: 02/12/2011, 21h29
  2. Erreur incompatibilité de type au lancement formulaire
    Par koluche dans le forum VBA Access
    Réponses: 0
    Dernier message: 05/05/2011, 14h59
  3. Erreur "incompatibilité de type" lors import dans table Access
    Par spud96 dans le forum Macros et VBA Excel
    Réponses: 5
    Dernier message: 05/01/2011, 21h40
  4. erreur incompatibilité de type
    Par prince19 dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 02/06/2007, 11h43
  5. [VBA E]erreur incompatibilité de type que je ne comprend pas
    Par zoumzoum59 dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 07/07/2006, 14h14

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo