[VBA] Selection problématique

Selection problématique [VBA] - VB/VBA/VBS - Programmation

Marsh Posté le 21-08-2005 à 14:28:25    

Bonjour,  
 
Quelqu'un pourrait-il m'expliquer pourquoi, lorsque le code ci-dessous est exécuté, il plante systématiquement (Erreur 1004) sur la dernière ligne (avant le end if) ? Parce que ça fait un paquet de temps que je cherche sans succès. Merci de m'aider à sortir de ce cul de sac !  
 
 
    Dim a As Integer
     
    NBL = Selection.Rows.Areas.Count
    'Si plusieurs lignes dans Sélection
    If NBL > 1 Then
     
        Dim formule As String
 
        'entête de formule (appel à une fonction perso)
        formule = "=PRECEDE(" & Cells(Selection.Areas(1).Row, 7).Address
         
       & nbsp;'construction de la suite de la formule  
        For i = 2 To (NBL - 1)
            formule = formule & ";" & Cells(Selection.Areas(i).Row, 7).Address
        Next i
         
        'fin de formule
         formule = formule & " )"
         
       'copie de la formule constituée
        Worksheets("Plan" ).Cells(Selection.Area s(NBL).Row, 8).Formula = formule
    End if
 
 
 
Pour info, je cherche juste à copier une formule dans une cellule, sachant que la formule en question est fonction des lignes sélectionnées (au moins 2), le code est exécuté par clic sur sur un bouton.

Reply

Marsh Posté le 21-08-2005 à 14:28:25   

Reply

Marsh Posté le 21-08-2005 à 14:44:10    

:hello:  
La fonction "PRECEDE" n'existe pas sur ma version française. Par curiosité, pourrais-tu m'indiquer ce que fait cette fonction ?
Le problème peut venir des indices ou des point-virgules.  
Il faudrait mettre un msgbox(formule) juste avant la copie de la formule, pour voir ce qu'elle contient.


Message édité par olivthill le 21-08-2005 à 15:05:34
Reply

Marsh Posté le 21-08-2005 à 18:32:37    

L'erreur 1004 vient souvent d'un indice qui n'existe pas.
 
Dans ton cas, très certainement, NBL prend la valeur 0.
 
En vérifiant ta ligne, je vois un espace entre Area et le s qui suit.
Si tu as fait un copier/coller, l'erreur peut venir de là.


---------------
Si on vous donne une info qui marche, DITES-LE!!!! ------ Si vous trouvez seul, AUSSI, votre solution peut servir à d'autres! ------ Je dois la majorité de mes connaissances à mes erreurs!
Reply

Marsh Posté le 21-08-2005 à 18:44:04    

Non l'espace en question ne figure pas dans le code, il s'agit d'un copier-coller malheureux et NBL contient la bonne valeur, le pb vient d'ailleurs ; j'ai déjà eu a insérer une formule dans une cellule via vba et leur construction était bien plus complexe, mais je pige pas.
 
Pour répondre à olivthill, PRECEDE est une fonction personnalisée et c'est pour cette raison que tu ne la trouveras pas dans ta version et ce qu'elle fait est spécifique au classeur sur lequel je travaille ; grosso-modo, elle détermine la ligne précédente de la ligne courante en fonction de critères variables ; sortie de ce contexte, elle n'a aucun intérêt.
 

Reply

Marsh Posté le 21-08-2005 à 18:46:36    

En me relisant je réalise une erreur qui pourrait prêter à confusion : je veux dire que la copie de formules via vba ne m'a jamais posé de problème jusqu'alors et que par contre cette fois-ci je sèche.

Reply

Marsh Posté le 21-08-2005 à 18:59:13    

Je persiste à dire que ce n'est pas la formule qui pose problème mais bien un indice qui passe à 0 là où il ne devrait pas.


---------------
Si on vous donne une info qui marche, DITES-LE!!!! ------ Si vous trouvez seul, AUSSI, votre solution peut servir à d'autres! ------ Je dois la majorité de mes connaissances à mes erreurs!
Reply

Marsh Posté le 21-08-2005 à 19:13:59    

Je veux bien te croire, mais il se trouve que j'ai vérifié les arguments et je n'ai rien trouvé de ce type. J'ai réalisé un exemple assez succint qui fixe le pb. Comment puis-je l'ajouter en pièce jointe sur le forum (ce n'est peut être pas autorisé) ?

Reply

Marsh Posté le 21-08-2005 à 19:22:18    

bonjour,
tu peux passer une pièce jointe ici
A+

Reply

Marsh Posté le 21-08-2005 à 19:29:23    

Ok voici l'exemple :
 
http://cjoint.com/?ivutc3Tbqs
 
Merci par avance pour toute suggestion.

Reply

Marsh Posté le 21-08-2005 à 19:34:24    

Il y a une petite erreur dans la zone commentaire du classeur précédent, correction :  
 
http://cjoint.com/?ivuyq1fS2J
 

Reply

Marsh Posté le 21-08-2005 à 19:34:24   

Reply

Marsh Posté le 21-08-2005 à 20:09:24    

Hé j'ai ma solution : il suffit de remplacer le point virgule dans cette ligne :
 
Formule = Formule & ";" & Cells(Selection.Areas(i).Row, 7).Address  
 
par une virgule  
 
Formule = Formule & "," & Cells(Selection.Areas(i).Row, 7).Address  
 
Merci encore à MichelXld (Excel Download) à qui je dois cette solution. Bonne nuit les enfants.

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed