Ceci est une page optimisée pour les mobiles. Cliquez sur ce texte pour afficher la vraie page.

fonction excel

Y

youyou

Guest
Bonjour tout le monde,
j'ai créer une nouvelle fonction excel que je n'arrive pas à utiliser ou plus exactement qui me retourne une erreur d'execution(valeur non correcte).
quelqu'un peut m'aider ??
Merci d'avance (c'est très urgent)

Function Search(s As String)

Dim i, j As Integer

i = 0
j = 11


Sheets("Résultat").Cells(10, 3) = Sheets("1").Cells(7, 10)
Sheets("Résultat").Cells(10, 6) = Sheets("1").Cells(7, 7)
Sheets("Résultat").Cells(12, 3) = " & s & "

Do While i < 31
Do While j < 296

If Sheets(i).Cells(j, 1) = " & s & " Then

Sheets("Résultat").Cells(12, 5) = Sheets(i).Cells(j, 2)
Sheets("Résultat").Cells(12, 7) = Sheets(i).Cells(j, 3)
Sheets("Résultat").Cells(i + 16, 2) = Sheets(i).Cells(j, 4)
Sheets("Résultat").Cells(i + 16, 3) = Sheets(i).Cells(j, 5)
Sheets("Résultat").Cells(i + 16, 4) = Sheets(i).Cells(j, 6)
Sheets("Résultat").Cells(i + 16, 5) = Sheets(i).Cells(j, 7)
Sheets("Résultat").Cells(i + 16, 6) = Sheets(i).Cells(j, 8)
Sheets("Résultat").Cells(i + 16, 7) = Sheets(i).Cells(j, 9)
Sheets("Résultat").Cells(i + 16, 8) = Sheets(i).Cells(j, 10)
Sheets("Résultat").Cells(i + 16, 9) = Sheets(i).Cells(j, 11)

End If
j = j + 1
Loop
i = i + 1
Loop

End Function
 
J

Jean-Marie

Guest
Bonjour youyou

Je pense que l'erreur est provoquée par l'accès de la feuille [/i]index[/i] 0.

Autre chose, avant tes boucles While, tu fixes la valeur de i et de j, ce qui est bien.
Lors de l'exécution du code, au premier passage dans la boucle j prendra les valeurs 11 à 296, et au deuxième passage dans la 2ème boucle While j < 296
(quand I aura la valeur 1), j aura encore la valeur 296 et donc il n'y aura pas de passage dans la boucle.

Ce qui donne :

i = 0
Sheets("Résultat").Cells(10, 3) = Sheets("1").Cells(7, 10)
Sheets("Résultat").Cells(10, 6) = Sheets("1").Cells(7, 7)
Sheets("Résultat").Cells(12, 3) = " & s & "

Do While i < 31
j = 11
Do While j < 296

If Sheets(i+1).Cells(j, 1) = " & s & " Then

@+Jean-Marie
 
C

coyote

Guest
lorsque j'ai ce type de souci

je lance la macro pas à pas et/ou dans les boucles je laisse, en phase test, une instruction MSGBOX "I=" & I & " J=" J pour afficher les valeurs de la boucle pour savoir à quel moment çà coince.


par contre comment lancer ? Function Search(s As String) et End Function
(suis qu'un bidouilleur)

J'ai alors remplacer par Sub essai() et End Sub et je crois que çà marche sauf que je n'avais pas créé plus de 3 onglets ("Résultat", "1" et "2")

Je voudrais bien poursuivre mais faut que je me prépare pour le réveillon.

@ l'année prochaine
 
C

coyote

Guest
Après correction de JM voilà ce que le çà donne :


Sub essai()

Dim i, j As Integer

i = 0


Sheets("Résultat").Cells(10, 3) = Sheets("1").Cells(7, 10)
Sheets("Résultat").Cells(10, 6) = Sheets("1").Cells(7, 7)
Sheets("Résultat").Cells(12, 3) = " & s & "

Do While i < 31
j = 11
Do While j < 296

If Sheets(i).Cells(j, 1) = " & s & " Then

Sheets("Résultat").Cells(12, 5) = Sheets(i).Cells(j, 2)
Sheets("Résultat").Cells(12, 7) = Sheets(i).Cells(j, 3)
Sheets("Résultat").Cells(i + 16, 2) = Sheets(i).Cells(j, 4)
Sheets("Résultat").Cells(i + 16, 3) = Sheets(i).Cells(j, 5)
Sheets("Résultat").Cells(i + 16, 4) = Sheets(i).Cells(j, 6)
Sheets("Résultat").Cells(i + 16, 5) = Sheets(i).Cells(j, 7)
Sheets("Résultat").Cells(i + 16, 6) = Sheets(i).Cells(j, 8)
Sheets("Résultat").Cells(i + 16, 7) = Sheets(i).Cells(j, 9)
Sheets("Résultat").Cells(i + 16, 8) = Sheets(i).Cells(j, 10)
Sheets("Résultat").Cells(i + 16, 9) = Sheets(i).Cells(j, 11)

End If
j = j + 1
Loop
i = i + 1
Loop

End Sub

Déjà j'ai enregistré celà en SUB (macros) et non Function (connais pas) pour tester
ensuite il faut impérativement avoir les onglets suivants
Résultat
0
1
...
30

redonner la valeur j=11 après chaque fin de boucle Do While j < 296 puisqu'elle est imbriqué dans une autre boucle

Bon là elle ne plante pas mais je ne sais s'il celà donne le résultat escompté

Toutefois là j'ai un doute (c'est dommage que l'on est pas la feuille Excel pour vérifier)

Sheets("Résultat").Cells(12, 5) = Sheets(i).Cells(j, 2)
Sheets("Résultat").Cells(12, 7) = Sheets(i).Cells(j, 3)
Sheets("Résultat").Cells(i + 16, 2) = Sheets(i).Cells(j, 4)
Sheets("Résultat").Cells(i + 16, 3) = Sheets(i).Cells(j, 5)
Sheets("Résultat").Cells(i + 16, 4) = Sheets(i).Cells(j, 6)
Sheets("Résultat").Cells(i + 16, 5) = Sheets(i).Cells(j, 7)
Sheets("Résultat").Cells(i + 16, 6) = Sheets(i).Cells(j, 8)
Sheets("Résultat").Cells(i + 16, 7) = Sheets(i).Cells(j, 9)
Sheets("Résultat").Cells(i + 16, 8) = Sheets(i).Cells(j, 10)
Sheets("Résultat").Cells(i + 16, 9) = Sheets(i).Cells(j, 11)


Tout d'abord certaines des adresses de cellules sont fixes donc la valeur finale sera celle obtenu lors de la dernière boucle (voit pas alors l'intérêt de la boucle)

Je tente d'être plus clair

Sheets("Résultat").Cells(12, 5) : les valeurs vont se succéder pour finalement s'arrêter à celle-ci Sheets(10).Cells(295, 2)

Pareil pour
Sheets("Résultat").Cells(i + 16, 2) : la valeur I est toujours la même dans la boucle J

Enfin comme je disais plus haut si on n'a pas la feuille de départ, difficile de vérifier
 
R

Roland

Guest
Bonjour à tous
La différence entre SUB et FUNCTION

SUB est une macro ou procédure que l'on peut appeler par un bouton sur une feuille, un userform ou un e autre procédure

FUNCTION est assimilable aux fonctionx que vous trouvez dans le menu Insertion Foction et que vous pourrez utilisé dans une cellule d'une feuille.Les fonctions que vous créer sont utilisable dans Menu Insertion Fonction dans la rubrique Personnalisés qui apparaît dès qu'il en existe une dans votre code (a développé dans un module)
Ceci est trés interéssant car cela vous permet des traitements lourds dans les cellules. De plus si vous faites évoluer cette fonction les cellules l'utilisant sont implicitement mises à jour.

Je vous fait un petit exemple pour dans la journée

A+ Roland
 
Y

youyou

Guest
merci tout le monde et désolé pour ce retard forcé.
je n'arrive toujours pas à executer ma fonction qui prends comme argument le nom d'une personne à rechercher dans les différentes feuilles !!
est ce que le résultat d'une fonction doit être une seule valeur qui sera dans la cellule où a été executer la fonction ou ça peut être plusieurs valeurs dans des cellules différentes de la dite feuille !!!
merci d'avance pour votre aide
 

Discussions similaires

Réponses
17
Affichages
1 K
Les cookies sont requis pour utiliser ce site. Vous devez les accepter pour continuer à utiliser le site. En savoir plus…