VBA erreur execution 1004 lors d'un find

krollette

XLDnaute Nouveau
Bonjour, j'ai un problème dans mon fichier excel.
Dans une de mes forms (form8), je veux interroger l'utilisateur sur un N° d'AR à ajouter dans ma feuille excel.
Suite à ça, j'insère une ligne pour ajouter ce nouveau N° (dans ma fonction CommandAdd_Click de ma form8). De là, comme j'ai créé une procédure Worksheet_Change lorsque la page "Hot AR" est modifiée, elle est immédiatement trigguée et appelle aussi sec une fonction findColumn qui me donne le N° de colonne de mon header (des fois que je rajoute des colonnes, c'est plus pratique)

Mais j'obtiens systématiquement l'erreur 1004, ce que je ne comprends pas. En effet, dans la proc de ma form, juste avant de faire un insert qui va déclencher la procédure appelant findColumn, j'ai mis le meme appel à la fonction findColumn, et cela fonctionne.

Je ne vois pas ce qui cloche.
J'ai aussi noté que dans ma proc findColumn, dans le cas où ça ne marche pas, le debug de mon range R n'a pas la même tête que quand ça ne fait pas d'erreur: un certain nombre de properties sont indiquées comme <impossible de lire la propriété XXX de la classe Range>...

Pour ceux qui voudraient tenter de m'aider, pour déclencher la procédure, aller dans menu/RCA features/HotAR update, (form8 s'affiche) puis cliquer sur le bouton "Add" en bas, rentrer n'importe quelle valeur et faire OK/confirmation.

ma fonction findColumn:

Function findColumn(R As Range, ColumnTitle As String, Optional cont As Boolean = False) As Integer
'returns column number as integer of a column title found in the line containing the titles

findColumn = 0
Set tmpC = R.Find(What:=ColumnTitle, MatchCase:=True, LookAt:=xlWhole, searchformat:=True)

If Not tmpC Is Nothing Then
If tmpC = ColumnTitle Then
findColumn = tmpC.Column
Else
If Not cont Then
MsgBox ("Column '" & ColumnTitle & "' not found in sheet " & R.Worksheet.Name & ".")
End
End If
End If
Else
If Not cont Then
MsgBox ("Column '" & ColumnTitle & "' not found in sheet " & R.Worksheet.Name & ".")
End
End If
End If
End Function
 

Pièces jointes

  • RCA_test.xlsm
    159.5 KB · Affichages: 117

vgendron

XLDnaute Barbatruc
Re : VBA erreur execution 1004 lors d'un find

Bonjour,

si tu dis que dans certains cas, la fonction ne pose pas de problème. c'est que sans doute. la fonction elle meme n'est pas en cause.. mais plutot celui qui appelle cette fonction..
apparemment. le range de recherche "R" n'a pas l'air de lui plaire...
en gros. tu appelles ta fonction avec un R qui ne correspond pas à ce qu'il attend..

mais la. j'ai du mal à savoir qui appelle quoi. donc. c'est juste une piste que je te donne..
 

krollette

XLDnaute Nouveau
Re : VBA erreur execution 1004 lors d'un find

Même pas sûre, le R que je donne quand ça fonctionne et quand ça fonctionne pas sont les mêmes: la première ligne (tronquée sur le usedrange pour ne pas prendre la totalité des colonnes), et le R.address est le même, j'ai vérifié.
Simplement je n'arrive pas à savoir pourquoi le comportement est ensuite différent. Ca fait 2 jours que je cherche, je n'ai trouvé aucune piste sur internet, et là je sêche... Si quelqu'un pouvait m'aider...
 

krollette

XLDnaute Nouveau
Re : VBA erreur execution 1004 lors d'un find

Pour supplément, voici ce que j'ai traqué lorsque la macro ne fonctionne pas. (voir snapshots attachés). Vous pouvez voir qu'il y a un certain nombre de propriétés indiquées <impossible de lire la propriété XXX de la classe range>. Et Je n'ai aucune idée de pourquoi.
L'appel à cette fonction est la même dans les 2 cas:
STARNum = findColumn(Workbooks(Name_C).Worksheets("ARs_ST").UsedRange.Rows(1), "AR #")
 

Pièces jointes

  • R.content.1.jpg
    R.content.1.jpg
    60.5 KB · Affichages: 76
  • R.content.2.jpg
    R.content.2.jpg
    75.2 KB · Affichages: 71
  • R.content.3.jpg
    R.content.3.jpg
    60.6 KB · Affichages: 65

krollette

XLDnaute Nouveau
Re : VBA erreur execution 1004 lors d'un find

Bon, pour ceux que ça intéresse, j'ai finalement trouvé un palliatif.
Le problème vient manifestement du fait que la procédure automatique Worksheet_Change soit trigguée à partir d'une commande lancée dans une proc évènementielle d'une user form. (dès que je passe dans la fonction Worksheet_Change, le log de ma page Worksheets("ARs_ST"). UsedRange.Rows(1) est "tronquée", à savoir qu'un certain nombre de champs, pour une raison inconnue, se mettent à afficher <impossible de lire la propriété XXX de la classe range>. )

Mon palliatif:
je désactive les procédures évènementielles avant d'insérer ma ligne dans la page, et je les réactive ensuite.

(je remplace:
Workbooks(Name_C).Worksheets("Hot AR").Rows(2).Insert Shift:=xlShiftDown, CopyOrigin:=xlFormatFromRightOrBelow

par:

Application.EnableEvents = False
Workbooks(Name_C).Worksheets("Hot AR").Rows(2).Insert Shift:=xlShiftDown, CopyOrigin:=xlFormatFromRightOrBelow
Application.EnableEvents = True

Pour info, ça fonctionne bien maintenant, mais je ne sais toujours pas la raison du "disfonctionnement" que j'ai constaté.
 

Discussions similaires

Statistiques des forums

Discussions
312 215
Messages
2 086 326
Membres
103 180
dernier inscrit
Vcr