Erreur '9' lors du lancement de ma macro après duplication du fichier Excel
Bonjour à tous,
C'est ma première fois dans un forum, je vais donc faire de mon mieux pour être clair et concis.
La macro concernée affiche un UserForm :
Sub Bouton20_Cliquer()
UserForm3.Show
End SubQue ce soit pour cet affichage ou pour le code associé au UserForm3, tout fonctionnait bien jusqu'à ce que je duplique le fichier Excel. Maintenant, lorsque je lance cette macro depuis le fichier initial j'obtiens une erreur '9'. Cependant, lorsque je lance cette macro depuis le nouveau fichier, elle fonctionne parfaitement bien.
Comment faire pour que cette macro fonctionne depuis le fichier initial ?
Merci d'avance pour votre aide, je suis bien bloqué...
PS : Ci-dessous le code du UserForm3 :
Bonjour et bienvenue sur ce forum,
Quel est votre version excel ?
Mettez votre profil de compte à jour avec votre version plutôt que Français (xlsb ???) qui n'aide pas celui qui doit vous répondre.
Pour la trouver sous Windows :---> menu Fichier > Compte (en bas) + Clic sur le point d'interrogation puis sur la page suivante au-dessus vous trouvez votre version
Pour la trouver sous MAC : une fois Excel ouvert, cliquez sur l'icône Pomme en haut à gauche puis à "A propos de " Si vous êtes sous MAC ajoutez l'info avec votre version.
tout fonctionnait bien jusqu'à ce que je duplique le fichier Excel.
Pour votre question, regardez déjà si les noms "BOM" et "Nom Domaine" pointent toujours sur le bon fichier et la bonne feuille
Crdlt
Hello,
si je peux me permettre, quelques conseils...
- ComboBox... ou TextBox... suivi d'un numéro sont des noms trop génériques pour se rappeler à quoi ils servent, rien ne vous empêche de les renommer
- For Each cell In ThisWorkbook.Sheets("QryNomenclatureComplete").Range("F:F") boucle sur TOUTES les cellules de la colonne F, cad pour les versions pas trop anciennes 1 048 576 lignes !!! Je doute que votre classeur soit rempli à ce point. A contrario For Each cellb In ThisWorkbook.Sheets("QryNomenclatureComplete").Range("BOM[REFERENCE]") cette boucle est limité au contenu du nom (il faut juste espérer que le nom n'est pas une colonne entière
- au lieu de répéter N fois ThisWorkbook.Sheets("QryNomenclatureComplete") vous pouvez écrire With ThisWorkbook.Sheets("QryNomenclatureComplete") et End With et entre les deux simplifier vos références en supprimant ThisWorkbook.Sheets("QryNomenclatureComplete") mais en gardant le point "."
With ThisWorkbook.Sheets("QryNomenclatureComplete")
' Trouver la cellule correspondant à la valeur sélectionnée dans ComboBox5
Set foundCell = ThisWorkbook.Sheets("QryNomenclatureComplete").Range("BOM[REFERENCE]").Find(What:=ComboBox5.Value, LookIn:=xlValues, LookAt:=xlWhole)
If Not foundCell Is Nothing Then
Rowselected = foundCell.Row ' Stocker le numéro de ligne globalement
' Afficher un message avec le numéro de ligne
'MsgBox "Numéro de ligne sélectionnée : " & Rowselected
' Remplir les TextBox avec les valeurs correspondantes
TextBox1.Value = .Range("BOM[Avancement]").Cells(Rowselected - 10, 1).Value
TextBox2.Value = .Range("BOM[Commentaire]").Cells(Rowselected - 10, 1).Value
TextBox3.Value = .Range("BOM[Coefficient]").Cells(Rowselected - 10, 1).Value
TextBox4.Value = .Range("BOM[Définition CAO dans DMU]").Cells(Rowselected - 10, 1).Value
TextBox5.Value = .Range("BOM[Robustesse conception]").Cells(Rowselected - 10, 1).Value
TextBox6.Value = .Range("BOM[Validation calcul ]").Cells(Rowselected - 10, 1).Value
TextBox7.Value = .Range("BOM[Validation Implantation avec métiers partenaires ]").Cells(Rowselected - 10, 1).Value
TextBox8.Value = .Range("BOM[Index]").Cells(Rowselected - 10, 1).Value
TextBox9.Value = .Range("BOM[Ind.]").Cells(Rowselected - 10, 1).Value
TextBox10.Value = .Range("BOM[DesignationFrance]").Cells(Rowselected - 10, 1).Value
Else
MsgBox "Valeur non trouvée dans la colonne REFERENCE."
End If
End WithBonjour,
et pour éviter de faire 10 fois la soustraction des -10 lignes : Rowselected = foundCell.Row -10 ' Stocker le numéro de ligne globalement
puis : TextBox1.Value = .Range("BOM[Avancement]").Cells(Rowselected, 1).Value
Après je n'ai pas regardé votre fichier TXT avec le code VBA...
Et pour peu que la textbox1 correspond à la colonne X de votre tableau BOM et que le textbox2 correspond à la colonne X+1 etc... Alors une boucle avec l'instruction CONTROLS permet de simplifier le code :
Sub test()
With ThisWorkbook.Sheets("QryNomenclatureComplete")
' Trouver la cellule correspondant à la valeur sélectionnée dans ComboBox5
Set foundCell = ThisWorkbook.Sheets("QryNomenclatureComplete").Range("BOM[REFERENCE]").Find(What:=ComboBox5.Value, LookIn:=xlValues, LookAt:=xlWhole)
If Not foundCell Is Nothing Then
rowselected = foundCell.Row - 10 ' Stocker le numéro de ligne globalement
col1 = 1 ' numéro de la colonne correspondant à TextBox1
For i = 1 To 10
Controls("TextBox" & i).Value = .Range("BOM").Range.Cells(rowselected, Col1 + (i - 1)).Value
Next i
Else
MsgBox "Valeur non trouvée dans la colonne REFERENCE."
End If
End With
End Subou un truc comme cela, je ne maîtrise pas à 100% les références sous VBA des tableaux structurés...
@ bientôt
LouReeD
Bonjour merci pour ces réponses !
- Dan, en effet, la solution se trouvait là... Après changement de nom, REFERENCE n'était plus valide. Je l'ai remplacé et il n'y avait plus d'erreur.
- Nain porte koi et LouReeD, en effet, ça permettra d'alléger énormément le code. Je prends en compte vos commentaires, fais ces essais et vous redis si ça fonctionne comme il faut.
Merci grandement :)
