Selection problématique [VBA] - VB/VBA/VBS - Programmation
Marsh Posté le 21-08-2005 à 14:44:10
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.
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à.
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.
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.
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.
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é) ?
Marsh Posté le 21-08-2005 à 19:29:23
Ok voici l'exemple :
http://cjoint.com/?ivutc3Tbqs
Merci par avance pour toute suggestion.
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
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.
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.