Microsoft 365 problème incompatibilité de type 13 sur macro "couper - coller"

rh.finances

XLDnaute Occasionnel
Bonjour à tou(te)s,

Plutôt novice en langage VBA, j'ai malgré tout réussi à constituer une formule macro qui me permet de couper-coller (sans doublon et par ordre alphabétique) les infos figurant sur la plage A8:A18 du fichier excel joint, vers la plage A39:A43.

je viens toutefois de remarquer que cette macro générait un message d'erreur "problème incompatibilité de type 13" si je ne complète que la cellule A8.
en revanche, si je complète à partir de A9, je n'ai aucun souci et je ne vois pas d'où vient l'erreur.
Le code la macro figure ci-après.

Par ailleurs, j'aimerais bien automatiser l'exécution de la macro à chaque saisie de données, sans avoir cliquer sur bouton "calculer" figurant en ligne 36. Est-ce possible ?

merci d'avance pour vos contributions et bon après-midi.

Alex



VB:
Option Explicit
Dim ScriptDic As Object, shO As Worksheet, shD As Worksheet, derlig As Long, i As Long, a

Public Sub Actualiser()
    Application.ScreenUpdating = False

    Set shO = Feuil1 'tableau détaillé
    Set shD = Feuil1 'tableau détaillé

    Set ScriptDic = CreateObject("Scripting.Dictionary")
    a = shO.Range("ligne1_liste_agents:ligne_finale_liste_agents" & shO.Range("A" & Rows.Count).End(xlUp).Row)
    ' attention, le nom/prénom agents est en colonne A. si la colonne A est déplacée, modifier le "A" majuscule ci-dessus

    For i = LBound(a) To UBound(a)
        ScriptDic(a(i, 1)) = ""
    Next i
        
    shD.Range("synthèse_tableau").ClearContents 'tableau a39:a43
    shD.Range("synthèse_1e_ligne").Resize(ScriptDic.Count, 1) = Application.Transpose(ScriptDic.keys) 'cellule A39

End Sub
 

Pièces jointes

  • ELECTIONS EUROPENNES 2024 - rcsmt hrs élect° IFCE - cat. A.xlsm
    46.9 KB · Affichages: 11

Oneida

XLDnaute Impliqué
Bonjour,
Pas de probleme si A8 seule remplie
Par contre
Ca marche pas
VB:
    a = shO.Range("ligne1_liste_agents:ligne_finale_liste_agents" & shO.Range("A" & Rows.Count).End(xlUp).Row)

Ca marche
Code:
    a = shO.Range("ligne1_liste_agents:ligne_finale_liste_agents")

De plus ecrire 11 valeurs de cellules dans 5 ca le fait moyen
 

rh.finances

XLDnaute Occasionnel
Bonjour Oneida,
merci du retour. j'ai fait l'ajustement proposé mais en revanche, je suis toujours bloqué si je renseigne la seule ligne A8 et que je clique sur le bouton "calculer" (message d'erreur "problème d'incompatibilité"). je ne sais pas si le fait d'être Microsoft 365 a une incidence particulière (?)
 

rh.finances

XLDnaute Occasionnel
Bonsoir @Dranreb et @laurent950,

merci beaucoup pour vos retours. j'ai testé ta solution @laurent950. mais j'ai le même résultat que précédemment : si je saisi une valeur en A8, j'ai un message d'erreur. si je rajoute une deuxième mention en cellule A9, ca fonctionne bien
Finalement, j'ai trouvé une solution de contournement : j'ai fusionné l'entête du tableau sur 2 lignes (lignes 7 et 8) et la première ligne de saisie des données se trouve donc en ligne 9. sachant que dans la macro, j'ai précisé que la première ligne de calcul commençait en A8 et si je n'ai qu'une seule donnée saisie en A9, la macro fonctionne sans problème car le calcul s'active sur une plage d'au moins 2 cellules.
reste une petite question : est-il possible d'automatiser le fonctionnement de la macro sans avoir à appuyer sur le bouton actualiser ?
merci à vous !!
 

rh.finances

XLDnaute Occasionnel
Vous pouvez poster votre vba ?
bien sûr ! le code vba est :
VB:
Option Explicit
Dim ScriptDic As Object, shO As Worksheet, shD As Worksheet, derlig As Long, i As Long, a

Public Sub Actualiser()
    Application.ScreenUpdating = False

    Set shO = Feuil1 'tableau détaillé
    Set shD = Feuil1 'tableau détaillé

    Set ScriptDic = CreateObject("Scripting.Dictionary")
    a = shO.Range("ligne1_liste_agents:ligne_finale_liste_agents") 'cellules A8:A18

    For i = LBound(a) To UBound(a)
        ScriptDic(a(i, 1)) = ""
    Next i
        
    shD.Range("synthèse_tableau").ClearContents 'tableau a39:a43
    shD.Range("synthèse_1e_ligne").Resize(ScriptDic.Count, 1) = Application.Transpose(ScriptDic.keys) 'cellule A39

End Sub
 

Discussions similaires

Statistiques des forums

Discussions
314 422
Messages
2 109 447
Membres
110 482
dernier inscrit
ilyxxxh