La méthode 'Value' de l'objet range à échoué
Bonjour
Quand je valide la création d'une référence en passant par le bouton "Lancement création référence"→j'arrive sur le UserForm "Page2CréationRéférence" et que je valide la création la macro d'enregistrement de la référence fonctionne.
Par contre passe à l'ouverture du fichier quand je passe par le bouton "Lancement Page de garde " pour arrivé sur le userForme "Page1degarde" puis que j'appui sur le bouton "Création Référence" que je valide la création, la macro d'enregistrement de la référence plante! avec comme message "La méthode 'Value' de l'objet range à échoué
Auriez vous une solution?
- Messages
- 4'199
- Excel
- 2021 FR 64 bits
- Inscrit
- 13/06/2016
- Emploi
- bénévole associations Goutte d'Or
Bonjour,
Vous avez un problème qui vient du fait que vous utilisez à la compilation la propriété "RowSource" pour le tableau structuré : "TabRefLacour" qui est modifié à l'exécution, ce qu'Excel n 'accepte pas.Vous faites référence à ce tableau dans le formulaire "Page5CréationOutil" pour toutes les ComboBox's "CbxRefLacour" et suivantes. Il faut utiliser à la place la propriété "List" et charger les Combobox's à l'exécution.
Les "RowSource" relatifs aux tableaux de la feuille source2 restent valides car il s'agit de tables non modifiées à l'exécution.
Par ailleurs, vous auriez intérêt à utiliser le code adapté au tableau structuré, plus clair et plus facilement maintenable si vous êtes amené à insérer des colonnes supplémentaires dans votre tableau
Private Sub BtnValidation_Click()
Dim M As Integer, ligne As ListRow
If MsgBox("Confirmez-vous l'insertion de ce nouvelle Référence ?", vbYesNo, "Demande de confirmation d'ajout") = vbNo Then Exit Sub
With [TabRefLacour].ListObject
'ajout ligne et assignation indice de la ligne
Set ligne = .ListRows.Add: M = ligne.Index
'remplissage nouvelle ligne
.ListColumns("Référence Lacour").DataBodyRange(M) = TxtRefLacour.Value
.ListColumns("Désignation pièce").DataBodyRange(M) = TxtDésignationPièce.Value
.ListColumns("Client").DataBodyRange(M) = CbxClient.Value
.ListColumns("Référence Client").DataBodyRange(M) = TxtRefClient.Value
.ListColumns("Pièce ou assemblage").DataBodyRange(M) = CbxTypeDePièce.Value
.ListColumns("Matière").DataBodyRange(M) = CbxMatière.Value
.ListColumns("Epaisseur ").DataBodyRange(M) = CDec(TxtEpaisseur.Value)
'tri sur référence Lacour
.Range.Sort Key1:=.ListColumns("Référence Lacour"), Order1:=xlAscending, Header:=xlYes
End With
TxtRefLacour.Value = ""
TxtDésignationPièce.Value = ""
CbxClient.Value = ""
TxtRefClient.Value = ""
CbxTypeDePièce.Value = ""
CbxMatière.Value = ""
TxtEpaisseur.Value = ""
End SubBonjour et merci pour votre retour
Je débute en VBA et suis autodidacte donc pour tout vous dire vous me parlez un peu chinois!
J'ai fais le copier /Collé de votre code et cela marche
De plus par rapport à votre commentaire j'ai supprimé toutes les Rowsource que j'avais sur les combobox de la page "Page5CréationOutil"
Et ajouter ce code à l'ouverture du userforme
Private Sub UserForm_Initialize(Page5CréationOutil)
Set lo = Worksheets("Source 1").Range("ListeGlobaleRefLacour").ListObject
Me.CbxRefLacour.List = lo.ListColumns(1).DataBodyRange.Value
Me.ComboBox2.List = lo.ListColumns(1).DataBodyRange.Value
.......Je vous joins le fichiers qui marche apparemment.
Encore merci
Slts
- Messages
- 4'199
- Excel
- 2021 FR 64 bits
- Inscrit
- 13/06/2016
- Emploi
- bénévole associations Goutte d'Or
Ceci est suffisant et évite la référence à la feuille
Set lo = Range("ListeGlobaleRefLacour").ListObjectou encore :
Set lo = [ListeGlobaleRefLacour].ListObject