Plantage d'Excel suite msg erreur d'exécution

Bonjour à tous,

Je rencontre un problème sur un fichier excel, la macro de saisie fonctionne jusqu’à ce que je nomme les cellules de la colonne A de la feuille source en L_Matricule et que j'utilise ce nom dans le row source du cboMatricule du formulaire de recherche.

A partir de ce moment la macro fait planter excel.

Si je lance la macro j'obtiens ces messages :

erreur d'exécution '-2147417848 (80010108)':

La méthode '_Défault de l'objet 'Range' à échoué

un clic sur débogage surligne la ligne :

ActiveCell = ActiveCell.Offset(-1, 0) + 1

ensuite apparait :

erreur d'exécution '-2147417848 (80010108)':

Erreur automation

L'objet invoqué s'est déconnecté de ses clients.

Suite au dernier message Excel plante.

Quelqu'un a t'il rencontré ce genre de problème et surtout a t'il une solution.

Bonnes fêtes à vous,

Cordialement.

Bonjour,

Je ne comprend pas pourquoi tu remets une condition sur le N° de Matricule, alors qu'il est déjà initialisé par l'ouverture de ton USF

A tester

Bonjour M12,

Merci pour ta réponse,

Je ne comprend pas pourquoi tu remets une condition sur le N° de Matricule, alors qu'il est déjà initialisé par l'ouverture de ton USF

Je remets une condition par ce que j'ai suivi le tuto.

J'ai testé ta solution, mais le problème persiste. Le seul changement est sur la ligne surlignée par le débogueur :

ActiveCell = Me.txtMatricule

au lieu du

ActiveCell = ActiveCell.Offset(-1, 0) + 1

qu'elle remplace.

Le problème vient de cette colonne Matricule qui après le nommage des éléments de la colonne pour utilisation dans le combo box cboMatricule du formulaire Recherche fait planter Excel à l'exécution de la macro de saisie.

Je ne comprends pas avant cette manip la macro fonctionnait.

Merci de ton aide, bonnes fêtes et bonne journée.

Cordialement.

Bonjour [Zebulon],

J'ai les yeux fatigués ce matin. Mais tu utilises comme variable un nom réservé d'Excel. Ici ActiveCell =

Fait ActivXell = ActiveCell…… Tu as ainsi une variable propre à ton programme et tu n'empiètes pas sur Excel.

Après libre à toi de faire ActivXell.select ou autre….pour la suite de ton code .

Après il faudrait aussi une condition car si le programme dans son exécution se trouve sur la première ligne. Cela posera souci.

Donc if ActiveCell.Row > 1 then ActivXell = ActiveCell.offset(-1,0) + 1.

Bonne continuation.

Bonjour X Cellus,

Merci pour ta réponse,

J'ai les yeux fatigués ce matin. Mais tu utilises comme variable un nom réservé d'Excel. Ici ActiveCell =

Je ne pense pas que cela soit une variable, sinon Option Explicit m'aurait obliger à la déclarer, ce qui n'est pas le cas.

Et comme évoqué dans mon post, la macro fonctionne tant que l'on utilise pas le nom L_Matricule pour nommer la colonne A du tableau T_Source et que l'on n'utilise pas ce nom dans le row source du combo box cboMatricule du formulaire frmRecherche.

j'ai tenté de déclarer ActivXell

Dim ActivXell  As Object
Set ActivXell = ActiveCell

et modifié mon code comme tu me l'as suggéré :

  'On cherche la première ligne vide du tableau
        Feuil2.Activate
        Feuil2.Range("A1048576").End(xlUp).Offset(1, 0).Select
        'On enregistre les données du formulaires dans la feuille Source
'         If ActiveCell.Offset(-1, 0) = "Matricule" Then
'                ActiveCell = 1
            If ActiveCell.Row > 1 Then
                ActivXell = ActiveCell.Offset(-1, 0) + 1
            Else
                ActivXell = ActiveCell.Offset(-1, 0) + 1
            End If

Cela fait planter excel directement après le premier message, je n'ai même pas accès au débogage.

Merci de ton aide, bonne journée.

Cordialement.

A nouveau,

J'aurais dû télécharger ton fichier avant. Désolé.

Voici déjà le code pour la recherche du Matricule.

'Procédure de recherche d'un salarié
Private Sub cboMatricule_Change()
Dim Matric As Integer
    'Se positionner
    Sheets("Source").Activate
    Range("A1").Select
    'On boucle sur tous les matricules
    'Do Until ActiveCell = CLng(Me.cboMatricule)
        'ActiveCell.Offset(1, 0).Select
    'Loop
    Matric = CInt(Me.cboMatricule) + 1
    Cells(Matric, 1).Activate
    Me.txtNom = ActiveCell.Offset(0, 1)
    Me.txtPrenom = ActiveCell.Offset(0, 2)
    Me.txtNaissance = Format(ActiveCell.Offset(0, 3), "DD/MM/YYYY")
    Me.txtGenre = ActiveCell.Offset(0, 5)
    Me.txtService = ActiveCell.Offset(0, 6)
    Me.txtStatut = ActiveCell.Offset(0, 7)
    Me.txtSalaire = Format(ActiveCell.Offset(0, 8), "currency")
End Sub

Puis je vois pour le reste.

Bons tests, bonne continuation.

Suite,

Et le reste du code modifié:

'Procédure d'enregistrement du nouveau salarié
Private Sub BTNSauvegarder_Click()
Dim Lig As Integer
    'Test de contrôle du remplissage des différents champs
    If Len(Me.txtNom) = 0 Then
        Me.lblMessage = "Veuillez saisir le nom du salarié."
        Me.txtNom.SetFocus

    etc....

    ElseIf Len(Me.txtSalaire) = 0 Then
        Me.lblMessage = "Veuillez saisir le salaire du salarié."
        Me.txtSalaire.SetFocus
    Else 'Si tous les champs sont remplis, on procède à l'enregistrement.
        'On cherche la première ligne vide du tableau
        Feuil2.Activate
        Lig = Application.WorksheetFunction.Max(Range("A1:A1000")) 'Feuil2.Range("A1048576").End(xlUp).Offset(1, 0)
        'On enregistre les données du formulaires dans la feuille Source
         If ActiveCell.Offset(-1, 0) = "Matricule" Then
                Cells(2, 1).Activate
            Else
                Cells(Lig + 2, 1).Activate
            End If
        ActiveCell.Offset(0, 1) = UCase(Me.txtNom)  

        etc...

            

Cela ne planteras pas ainsi.

Bonjour à tous,

Fais ce test ...

Reprend ton fichier du début, supprimer le champ nommé "L_Matricule" lequel fait référence à "=T_Source[Matricule]"

Depuis, cette suppression ... je n'ai plus aucun plantage.

Si ¸ça fonctionne bien ... tu pourras reprendre le code de X Cellus.

ric

Bonjour à tous,

Étant donné que tes données sont dans un tableau, je suggère d'utiliser un code différent pour ajouter la ligne au tableau.

ric

Précision,

Salut Ric

Omis de mettre ton End If en commentaires et manger la fin du code avant l'envoi. Pourtant je suis rassasié.

Mais journée particulière.

 'On enregistre les données du formulaires dans la feuille Source
         If ActiveCell.Offset(-1, 0) = "Matricule" Then
                Cells(2, 1).Activate
            Else
                Cells(Lig + 2, 1).Activate
           ' End If
           ActiveCell.Offset(0, 1) = UCase(Me.txtNom)

           etc....

            ActiveCell.Offset(0, 8) = Ccur(Me.txtSalaire)
            ActiveCell = Lig + 1
            End if
           

Bon je laisse des lignes

+

+

+

Bons tests.

Enfin,

après = Ccur(Me.txtSalaire)

et avant le End if (voir précédent post)

j'ai rajouté

'Report de la formule calculant l'age de l'employé(e)
ActiveCell.Offset(-1,4).select:Selection.Copy:ActiveCell.Offset(1,0).Select
Selection.PasteSpecial Paste=xlPasteFormulas
ActiveSheet.Paste: Application.CutCopyMode=False

Bonne continuation.

Bonsoir à tous,

Bonsoir, Ric et X Cellus,

Merci pour vos réponses.

J'ai testé le code de X Cellus, cela fonctionne pour la saisie mais le formulaire de recherche ne fonctionne plus. Si l'on renomme la colonne A du tableau T_Source le problème réapparait.

Je vous joint mon fichier avant affectation de la source L_Matricule sur le combo box cboMatricule du formulaire de recherche.

Bizarrement, parfois cela fonctionne mais ce n'est pas récurent et cela fini par planter. La ligne surlignée par le débogueur est :

 ActiveCell.Offset(0, 1) = UCase(Me.txtNom)                  'UCase Format Majuscule

Est ce qu'il y a une autre solution pour alimenter le combo box du formulaire de recherche ?

Le problème vient de l'affectation de L_Matricule sur le combo box cboMatricule du formulaire de recherche.

Merci pour vos contribution, bonne soirée.

Cordialement.

Cordialement.

Bonsoir [Zebulon], le forum

Je t'envoie mon fichier que tu peux tester car celui que tu as posté, le code n'a pas été bien copié.

Bonne continuation.

Re,

Je pense avoir trouvé la solution, avec une formule pour nommer L-Matricule

=DECALER(Source!$A$2;0;0;NBVAL(Source!$A:$A)-1;1)

Utiliser dans le row source du combo box du formulaire de recherche, cela à l'air de fonctionner.

Merci pour votre aide.

Bonne soirée.

Cordialement.

Re,

Bonsoir X Cellus,

Je viens de voir ton fichier, cela fonctionne. Merci.

Je vais étudier ton code pour l'adapter à mon fichier. Merci pour ta participation et tes lumières.

Bonne fin d'année et bonne continuation.

Cordialement

Rechercher des sujets similaires à "plantage suite msg erreur execution"