Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

Comment faire une function "SPLIT" avec VBA?

3 réponses
Avatar
luck82
Bonsoir;
Après avoir retourné les fonctions Excel dans tous les sens; je n'arrive pas
à faire ce que je veux, c'est pourquoi je pense à une function avec la
fonction split.
En fin de post, mon classeur pour plus de compréhension.

Dans nom classeur, en colonne A des produit, colonne B des ref, colonne C
des lots en colonne D les rendement par lots.
Dans la colonne A il y a des plages nommées; une plages par type de produit.
Dans la colonne D (rendement) il y a plusieurs valeurs de rendement dans une
même cellule (les différentes valeur sont séparées par des " ; "), parfois
il y a aussi du texte ou bien rien.

Ce que je voudrais faire en colonne F c'est la moyenne des rendements par
produit.
J'arrive grâce à VBA à extraire avec la fonction SPLIT les valeurs (colonne
D) dans d'autre cellules (a condition que le nombre des valeurs soit fixe (2
valeurs par exemple) mais bon pas très pratique quand même... .

Je pense donc à une petite "Private function exctration()" qui fait:
Cible la/les plages nommées en colonne A
Se décale en colonne D
Extrait l'enssemble des valeurs de la plage grâce à une fonction split.
Stocke ses valeurs dans des variables
Si la cellules contient du texte ou rien alors ne rien stocker
Me renvois la moyenne.
Passe à la plage nommée suivante.

Je connais encore très peu le VBA et encore moins les functions.
Si ma démarche est la bonne, quelqu'un peut il ne donner un petit coup de
main.
Je ne sais pas comment (dans ce cas) atteindre une plage nommée.
Stocker les valeurs extraites dans un nombre de variable fonction du nombre
de valeurs extraites.
Ici mon classeur: http://cjoint.com/?klupAq2vtn

Merci par avance de votre aide

Bonne soirée.

3 réponses

Avatar
JB
Bonsoir,

http://cjoint.com/?klvuoJVjqr

Function MoyenneChamp(champ As Range) As Double
Dim temp As Double, nb As Integer
temp = 0
nb = 0
For Each c In champ
If c <> Empty Then
If IsNumeric(Left(c.Value, 1)) Then
a = Split(c.Value, ";")
For i = LBound(a) To UBound(a)
temp = temp + Val(a(i))
nb = nb + 1
Next i
End If
End If
MoyenneChamp = temp / nb
Next c
End Function

JB
http://boisgontierjacques.free.fr

On 11 oct, 20:25, "luck82" wrote:
Bonsoir;
Après avoir retourné les fonctions Excel dans tous les sens; je n'arr ive pas
à faire ce que je veux, c'est pourquoi je pense à une function avec la
fonction split.
En fin de post, mon classeur pour plus de compréhension.

Dans nom classeur, en colonne A des produit, colonne B des ref, colonne C
des lots en colonne D les rendement par lots.
Dans la colonne A il y a des plages nommées; une plages par type de pro duit.
Dans la colonne D (rendement) il y a plusieurs valeurs de rendement dans une
même cellule (les différentes valeur sont séparées par des " ; ") , parfois
il y a aussi du texte ou bien rien.

Ce que je voudrais faire en colonne F c'est la moyenne des rendements par
produit.
J'arrive grâce à VBA à extraire avec la fonction SPLIT les valeurs (colonne
D) dans d'autre cellules (a condition que le nombre des valeurs soit fixe (2
valeurs par exemple) mais bon pas très pratique quand même... .

Je pense donc à une petite "Private function exctration()" qui fait:
Cible la/les plages nommées en colonne A
Se décale en colonne D
Extrait l'enssemble des valeurs de la plage grâce à une fonction spli t.
Stocke ses valeurs dans des variables
Si la cellules contient du texte ou rien alors ne rien stocker
Me renvois la moyenne.
Passe à la plage nommée suivante.

Je connais encore très peu le VBA et encore moins les functions.
Si ma démarche est la bonne, quelqu'un peut il ne donner un petit coup de
main.
Je ne sais pas comment (dans ce cas) atteindre une plage nommée.
Stocker les valeurs extraites dans un nombre de variable fonction du nomb re
de valeurs extraites.
Ici mon classeur: http://cjoint.com/?klupAq2vtn

Merci par avance de votre aide

Bonne soirée.


Avatar
JB
http://cjoint.com/?klvC3bPA2T

JB

On 11 oct, 21:21, JB wrote:
Bonsoir,

http://cjoint.com/?klvuoJVjqr

Function MoyenneChamp(champ As Range) As Double
Dim temp As Double, nb As Integer
temp = 0
nb = 0
For Each c In champ
If c <> Empty Then
If IsNumeric(Left(c.Value, 1)) Then
a = Split(c.Value, ";")
For i = LBound(a) To UBound(a)
temp = temp + Val(a(i))
nb = nb + 1
Next i
End If
End If
MoyenneChamp = temp / nb
Next c
End Function

JBhttp://boisgontierjacques.free.fr

On 11 oct, 20:25, "luck82" wrote:



Bonsoir;
Après avoir retourné les fonctions Excel dans tous les sens; je n'a rrive pas
à faire ce que je veux, c'est pourquoi je pense à une function avec la
fonction split.
En fin de post, mon classeur pour plus de compréhension.

Dans nom classeur, en colonne A des produit, colonne B des ref, colonne C
des lots en colonne D les rendement par lots.
Dans la colonne A il y a des plages nommées; une plages par type de p roduit.
Dans la colonne D (rendement) il y a plusieurs valeurs de rendement dan s une
même cellule (les différentes valeur sont séparées par des " ; "), parfois
il y a aussi du texte ou bien rien.

Ce que je voudrais faire en colonne F c'est la moyenne des rendements p ar
produit.
J'arrive grâce à VBA à extraire avec la fonction SPLIT les valeur s (colonne
D) dans d'autre cellules (a condition que le nombre des valeurs soit fi xe (2
valeurs par exemple) mais bon pas très pratique quand même... .

Je pense donc à une petite "Private function exctration()" qui fait:
Cible la/les plages nommées en colonne A
Se décale en colonne D
Extrait l'enssemble des valeurs de la plage grâce à une fonction sp lit.
Stocke ses valeurs dans des variables
Si la cellules contient du texte ou rien alors ne rien stocker
Me renvois la moyenne.
Passe à la plage nommée suivante.

Je connais encore très peu le VBA et encore moins les functions.
Si ma démarche est la bonne, quelqu'un peut il ne donner un petit cou p de
main.
Je ne sais pas comment (dans ce cas) atteindre une plage nommée.
Stocker les valeurs extraites dans un nombre de variable fonction du no mbre
de valeurs extraites.
Ici mon classeur: http://cjoint.com/?klupAq2vtn

Merci par avance de votre aide

Bonne soirée.- Masquer le texte des messages précédents -


- Afficher le texte des messages précédents -



Avatar
luck82
Merci beaucoup, je vais tester ça aujourd'hui.

Bonne journée


"JB" a écrit dans le message de
news:

http://cjoint.com/?klvC3bPA2T

JB

On 11 oct, 21:21, JB wrote:
Bonsoir,

http://cjoint.com/?klvuoJVjqr

Function MoyenneChamp(champ As Range) As Double
Dim temp As Double, nb As Integer
temp = 0
nb = 0
For Each c In champ
If c <> Empty Then
If IsNumeric(Left(c.Value, 1)) Then
a = Split(c.Value, ";")
For i = LBound(a) To UBound(a)
temp = temp + Val(a(i))
nb = nb + 1
Next i
End If
End If
MoyenneChamp = temp / nb
Next c
End Function

JBhttp://boisgontierjacques.free.fr

On 11 oct, 20:25, "luck82" wrote:



Bonsoir;
Après avoir retourné les fonctions Excel dans tous les sens; je n'arrive
pas


à faire ce que je veux, c'est pourquoi je pense à une function avec la
fonction split.
En fin de post, mon classeur pour plus de compréhension.

Dans nom classeur, en colonne A des produit, colonne B des ref, colonne
C


des lots en colonne D les rendement par lots.
Dans la colonne A il y a des plages nommées; une plages par type de
produit.


Dans la colonne D (rendement) il y a plusieurs valeurs de rendement dans
une


même cellule (les différentes valeur sont séparées par des " ; "),
parfois


il y a aussi du texte ou bien rien.

Ce que je voudrais faire en colonne F c'est la moyenne des rendements
par


produit.
J'arrive grâce à VBA à extraire avec la fonction SPLIT les valeurs
(colonne


D) dans d'autre cellules (a condition que le nombre des valeurs soit
fixe (2


valeurs par exemple) mais bon pas très pratique quand même... .

Je pense donc à une petite "Private function exctration()" qui fait:
Cible la/les plages nommées en colonne A
Se décale en colonne D
Extrait l'enssemble des valeurs de la plage grâce à une fonction split.
Stocke ses valeurs dans des variables
Si la cellules contient du texte ou rien alors ne rien stocker
Me renvois la moyenne.
Passe à la plage nommée suivante.

Je connais encore très peu le VBA et encore moins les functions.
Si ma démarche est la bonne, quelqu'un peut il ne donner un petit coup
de


main.
Je ne sais pas comment (dans ce cas) atteindre une plage nommée.
Stocker les valeurs extraites dans un nombre de variable fonction du
nombre


de valeurs extraites.
Ici mon classeur: http://cjoint.com/?klupAq2vtn

Merci par avance de votre aide

Bonne soirée.- Masquer le texte des messages précédents -


- Afficher le texte des messages précédents -