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 SubVoici le message d'erreur :
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 tempsBonne 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 = "@" 'textepar
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 = "@" 'textece 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?