Microsoft 365 changement de version / probleme de compatibilité / erreur '438'

bigbroz

XLDnaute Nouveau
Bonjour,

je suis actuellement en train de faire un petit programme en en VBA pour simplifier le chiffrage de devis.
j'ai un userform qui me permet d'entrer les valeurs d'un matériau et son module récupère un prix dans une feuille bibliothèque avec une fonction index.

Je me suis rendu compte en cherchant à répondre à une autre question que je travaillais sur une vieille version d'excel (97-2003)
: ("https://www.excel-downloads.com/threads/recherche-de-la-premiere-ligne-vide.20045348/")

J'ai essayé de passer le fichier dans une version plus récente.
Malheureusement la fonction index ne fonctionne plus et me renvoie le message "erreur d'execution '438' "

VB:
        Set rngData = .Range("H4:I31") 'definition de la plage de recherche de prix
        Set rngLabelRow = .Range("C4:C31") 'definition de la plage de recherche de section
        Set rngLabelColumn = .Range("H2:I2") 'definition de la plage de recherche d'essence
       
        PrixOss = Application.WorksheetFunction.Index(rngData, .Match(SectOss, rngLabelRow, 0), .Match(EssOss, rngLabelColumn, 0))

Quel pourrait en être la cause ?

Merci d'avance.
 

bigbroz

XLDnaute Nouveau
J'integre en dessous des détails au cas ou cela viendrait d'ailleurs dans le programme

VB:
Private Sub CommandButton1_Click()

'OSSATURE

    Dim PrixOss As Single, EssOss As String, SectOss As String, TraitOss As String, UsinOss As String, SurOss As Single, LgOss As Single, TotOss As String
    EssOss = ComboBox2.Value
    SectOss = ComboBox1.Value
    TraitOss = ComboBox3.Value
    UsinOss = ComboBox4.Value
    SurOss = TextBox1.Value
    LgOss = TextBox2.Value
    
    Dim rngData As Range, rngLabelRow As Range, rngLabelColumn As Range ', fn As WorksheetFunction
 
    'Set fn = Application.WorksheetFunction
 
 With ThisWorkbook.Sheets("Bibliotheque")
    
    
    
    If UsinOss = "PROFILE" Then
        
        Set rngData = .Range("H4:I31") 'definition de la plage de recherche de prix
        Set rngLabelRow = .Range("C4:C31") 'definition de la plage de recherche de section
        Set rngLabelColumn = .Range("H2:I2") 'definition de la plage de recherche d'essence
        'With fn
            PrixOss = Application.WorksheetFunction.Index(rngData, .Match(SectOss, rngLabelRow, 0), .Match(EssOss, rngLabelColumn, 0))
        'End With
 
    ElseIf UsinOss = "BRUT" Then
        
        'changer liste déroulante des sections
        Set rngLabelRow = .Range("C4:C31")
        
        If EssOss = "Epicéa" Then
            Set rngData = .Range("D4:E31")
            Set rngLabelColumn = .Range("D3:E3")
            
        Else
            Set rngData = .Range("F4:G31")
            Set rngLabelColumn = .Range("F3:G3")
        
        End If
        'With fn
            PrixOss = Application.WorksheetFunction.Index(rngData, .Match(SectOss, rngLabelRow, 0), .Match(TraitOss, rngLabelColumn, 0))
        'End With
    End If

 

End With
    
    If LgOss <> 0 Then
        TotOss = PrixOss * LgOss
    Else
        TotOss = PrixOss * SurOss * 5
    End If
    
    Label35.Caption = "prix unitaire : " & PrixOss & " Prix Total : " & TotOss


With ThisWorkbook.Sheets("Feuil1")

    Dim ligne As Integer 'intégration des valeurs au tableau dans la premiere ligne vide

    ligne = Sheets("Feuil1").Range("a1048576").End(xlUp).Row + 1
    'ligne = Sheets("Feuil1").Range("A65536").End(xlUp).Row + 1
    Range("B" & ligne).Value = SectOss
    Range("C" & ligne).Value = EssOss
    Range("D" & ligne).Value = UsinOss & " " & TraitOss
    Range("F" & ligne).Value = TotOss / PrixOss
    Range("G" & ligne).Value = PrixOss
    Range("H" & ligne).Value = TotOss

End With
    
    
      CommandButton1.SetFocus 'permet d'enclencher le bouton commande avec la touche entrée sans court-circuiter les "boxs"
    
End Sub
Capture Feuil1.JPG
Capture feuille.JPG
Capture userform.JPG
 

_Thierry

XLDnaute Barbatruc
Repose en paix
Bonjour @bigbroz , le Forum

Quelque soit la version d'Execl avec laquelle tu upgrade ton programme je serai très surpris que
WorksheetFunction.Index
Ne fonctionne plus.

Tu dis bien qu'exactement le même classeur fonctionnait bien sur (quelle version d'office ?) et ne fonctionne plus sur (quelle version d'office ?)

Bon courage
@+Thierry
 

bigbroz

XLDnaute Nouveau
le programme fonctionnait en version 97-2003 et ne fonctionne plus sur la dernière version en vigueur puisque notre entreprise a souscrit un abonnement office 365 avec mise a jour annuelle. j'ai juste tenté "enregistrer sous" et modifié la terminaison du fichier en ".xlsm"
 

Hasco

XLDnaute Barbatruc
Repose en paix
Bonjour,

On peut également utiliser Application.Index en lieu et place de
Application.WorksheetFunction.Index en déclarant PrixOss As Variant pour recevoir une eventuelle erreur XlCvError (xlErrRef) et pouvoir la tester par : if IsError(PrixOss) then .... sans que le programme plante.

En tous cas jusqu'à excel 2019 (ma version) cela fonctionne.

Cordialement
 
Dernière édition:

Discussions similaires

Statistiques des forums

Discussions
312 177
Messages
2 085 971
Membres
103 073
dernier inscrit
MSCHOE16