Erreur à l'ouverture d'un UserForm

Bonjour à tous !!

Je fais face aujourd'hui à un problème lors de l'ouverture d'un UserForm sur un fichier créé il y a assez longtemps et pour lequel l'UserForm se lançait sans problème auparavant. Quelque chose ne fonctionne plus mais quoi ?

Je m'explique, lorsque je tente de lancer la macro :

Sub Synthèse_Risque_Par_Client()
Clients_Lignes.Show
End Sub

J'obtiens le message suivant : "Erreur d'exécution '13' : Incompatibilité de type" faisant référence à la ligne "Clients_Lignes.Show"

Je précise que le nom Clients_Lignes est bien celui de l'UserForm.

Après quelques recherches sur Internet, cela pourrait être un problème de définition des variables dans userform_initialize()

Mon code est le suivant :

'=======> Procédure qui crée autant de checkbox que de clients <=======

Private Sub userform_initialize()
Dim Boite As Control
Dim i As Integer, j As Integer, k As Integer
Dim no As Integer, nbCTRL As Integer, Nb As Integer
Dim NomClient() As String

no = 0      'no est la variable d'incrémentation qui détermine la hauteur des checkbox
Nb = 0      'nb est la variable d'incrémentation qui permet de décaler d'une colonne toutes les 15 checkbox
nbCTRL = 0  'nbCTRL compte au fur et à mesure le nombre de checkbox créée afin de déterminer quand on doit changer de colonne

NbClientsLignes = 1
ReDim Preserve NomClient(NbClientsLignes)
NomClient(1) = ""

j = 2
For i = 1 To 10000
    If Cells(i, 19).Value = "Actualiser les totaux" Then
        If Not IsEmpty(Cells(i - 5, 19)) Then
            If Cells(i - 5, 19).Value <> NomClient(j - 1) Then
            NbClientsLignes = NbClientsLignes + 1
            ReDim Preserve NomClient(NbClientsLignes)
            NomClient(j) = Cells(i - 5, 19).Value
            j = j + 1
            End If
        End If
    End If
Next

For i = 2 To NbClientsLignes
no = no + 1
nbCTRL = nbCTRL + 1

If nbCTRL = 13 Then
    Nb = 1
    no = no - 12
End If

If nbCTRL = 25 Then
    Nb = 2
    no = no - 12
End If

If nbCTRL = 37 Then
    Nb = 3
    no = no - 12
End If

If nbCTRL = 49 Then
    Nb = 4
    no = no - 12
End If

If nbCTRL = 61 Then
    Nb = 5
    no = no - 12
End If

Set Boite = Clients_Lignes.Controls.Add("forms.checkbox.1")

With Boite
    .Name = "checkbox" & i
    .Caption = NomClient(i)
    .Left = 30 + 115 * Nb
    .Top = 60 + 15 * no
    .WordWrap = False
    '.AutoSize = True
    .BackStyle = 0
    .BackColor = &HFFFFFF
    .ForeColor = &H0&
    .Font.Bold = True
    '.Value = False

End With

Next

End Sub

Je pourrais éventuellement joindre le fichier complet mais il contient de nombreuses données confidentielles, donc si quelqu'un voit directement une grosse bourde dans le code ci-dessus ... .

Merci à ceux qui prendront un peu de temps pour essayer de m'aider à résoudre ce mystère !!

Bonne soirée

Bonjour

Sans ton fichier pas évident

Sinon regardes ces lignes

For i = 1 To 10000
    If Cells(i, 19).Value = "Actualiser les totaux" Then
        If Not IsEmpty(Cells(i - 5, 19)) Then
            If Cells(i - 5, 19).Value <> NomClient(j - 1) Then
            NbClientsLignes = NbClientsLignes + 1
            ReDim Preserve NomClient(NbClientsLignes)
            NomClient(j) = Cells(i - 5, 19).Value
            j = j + 1
            End If
        End If
    End If
Next

Au départ i=1 et i-5 pas glop

Si d'autres problèmes, joins ton fichier

Bonjour !

Merci pour l'accueil

J'ai testé le "i" et "i-5" mais ça ne semble pas être la cause du problème.

Je te joins le fichier ça sera certainement plus pratique pour enquêter ^^

Bonjour

Je t'explique

Ta boucle For i = 1 To 10000 au départ i vaut 1 et après si tu fais Cells(i - 5, 19) c'est comme tu écrivais Cells(-4, 19)

Excel n'aime pas qu'on lui demande de trouver une ligne en dessous de 1

En plus avec une base vide aucune possibilité de faire des tests

Pourquoi tu te réfères 5 lignes en arrière ?

Rebonjour ,

Je ne suis pas l'auteur du fichier mais je pense que le "i - 5" est mis ici car

If Cells(i, 19).Value = "Actualiser les totaux" 

n'intervient pas avant la ligne 5 ou 10 donc on ne serait jamais en négatif.

Je t'ai mis un fichier avec un peu plus de données pour pouvoir tester le lancement de l'userform. De mon côté que ça soit avec i ou avec i - 5 même résultat .

Bonjour

OK pour le décalage qui n'intervient pas de suite

Mais beaucoup de cellules avec une erreur

Testes cette modification

j = 2
For i = 1 To 10000
    If Not IsError(Cells(i, 19).Value) Then
      If Cells(i, 19).Value = "Actualiser les totaux" Then
        If Not IsEmpty(Cells(i - 5, 19)) Then
            If Cells(i - 5, 19).Value <> NomClient(j - 1) Then
              NbClientsLignes = NbClientsLignes + 1
              ReDim Preserve NomClient(NbClientsLignes)
              NomClient(j) = Cells(i - 5, 19).Value
              j = j + 1
            End If
        End If
      End If
    End If
Next

Et ....... ça fonctionne parfaitement !! Merci beaucoup

Pour bien comprendre : d'où vient le problème !? Pourquoi

(Cells(i, 19).Value)

retourne parfois une erreur, et donc pourquoi la ligne

If Cells(i, 19).Value = "Actualiser les totaux" Then

ne peut pas simplement tester les cellules de la colonne 19 à la recherche de la mention "Actualiser les totaux" ?

Merci encore !

EDIT : Le #NOM? est-il considéré comme une erreur ??

Bonjour

Pour tester une valeur quelconque tu es obligé de comparer la cellule avec ce que tu cherches

Les cellules ayant une erreur provoque une erreur si on essaie de les comparer avec autre chose

Toutes les indications commençant par # sont des indications d'erreur

Une solution autre de ce que je t'ai indiquée, serait que les formules gèrent l'erreur éventuelle style =SI(ERREUR(Ma_Formule);"";Ma_Formule)

Comme cela dans le code VBA plus besoin de ce test

Merci pour l'explication, c'est très clair !

Une seule zone d'ombre pour moi, mes collègues ont les cellules #NOM? qui sont actualisées automatiquement via un logiciel relié à Excel. Ils ont donc des valeurs dans ces cellules, et pourtant avant l'ajout de la condition If Not IsError, ils avaient le même problème... Ce qui veut donc dire qu'il y avait comme même des erreurs. Je ne sais pas si tu as une intuition sur la cause possible ?

Bonjour

Je ne saisi pas trop le sens de ta question

#NOM? est un message d'erreur : La cause ?????? (je ne sais pas : une erreur de syntaxe ou autre)

Trouvé dans l'aide

L'erreur #NOM?

Survient lorsque Microsoft Excel ne reconnaît pas le texte dans une formule.

Causes possibles

  1. L'utilisation d'une fonction faisant partie de la macro complémentaire Utilitaire d'analyse sans que la macro complémentaire soit chargée
  2. L'utilisation d'un nom qui n'existe pas
  3. La mauvaise orthographe du nom
  4. L'utilisation d'une étiquette dans une formule alors que les étiquettes ne sont pas autorisées
  5. La mauvaise orthographe du nom d'une fonction
  6. La saisie de texte dans une formule, sans qu'il soit placé entre guillemets
  7. L'omission des deux-points (:) dans une référence de plage
  8. La référence à une autre feuille non placée entre des guillemets simples
    Si la formule fait référence à des valeurs ou à des cellules d'autres feuilles de calcul ou d'autres classeurs dont le nom contient un caractère non alphabétique ou un espace, vous devez placer une apostrophe ( ' ) de part et d'autre du nom de cette feuille de calcul ou de ce classeur

Le test IF Not IsError() devrait pallier ce problème

Désolé je n'ai pas été compréhensif

J'ai compris que #NOM? est un message d'erreur. Ce que je ne comprends pas, c'est pourquoi mes collègues qui n'ont pas #NOM? mais des valeurs, ont le même problème sur l'ouverture de l'UserForm.

C'est juste pour la "culture", savoir si tu connais une autre cause d'erreur possible.

Mais pour le reste tout fonctionne parfaitement avec le IF Not IsError() !

Bonjour

C'est fort

Sans message d'erreur tes collègues ont le plantage, mais si il y a l'instruction If Not IsError plus de plantage

Es-tu sur de ça ?

Vérifies si il n'y a pas une MEFC qui masque les erreurs (en écrivant blanc sur blanc)

Si possible d'envoyer le fichier (anonymisé) d'un de tes collègue

Oui c'est ça qui est étonnant, le plantage à l'ouverture de l'UserForm mais la raison du #NOM? ne peut pas marcher sur leur fichier alors c'est un vrai mystère cette fois ^^

Le problème étant que leur fichier est le même que celui que je t'ai envoyé sauf qu'il s'ouvre avec un logiciel Excel relié à un logiciel internet actualisant les valeurs donc pas testable à distance.

Restons-en à ta solution qui marche

De nouveau merci et excellente journée !

Ps : Pour mon MP du coup plus besoin car ça fonctionne parfaitement

Rechercher des sujets similaires à "erreur ouverture userform"