Plantage Excel 2004

Je viens de me rendre compte d'un truc :
Une fois que j'ai les #NOM?, si je vais dans Visual Basic Editor et que j'enregistre en cliquant sur la disquette dans la barre d'outil standard; en revenant sur Excel, et en double cliquant sur E11 (cellule contenant la fonction) et que je valide par "Entrée" les résultats ré-apparaissent.

Mais bon j'ai toujours le soucis que de temps en temps Excel plante quand j'ouvre le fichier ou quand j'enregistre après modifications.
 
Effectivement... je n'avais essayer que le changement dans colonne B

Etrange si l'on va dans la fonction et que l'on fait un semblant de modification, on revient sur la feuille et la tout fonctionne ! ! !

je comprend plus.
 
Ce qui me "rassure" c'est que je ne suis pas le seul à avoir ces soucis et fonctionnements aléatoires.
Peut être que le script de la fonction mériterait une réécriture totale mais je ne connais pas du tout ce langage donc je ne me vois pas le refaire.
 
Suivant tes besoins exact voir s'il est possible de passer par des formules cellules à la place du VBA !
 
j'ai eu une réponse d'un correspondant US qui disait ne pas avoir de plantage. Un souci lié à la VF ?
Bon, finalement c'est confirmé : le bug est bel et bien mis en évidence sur la version US aussi.

Le bon côté, c'est que ce n'est plus la peine de s'acharner. Le mauvais côté, c'est qu'il est hautement improbable qu'il y ait un correctif sur ce point. Reste à trouver une autre piste...
 
Suivant tes besoins exact voir s'il est possible de passer par des formules cellules à la place du VBA !
Je me suis posé la question en effet.
Mais je n'ai pas encore trouvé de réponse.
La formule cellule se rapprochant le plus de ce que je souhaite faire est RECHERCHEV mais cette formule ne me renvoie que le premier élément trouvé et pas les suivants.
Voilà pourquoi j'étais parti sur du VBA.

Sinon, merci Aliboron pour ce retour sur une autre version d'Excel.
 
Tu peux essayer avec un style comme ça (à optimiser) c'est pas clean mais ça fait pareil que ta fonction....
 
Oups le fichier joint (mauvaise manip)
 
Merci pour ta proposition.
En effet le résultat est identique.
Je vais voir si je peux l'adapter à mon "vrai" fichier qui diffère par le fait que le tableau de données est un fichier Excel à part et je fais donc des liaisons externes. Ce fichier contient pas loin de 5000 lignes.
En tout cas merci à tous les 2 pour vos propositions et pour votre aide mais je crois que j'ai mis le doigt sur un os.
 
Re,
Je viens de me lancer dans la réécriture de la fonction VBA.
Comme je découvre ce langage de programmation j'avoue que c'est encore difficile.
Cependant, j'ai pondu un truc qui n'est en rien optimisé je vous l'accorde.
Par rapport à ce que j'ai fait, j'ai un soucis que je n'arrive pas à corriger.
Quand la fonction s'exécute, j'ai un message d'erreur :
Erreur de compilation :

Sub ou Function non définie
Et avec la première ligne de ma fonction soulignée en jaune + le mot "Split" souligné comme sur l'image suivante.
Auriez-vous une idée? Merci d'avance
 
Je viens de me lancer dans la réécriture de la fonction VBA.../...
Pas sûr de tout bien comprendre, mais à vue de nez, je procéderais comme suit :

Function rechtableau(ByVal ValRecherche, ByVal TabMatrice As Variant, ByVal IndexCol) As String
Dim T As String, C As Range, Separateur As String

Separateur = " - "

For Each C In TabMatrice.Cells
If C.Value = ValRecherche Then
If T = "" Then
T = C.Offset(0, IndexCol).Text
Else
T = T & Separateur & C.Offset(0, IndexCol).Text
End If
End If
Next C

rechtableau = T
End Function
 
En fait, j'ai pas été très clair :
dès que j'utilise Split j'ai ce message d'erreur :
Erreur de compilation :

Sub ou Function non définie
avec la première ligne "Function...." souligné en jaune et le mot "Split" souligné en bleu

Dans cet exemple (le tiens en fait) j'ai simplement ajouté la déclaration "TabSplit() As String" et la ligne "TabSplit = Split(T, Separateur)" et ça ne fonctionne plus.

Bloc de code:
Function rechtableau(ByVal ValRecherche, ByVal TabMatrice As Variant, ByVal IndexCol) As String

Dim T As String, C As Range, Separateur As String, TabSplit() As String

Separateur = " - "

For Each C In TabMatrice.Cells
    If C.Value = ValRecherche Then
        If T = "" Then
            T = C.Offset(0, IndexCol).Text
        Else
            T = T & Separateur & C.Offset(0, IndexCol).Text
        End If
    End If
Next C
TabSplit = Split(T, Separateur)
rechtableau = T
End Function
 
En fait, j'ai pas été très clair :
dès que j'utilise Split j'ai ce message d'erreur : .../...
avec la première ligne "Function...." souligné en jaune et le mot "Split" souligné en bleu
Je pense que j'ai bien compris (mais ne peux pas tester ça pour le moment).

Mais a priori ça n'est pas utile, du moins tel que c'est dans l'exemple. C'est pour ça que j'ai simplifié ta fonction et que j'obtiens le résultat voulu (dans l'exemple) d'une façon moins compliquée. Et je n'ai donc pas de Split ni de tableaux, etc. ce qui évite le blocage.
 
dès que j'utilise Split j'ai ce message d'erreur : .../...
Bon, une vérification rapide me permet de confirmer que Split n'est pas une fonction VBA dans les versions Mac. Je présume que tu as copié (au moins en partie) cette macro sans avoir vérifié qu'elle était compatible avec les versions Mac.

Les versions Mac d'Excel embarquent la version 5 de VBA (et encore, pas toutes les fonctions). Sur les versions Windows d'Excel, ils sont passés à la version 6 qui intègre quelques fonctions supplémentaires (et je crois même que, pour Excel 2007, c'est une version 7). Je suppose que Split fait partie du lot.

Si c'est indispensable pour ton "vrai" cas de figure, peut-être peux-tu regarder du côté de ce message qui indique une fonction "MacSplit" qui semble être un contournement...
 
Bonsoir,

Peut être une piste, en allant http://silkyroad.developpez.com/excel/doublons/ notamment au paragraphe IV A Créer une liste sans doublons.
Ce code devrais te permettre après adaptation (2 colonnes, etc...) d'arriver à tes fins .

bon courage
 
Bonjour,
Merci à tous les 2 pour la fonction MacSplit() d'une part et pour la recherche de doublons.
Je pense que je vais m'en sortir avec ceci.

Pour ce qui est de la fonction Split, j'ai récupéré un support de cours ici même et du coup je me suis basé dessus mais c'est du VBA6 à priori.
Je ne savais pas qu'il y avait une différence entre les versions Mac et PC.
Merci pour vos conseils, vos idées et votre aide.
 
Je ne savais pas qu'il y avait une différence entre les versions Mac et PC.
Les versions Mac d'Excel utilisent un VBA 5, équivalent à celui d'Excel 97 pour Windows. Il y a quelques différences quand même, et quelques bugs spécifiques, mais pour l'essentiel les macros données comme compatibles avec Excel 97 peuvent être considérées comme utilisables (ou adaptables) sur Mac.

Si par contre il est précisé qu'elles ne sont compatibles qu'avec les versions 2000 et suivantes d'Excel pour Windows, il y a de gros risques d'y trouver des fonctions spécifiques à VBA 6, donc incompatibles avec les versions Mac. Ceci dit, il n'y en a pas énormément de ces fonctions et elles sont le plus souvent contournables. Mais ça demande déjà un peu de pratique.

Pour les contournements de fonctions spécifiques à Windows, on s'en sort souvent avec l'instruction MacScript qui permet de faire exécuter des boucles AppleScript à l'intérieur d'une macro en VBA (par exemple pour envoyer son classeur en PJ d'un email...)
 
D'accord, merci pour ces précisions.
Du coup, pour contourner le problème de Split, j'ai utilisé la fonction MacSplit proposé par toi même.
Et, oh miracle, ma fonction VBA fonctionne. Je ne pense pas qu'elle soit optimisée au maximum mais pour ce dont j'en ai besoin ca me suffira grandement.
Je n'ai plus de plantage Excel
Tout est donc "parfait" (pour moi)
Pour d'autres personnes si cela peut être utile je joins mon fichier de test avec la fonction et comment l'appeler avec un exemple simple.
En tout cas, merci à tous les 2 pour votre aide. Et finalement, j'ai appris pas mal de choses et j'en suis ravi.
 
Bonne(s) nouvelle(s) !

pour contourner le problème de Split, j'ai utilisé la fonction MacSplit proposée par toi même.
Et, oh miracle, ma fonction VBA fonctionne. Je ne pense pas qu'elle soit optimisée au maximum mais pour ce dont j'en ai besoin ca me suffira grandement.
Par curiosité, qu'est-ce qu'elle t'apporte de plus que celle que je te donnais ci-dessus, dans le message n°31 ? Ton besoin dans la "vraie" feuille est plus complexe que dans ton exemple ? Parce que, pour ce qui est de ton classeur exemple, je ne vois pas ce que ça fait de plus (mis à part l'intérêt d'utiliser des tableaux, bien entendu)...
 
Dans ton message 31 la fonction gardait les doublons, triplons, etc... et c'est ça que je voulais enlever.
S'il y avait plusieurs fois le même élément je ne voulais qu'il n'apparaisse qu'une seule fois dans ma cellule.
J'ai donc utiliser des tableaux pour comparer et ne garder qu'un élément de chaque.