Amélioration macro historisation

Bonjour,

c'est possible que ça vienne de ça aussi, je suis allé sur un forum où quelqu'un avait ce souci aussi, quelqu'un a répondu sur ce type d'erreur:

"En gros, c'est parce qu'une application de pilotage à distance par "Create Object" ou new "machin.application", ou une opération quelconque dépendant d'une liaison s'est mal terminée ou a été interrompue en chemin par la fermeture prématurée de l'autre application. "

Apparemment ça peut arriver si tu fais référence à quelque chose qui n'existe plus...

Je vais donc essayer de te proposer une solution en changeant un peu la fonction...

Function Chercher(Byval valeur_cherchée,Byval table_matrice,Byval no_col_recherche As Long,Byval  no_col_résultat As Long,Byval  sens_recherche As Integer)
Dim tabRecherche
Application.Volatile

If sens_recherche <> -1 And sens_recherche <> 1 Then Exit Function 'vérification du sens
If no_col_recherche > table_matrice.Columns.Count Or no_col_résultat > table_matrice.Columns.Count Then Exit Function
    'vérification numéros de colonnes
tabRecherche = table_matrice

If sens_recherche = -1 Then 'de bas en haut
    dep = UBound(tabRecherche, 1)
    fin = LBound(tabRecherche, 1)
    pas = -1
ElseIf sens_recherche = 1 Then 'de haut en bas
    dep = LBound(tabRecherche, 1)
    fin = UBound(tabRecherche, 1)
    pas = 1
End If

For i = dep To fin Step pas
    If tabRecherche(i, no_col_recherche) = valeur_cherchée Then
        Chercher = tabRecherche(i, no_col_résultat)
        Exit For
    End If
Next i
End Function

J'ai rajouté Byval partout pour qu'il n'y est plus de lien entre le code et les tableaux auxquels il peut faire référence... Par défaut quand tu mets table_matrice et que tu mets une plage de cellule, il y a un lien entre cette variable et ta plage de cellules, ça peut poser problème j'imagine...

Tu me dirais si ça change quelque chose?

Malheureusement, même résultat.

Je pense qu'il n'aime pas du tout le fait d'aller chercher la fonction.

Dommage.

Je vais me pencher dessus cet après-midi en essayant une fonction INDEX/MAX.

Re,

mince dommage, ah oui une fonction INDEX(MAX(SI(;LIGNE();"")))?

Si tu as besoin d'un exemple je pourrai t'aider si tu le souhaites, je n'avais pas pensé à cette fonction qui pourrait faire l'affaire aussi, par contre il s'agira d'une formule matricielle à valider avec le raccourci: Ctrl + Shift + Entrée

Une formule matricielle peut être intégrée à une macro?

Si oui comment (par ce que j'ai 1000 lignes à remplir...) ?

Merci d'avance

Alors je viens de tester ça:

=INDEX('Historique commentaires'!F:F;MAX(SI('Historique commentaires'!A:A=I50;LIGNE(A:A))))

qui transformé par macro donne ça:

.Range("N" & ligne).FormulaArray = _
        "=INDEX('Historique commentaires'!C[-8],MAX(IF('Historique commentaires'!C[-13]=RC[-5],ROW(C[-13]))))"

Résultat ça marche!

Mais (et oui...) les lignes vides sont remplies par le titre de la colonne.

J'ai donc modifié la formule ainsi (qui fonctionne):

=SI(GAUCHE($I56;5)="Total";"";SI(ESTERREUR(INDEX('Historique commentaires'!F:F;MAX(SI('Historique commentaires'!A:A=I56;LIGNE(A:A)))));"";SI(INDEX('Historique commentaires'!F:F;MAX(SI('Historique commentaires'!A:A=I56;LIGNE(A:A))))=0;"";INDEX('Historique commentaires'!F:F;MAX(SI('Historique commentaires'!A:A=I56;LIGNE(A:A)))))))

qui transformé par macro donne ça:

.Range("N" & ligne).FormulaArray = _
                "=IF(LEFT(RC9,5)=""Total"","""",IF(ISERROR(INDEX('Historique commentaires'!C[-8],MAX(IF('Historique commentaires'!C[-13]=RC[-5],ROW(C[-13]))))),"""",IF(INDEX('Historique commentaires'!C[-8],MAX(IF('Historique commentaires'!C[-13]=RC[-5],ROW(C[-13]))))=0,"""",INDEX('Historique commentaires'!C[-8],MAX(IF('Historique commentaires'!C[-13]=RC[-5],ROW(C[-13])))))))"

La catastrophe, ça fait bugger la macro. J'en devient fou...

Re!

C'est déjà pas mal dis moi

Je te propose cette formule:

=SI(MAX(SI('Historique commentaires'!A:A=I50;LIGNE(A:A)))=0;"";INDEX('Historique commentaires'!F:F;MAX(SI('Historique commentaires'!A:A=I50;LIGNE(A:A)))))

ça regarde si la fonction max renvoie 0, si c'est le cas, le résultat est: "", sinon c'est la recherche

J'avais fait une autre formule en disant que si le résultat était le nom de la colonne, il mettait rien. Cela marchait.

J'ai quand même remplacé par ta formule

Enorme merci à toi.

Bonjour

En effet ça marche aussi, mais la formule serait plus longue en procédant comme ça je crois

En tout cas bravo pour avoir trouvé une solution de ton côté

Rechercher des sujets similaires à "amelioration macro historisation"