Erreur 9 chez les utilisateurs

Bonjour le forum,

Voici mon soucis, chez moi le code fonctionne parfaitement, par contre ce fichier est sur un sharepoint et plusieurs utilisateurs y ont accès.

Lorsque les autres utilisateurs que moi essayent d'insérer des données in ont un code d'erreur 9 (le fichier qui est protégé se retrouve déprotégé), donc le message de confirmation arrive et le fichier est déprotégé.

J'ai un peux cherché sur le net mais comme cela fonctionne chez moi je n'ai rien trouvé de concret (nom de sheet correct, macro enclenchée chez les utilisateurs car ils utilisent déjà un autre fichier contenant des macros sans soucis,...

Voici le code, pouvez-vous m'aider svp.

Merci d'avance.

'Bouton insérer
Private Sub CommandButton13_Click()
    Dim Ligne As Integer
    Dim I As Integer
    Dim ctrls As Variant
    Dim wsModele As Worksheet
    Dim wsOverview As Worksheet
    Dim Wbe As Workbook
    Dim sp, datum

    ' Renseigner l'onglet "Rejected deliveries overview"
    If MsgBox("Are you sure you want to INSERT this data?", vbYesNo, "Request for confirmation") = vbYes Then 'condition : si oui au message

' le déverrouiiler
Sheets("Rejected deliveries overview").Unprotect Password:=MDP.MDP
        Set Wbe = ThisWorkbook

        ' Permet de se positionner sur la dernière ligne de tableau NON VIDE
        Ligne = Sheets("Rejected deliveries overview").Range("a65536").End(xlUp).Row + 1

        sp = Split(Me.TextBox11.Text, "/")  'séparer textbox
          If UBound(sp) = 1 Then             'éventuellement aujouter année
               ReDim Preserve sp(2)
               sp(2) = Year(Now)
          End If
          datum = CLng(DateSerial(sp(2), sp(1), sp(0)))     'la date comme valeur "long"

        ctrls = Array(Me.TextBox11, _
                Me.TextBox12, _
                Me.ComboBox16, _
                Me.TextBox13, _
                Me.ComboBox13, _
                Me.ComboBox110, _
                Me.TextBox16)

        ws2.Cells(Ligne, 1).Resize(, 7).Value = ctrls     'ajouter les 7 en même temps
        ws2.Cells(Ligne, 8).NumberFormat = "@"     'texte

    End If

    ' Créer un lien hypertexte sur la Cells(Ligne, 3) avec la valeur de la Textbox12
    Set wsOverview = ThisWorkbook.Sheets("Rejected deliveries overview")
    wsOverview.Hyperlinks.Add Anchor:=wsOverview.Cells(Ligne, 2), Address:="", SubAddress:=TextBox12.Value & "!A1", TextToDisplay:=TextBox12.Value

    ' Créer un nouvel onglet sur la base du modèle
    Set wsModele = ThisWorkbook.Sheets("Template rejected deliv.")
    wsModele.Visible = True
    wsModele.Copy , Worksheets(Worksheets.Count)
    Sheets("Template rejected deliv. (2)").Move after:=Worksheets(7)
    Set ws2 = Worksheets("Template rejected deliv. (2)")
    ws2.Name = TextBox12.Value ' Remplacez "TextBox12" par le nom de votre TextBox
    wsModele.Visible = xlSheetVeryHidden

    ' Trie les données par date la plus récente dans la colonne A
    Sheets("Rejected deliveries overview").Range("A3:G" & Ligne).Sort Key1:=Sheets("Rejected deliveries overview").Range("A3"), Order1:=xlDescending, Header:=xlNo

    ' Le re-vérouiller
        Sheets("Rejected deliveries overview").Protect Password:=MDP.MDP

    Sheets("Rejected deliveries overview").Activate
    Unload Me ' Vide et ferme l'Userform ( formulaire)
    'UserForm2.Show
End Sub

Voici le message d'erreur :

afbeelding

Erreur 9 pendant l'exécution : L'indice est en dehors de l'intervalle

bonjour Heavy_B,

vous avez cette erreur à quelle ligne ? Celle-ci ?

ws2.Cells(Ligne, 1).Resize(, 7).Value = ctrls     'ajouter les 7 en même temps

Bonne question, je vais demander à un utilisateur de le faire devant moi avec le code déprotégé pour mieux cibler l'erreur.

C'est à partir de la ligne :

datum = CLng(DateSerial(sp(2), sp(1), sp(0)))     'la date comme valeur "long"

re,

il faut vérifier le numéro du textbox, c'est vraiment le 11 ou c'est le 1 (j'avais utilisé le "userform1" commandbutton3.), je crains que cela est l'erreur.

Puis si vous n'utiliser pas la "datum" dans ctrls, il ne faut pas le calculer, donc vous ne pouvez pas faire une erreur. Mon premier argument est pour le moment "datum", donc il faut le changer si vous n'êtes pas d'accord.

      Ligne = Sheets("PN request overview").Range("a65536").End(xlUp).Row + 1

          With Me.TextBox1   'c'est le 1 ou le 11 ????
               If Len(.Text) = 0 Then MsgBox "datum onbekend": Exit Sub
               If InStr(.Text, "/") = 0 Then MsgBox "datum onduidelijk": Exit Sub
               sp = Split(Me.TextBox1.Text & "/" & Year(Now), "/")     'séparer textbox 'je mag eventueel jaartal vergeten, dan voegt excel die er wel bij
               datum = CLng(DateSerial(sp(2), sp(1), sp(0)))     'la date comme valeur "long"
          End With

          ctrls = Array(datum, _
                        Me.ComboBox2, _
                        Me.TextBox2, _
                        Me.TextBox3, _
                        ....
             

Bonjour BsAlv,

concernant les textbox j'ai un userform qui utilise le 1 et un autre userform qui utilise le 11, je suis certain des numéros.

je vais faire un test avec ce que vous proposez, mais aussi avec l'ancienne version de calcul.

J'ai remarqué que le fichier ne tient pas mes spécifications de date à travers les utilisateurs :

Chez moi, toutes les dates sont en dd/mm/aaaa

Chez l'utilisateur avec qui j'ai fait le test les dates s'affiche en dd-mm-aaaa sans qu'il change quoi que ce soit...

Bonjour le Forum,

après quelques essais c'est toujours choux blanc

Lorsqu'un utilisateur introduis une donnée date le format est éronné, lorsque je regarde si je peux changer la "date" dans un autre format dans le menu d'Excel (en nombre, date, monaitaire, temps.....) il me donne comme exemple la date (donc si la date est 24/06/2024 c'est cela que j'ai partout) Quand le la retape plus de soucis.

J'ai l'impression qu'excel la considère comme texte... Même si dans le "format auto" j' l'insère comme

Me.TextBox11.Value = Format(Date, "mm/dd/yyyy")

De plus le format de date change dans le fichier, il prend la "valeur" de l'utilisateur. N'y as-t'il pas moyen de bloquer le format indépendement de la "valeur par défaut" du excel de l'utilisateur?

Après quelque test je pense avoir trouvé la solution :

J'ai remplacé

ctrls = Array(Me.TextBox11, _
                Me.TextBox12, _
                Me.ComboBox16, _
                Me.TextBox13, _
                Me.ComboBox13, _
                Me.ComboBox110, _
                Me.TextBox16)

        ws2.Cells(Ligne, 1).Resize(, 7).Value = ctrls     'ajouter les 7 en même temps
        ws2.Cells(Ligne, 8).NumberFormat = "@"     'texte

par

ctrls = Array(Me.TextBox12, _
                Me.ComboBox16, _
                Me.TextBox13, _
                Me.ComboBox13, _
                Me.ComboBox110, _
                Me.TextBox16)

        ws2.Cells(Ligne, 1).Value = Date     'ajouter la date
        ws2.Cells(Ligne, 2).Resize(, 6).Value = ctrls     'ajouter les 6 en même temps
        ws2.Cells(Ligne, 8).NumberFormat = "@"     'texte

ce qui, si j'ai tout compris, force un format date sur la première cellule de la ligne (et donc au format de l'utilisateur si je ne me trompe pas...)

Qu'en pensez-vous?

Rechercher des sujets similaires à "erreur utilisateurs"