Comment exécuter son code VBA sur toutes les versions Excel sans problème ?

Bonjour chers membres !

Je suis nouveau et je suis très heureux de faire partie de ce forum.

Je suis à mes débuts sur VBA et je rencontre des difficultés avec mon code. il s'exécute facilement sur le version OFICE 2010 et antérieurs mais affiche un code erreur et le débogage lorsque je tente de l'exécuter sur les versions OFFICE de 2013 et 2016.

macrovba17 04 2023

L'image ci-dessus est un aperçu de l'interface graphique de mon.

Voici mon fichier;phmav.xlsm

Voici mon code:

Private Sub CommandButton1_Click()

'Alimentation du formulaire de saisie'

derligne = Sheets("index").Range("A456416").End(xlUp).Row + 1
Sheets("index").Cells(derligne, 1) = Mois
Sheets("index").Cells(derligne, 2) = Assurance
Sheets("index").Cells(derligne, 3) = TextBox1
Sheets("index").Cells(derligne, 4) = TextBox2
Sheets("index").Cells(derligne, 5) = TextBox3
Sheets("index").Cells(derligne, 6) = TextBox4
Sheets("index").Cells(derligne, 7) = TextBox5
Sheets("index").Cells(derligne, 8) = TextBox6

'message d'alerte après saisie réusie de la facture'
MsgBox ("Votre facture à été enrégistrée avec succès ! Cliquez sur OK pour continuer.")
End Sub

J'ai besoin de votre aide s'il vous plait !

Bonjour et bienvenu sur le site

Pour y voir plus clair un exemple de ton fichier serait le bienvenu

Crdlt

Bonjour TrijkDev et

Une petite présentation ICI serait la bienvenue

Si vous ne l'avez pas encore fait, je vous invite à lire :
- La charte du forum
- Quelques fonctionnalités du forum à connaître
qui vous aideront dans vos demandes et réponses sur ce forum.

Regardez aussi les petites icônes mises à votre disposition dans la barre de menu qui :
- vous permettent de poster un code (</>)
- ou de clôturer un fil lorsque vous avez terminé (V)

Merci pour votre participation

Concernant la demande, pour qu'un outil puisse s'exécuter correctement sur toute version :
- Déclarer ses API en 32 et 64 bits
- Eviter d'utiliser des contrôles qui ne sont pas sur les 2 plateformes (genre MonthView ou DTPicker)

Concernant le code donné, à part les 2 variables pour lesquelles nous ne connaissons pas les valeurs, rien ne doit empêcher la bonne exécution

Cordialement

Edit : bonjour Joco7915

Bonjour chers tous !

C'est à nouveau moi, TrijkDev. J'suis un utilisateur du pack OFFICE et j'utilise régulièrement Excel. Seulement, plutôt que de saisir mes données avec la méthode standard où l'on saisi ses données dans des feuilles de calculs, je souhaite automatiser mes tâches avec VBA. J'suis donc à mes début avec l'éditeur de code. Seulement voici, je rencontre déjà un bug dans mon l'exécution de mon code surtout avec les versions d'OFFICE supérieures à 2010.

Mon projet contient trois feuilles (Index, Etat et Filtre) et trois Userforms (Home, Add et View) comme vous le verrez dans mon fichier. C'est mon userform Add qui est sensé alimenter ma feuille index qui bugge, pareil pour lorsque la feuille Index n'arrive pas à alimenter correctement ma Userform View. Ci-dessous mon fichier et les différents codes à l'intérieur;

21phmav1.xlsm (35.17 Ko)

bonjour,

quel message d'erreur sur quelle instruction ? comment peut-on reproduire l'erreur avec ton fichier (quelle séquence d'opérations faut-il faire) ?

Merci de m'avoir répondu.

Vous exécuter le Userform "Add", ensuite vous renseignez les informations demandées. Si vous travaillez sur Office 2010 et antérieur, pas de soucis, ça marchera ! Mais sur la 2013 ou 2016, Soit le fichier complet va redémarrer soit vous indiquez que " l'exécution de l'objet _worksheets a échoué". Vous aurez ce code erreur 2147417848(80010108)

Voici mon problème !

Bonjour,
Commence par renommer tes 2 userforms Add et View en frmAdd et frmView.
Add et View sont des noms réservés.
Cdlt.

Merci Jean-Luc, j'essaie et j'observe les résultats

Re,
Un petit complément pauisque tu travailles avec un tableau structuré.
Cdlt.

Option Explicit

'Alimentation du formulaire de saisie'
Private Sub CommandButton1_Click()
Dim lo As ListObject, r As Range

    Set lo = Worksheets("index").ListObjects(1)

    With lo
        If .InsertRowRange Is Nothing Then
            Set r = .HeaderRowRange.Cells(1).Offset(.ListRows.Count + 1)
        Else
            Set r = .InsertRowRange.Cells(1)
        End If
    End With

    With r
        .Value = Mois
        .Offset(, 1).Value = Assurance
        .Offset(, 2).Value = TextBox1
        .Offset(, 3).Value = TextBox2
        .Offset(, 4).Value = TextBox3
        .Offset(, 5).Value = TextBox4
        .Offset(, 6).Value = TextBox5
        .Offset(, 7).Value = TextBox6
    End With

    'message d'alerte après saisie réusie de la facture'
    MsgBox "Votre facture à été enrégistrée avec succès ! Cliquez sur OK pour continuer.", 64, "Information"

End Sub

Re

Merci Jean-Eric,

Néanmoins, est-ce que ça fonctionne correctement sur ton poste ?

De plus, dois comprendre que mon code est basique et que je devrais l'actualiser en utilisant peut-être le complément que tu viens d'envoyer ?

Merci d'être indulgent s'il te plaît !

Re,
Je n'ai pas testé !
Mais tu ne dis pas si ton problème est résolu avec le renommage des userforms.
Le complément pour le travail avec un tableau structuré n'est pas la priorité.
CDlt.

Re

Non, même en renommant les deux fichiers le problème n'est pas résolu.

Bonjour

Regarde si cela te convient si oui tu passes le sujet en résolu

20phmavjoco-v2.xlsm (39.08 Ko)

Crdlt

Re,

Merci Joco.

J'ai tenté d'exécuter le code, mais toujours avec les mêmes erreur.

Cette fois pour le débogage, VBA me renvoie à cette instruction;

        Range("I" & L).Value = TextBox3.Value - TextBox6.Value

Du coup, je cherche encore.

NB: Je l'ai exécuter sur Excel 2013 pour l'instant.

Bonjour le fil

@TrijkDev, essayez plutôt de passer par des variables plutôt que d'utiliser directement les contrôles

'Alimentation du formulaire de saisie'
Private Sub CommandButton1_Click()
  Dim L As Long
  Dim MtFac As Single, MtRgl As Single

  If MsgBox("Confirmez-vous l'insertion de cette facture ?", vbYesNo, "Demande de confirmation d'ajout") = vbYes Then
    L = Sheets("Index").Range("a65536").End(xlUp).Row + 1 'Pour placer le nouvel enregistrement à la première ligne de tableau non vide

    Range("A" & L).Value = Mois
    Range("B" & L).Value = Assurance
    Range("C" & L).Value = TextBox1
    Range("D" & L).Value = TextBox2
    Range("E" & L).Value = TextBox3
    Range("F" & L).Value = TextBox4
    Range("G" & L).Value = TextBox5
    Range("H" & L).Value = TextBox6
    MtFac = Val(Replace(TextBox3, ",", ".")): MtRgl = Val(Replace(TextBox6, ",", "."))
    Range("I" & L).Value = MtFac - MtRgl
  End If
  'message d'alerte après saisie réusie de la facture'
  MsgBox "Votre facture à été enrégistrée avec succès ! Cliquez sur OK pour continuer.", 64, "Information"

End Sub

Pour faire des calculs, il faut le faire sur des nombres, or vous ne faites aucune conversion, d'où le bug

A+

Ré,

Merci infiniment à tous !

J'ai trouvé mon erreur avec votre aide bien sûr.

Rechercher des sujets similaires à "comment executer code vba toutes versions probleme"