Fonction Split - Erreur de Compilation

Spitnolan08

XLDnaute Barbatruc
Bonsoir le forum,
et les amis toujours présents :)

J'ai un souci qui me fait devenir chèvre : j'ai écrit un code avec la fonction split qui fonctionne très bien dans un fichier mais qui bogue dans un autre sans raison apparente.

Erreur de compilation :
Nombre d'arguments incorrect ou affectation de propriété non valide (erreur 450)


J'ai donc créé une macro en test dans un fichier qui contient les feuilles sources utilisées pour la fonction SPlit et tout fonctionne normalement.

Puis j'ai déplacé (copier-coller) cette macro dans le nouveau fichier qui contient mes userform avec lesquels cette macro doit être mise en oeuvre et là ça bogue !

En fait, la fonction Split n'est plus reconnue par VBA !
Le S de Split se transforme en minuscule et je ne peux même pas lancer la macro. Alors que le reste du code se déroule normalement si je neutralise la ligne contenant Split.
J'ai vérifié les bibliothèques : dans le nouveau classeur, les mêmes références sont cochées et il yen a même plus ...
Je n'ai pas mis d'Option Explicit dans un classeur et pas dans l'autre.

J'ai déjà fait de nombreuses tentatives mais aucune ne résout le problème :mad:
Avez vous une idée ???

Je vous met le code, à tout hasard, mais je ne pense pas que la solution vienne de là puisqu'il fonctionne ailleurs.

Code:
    For i = 3 To 12 
        Y = Split(WbBDVenteShBDFact.Cells(k, i + 3), "|", -1)
        .Activate
        .Range(Cells(i, 57), Cells(i, 78)).ClearContents  '***Efface les données préexistantes de la zone de saisie avant la nouvelle saisie
        For j = 0 To UBound(Y) - 1
            On Error Resume Next   '***Traite le cas d'une cellule vierge ou ne contenant qu'une seule valeur de la base de départ
            .Cells(i, 57 + j) = Y(j)
        Next j
    Next i

Merci de votre aide
 

Lone-wolf

XLDnaute Barbatruc
Bonsoir Spitnolan

Sans fichier, pas facile de faire le test.

Il y a déjà ce nom qui m'interpelle WbBDVenteShBDFact. Mon intuition me dit que

WbBDVente c'est le classeur et ShBDFact est la feuille (mais je peux me trompé). Si tu est dans ce classeur son nom est inutile. Si la feuille s'appelle BDFact, Sh pour moi doit être une variable ET Wb aussi mais inutile comme expliqué.

Dim Sh As Worksheet

Set Sh = Sheets("BDFact")

With Sh
For i = 3 To 12
Y = Split(.Cells(k, i + 3), "|")
For j = 1 To UBound(Y) - 1
 

Spitnolan08

XLDnaute Barbatruc
Bonsoir Lone-Wolf,
Merci de ta réponse.

Tout d'abord, je ne peux pas joindre le fichier car beaucoup trop lourd et complexe.
D'autant que (peut être n'ai je pas été assez clair) il y a plusieurs fichiers en interaction.
Il n'est donc malheureusement pas inutile de spécifier le classeur de référence. Et cela est réalisé en variable Public dans un module standard spécifique. Avec affectation de variable dans ThisWorkbook :
Code:
Set WbBDVenteShBDFact = Workbooks("BDvente-2017-02-15.xls").Sheets("BDFacture")
Comme je l'ai indiqué dans mon premier post, la macro fonctionne parfaitement si je neutralise la ligne avec Split.
Et surtout elle fonctionne en intégralité dans un autre classeur.
J'ai même essayé de remplacer
Code:
    Y = Split(WbBDVenteShBDFact.Cells(k, i + 3), "|", -1)
par
Code:
A =    WbBDVenteShBDFact.Cells(k, i + 3)
Y = Split(A, "|", -1)
Ce qui ne change rien au problème.
La variable A est bien définie (Exemple : 1086956.52||||0|1||41348|41348|41289|0|0|0|19.6|41348|1105000|923913.05|||181086.95|||)
mais je ne peux pas la "spliter"

Enfin, bien que tu aies raison sur l'inutilité de spécifier le classeur lorsqu'une macro est située dans le dit classeur, cela ne nuit en rien au code de le faire.
 

Spitnolan08

XLDnaute Barbatruc
Bonjour mapomme,
ben au moins y'en a pas qua pour ta pomme ;)

A tout hasard:
et il fait bien les choses !

  • dans l'environnement de travail VBA, vérifier que les références cochées dans le fichier qui fonctionne sont aussi cochées dans le fichier qui bogue
Ca j'avais précisé l'avoir déjà fait mais il fallait rester open à toute éventualité comme l'avait fait Lone-Wolf.
Donc merci de ce rappel

  • ou remplacer Split(xxx) par VBA.Split(xxx)
Et là, miracle !
Je ne sais pas pourquoi, mais ça fonctionne (sans S majuscule à Split d'ailleurs...????!!!)
Pourvu que ça dure !

J'en profite pour savoir si quelqu'un connait la raison pour laquelle l'instruction " ClearContents" appliquée à un objet Range ne fonctionne pas quand la feuille concernée n'est pas activée ? (Je n'ai pas fait de recherche sur le sujet en dehors de l'aide VBA)

Merci mapomme d'amour:)
:D

heu...enfin... si tu es de l'ancien sexe faible ;)
 

mapomme

XLDnaute Barbatruc
Supporter XLD
Bonjour Spitnolan08 :),

(...) Ca j'avais précisé l'avoir déjà fait mais il fallait rester open à toute éventualité comme l'avait fait Lone-Wolf. (...)
Je n'avais pas fait attention :cool:
(...) Merci mapomme d'amour:)
:D heu...enfin... si tu es de l'ancien sexe faible ;)
Hé bien non! Suis pas une femme! J'apprécie malgré tout l'intention mais on en restera là! ;):D
 

job75

XLDnaute Barbatruc
Bonjour à tous,

Vérifier qu'une feuille parasite de type ThisWorkbook ne s'est pas glissée dans le VBA.

Cela arrive assez souvent, surtout sur Excel 2003, quand on a le fichier ouvert en même temps qu'Excel-downloads.

Une telle feuille fait que des fonctions lambda ne sont plus reconnues.

Impossible de la supprimer, le seul remède que j'ai trouvé c'est de refaire le fichier.

A+
 

job75

XLDnaute Barbatruc
Re,

Concernant .ClearContents, cette méthode fonctionne même s'il ne s'agit pas de la feuille active.

Par contre il y a des problèmes avec des cellules fusionnées.

Dans ce cas vider le Range par = "" ou = Empty.

A+
 

Spitnolan08

XLDnaute Barbatruc
Bonsoir le forum,
JCGL :)
Lone Wolf, mapomme, Job 75

Par ordre :
JCGL, C'est un plaisir de te faire plaisir ! Il est partagé et il serait encore plus grand si on se recroisait sur des fils "actifs"
Qui sait...
Mais pour l'heure je ne suis pas vraiment disponible et j'ai énormément perdu en VBA. D'ailleurs mon avatar s'en est rendu compte puisqu'il s'est arrêté de tourner... :eek:

mapomme, j'aurais du regarder dans ton profil : ton sexe est identifié... :oops: Je n'avais pas fait attention:cool: Mais de toute façon la tentation état trop grande ;):D

Job75, je ne sais pas réellement ce que tu entends par feuille parasite, mais il ne semble pas y en avoir dans mon fichier.
Pour ClearContents, je ne comprends pas non plus. Je ne crois pas avoir eu de problème par le passé mais là ça marche pas ! et sans cellules fusionnées. Je vais donc contourner le problème.
Sinon je pense que pour toi il n'existe pas de MISSION IMPOSSIBLE ;):p si on fait abstraction du 75...

Merci à tous

Ciao a tutti
Longue vie au forum et surtout à toutes celles et ceux qui le font vivre au quotidien.
Que ce soit DavidXLD ou vous, avec en premier lieu les grands anciens qu'on nomme maintenant les personnalités
 
Dernière édition:

Spitnolan08

XLDnaute Barbatruc
Bonsoir le Forum,

Pour information, en complément du post de Job75, j'ai retrouvé dans un de mes codes la mention suivante qui peut servir à tous

'***Attention : pour que Split fonctionne dans un UF ou dans un autre classeur, il faut utiliser la syntaxe VBA.split(...)

Donc j'avais déjà du rencontrer le problème et trouver la solution à l'époque...
et cela explique la différence de fonctionnement de code dans mes deux utilisations même si ça n'éclaire pas sur les raisons profondes...:confused:

Encore merci Job75 :)
Bonne continuation
 

Dranreb

XLDnaute Barbatruc
Bonsoir.
C'est pas possible cette histoire.
Vous avez du vous écrire une Function split ou une Sub split quelque part, avec un "s" minuscule, non ? Ou même déclaré une variable split ?
Le seul autre cas que je connaisse où des procédure VBA les plus courantes qui soient peuvent ne plus être reconnues c'est s'il traine un MANQUANT dans les références cochées.
 

Spitnolan08

XLDnaute Barbatruc
Bonsoir Bernard,

Merci pour ces suggestions mais non à toutes les questions...

D'ailleurs, je crois qu'il n'est pas possible de déclarer une variable avec le nom d'une fonction native VBA.:rolleyes:
Le seul autre cas que je connaisse où des procédure VBA les plus courantes qui soient peuvent ne plus être reconnues c'est s'il traine un MANQUANT dans les références cochées
Il n'est jamais trop tard pour changer ses croyances.;)
 

Discussions similaires

Réponses
12
Affichages
537
Réponses
3
Affichages
457

Statistiques des forums

Discussions
311 733
Messages
2 082 009
Membres
101 865
dernier inscrit
MLL