Fractionner et donner des valeurs

Tout d'abord, bonjour à tout le monde

je suis nouveau sur le forum que je trouve très intéressant

je vous expose mon problème si résolution est possible

voilà je souhaiterais fractionner une colonne et n'extraire que les nombres, ensuite donner une valeur à chaque nombre et finalement créer une colonne annexe qui m'affichera le total des nombres

je vous joins un exemple en espérant être assez clair dans mes explications

vous souhaitant à tous une excellente journée

21essaicolonne.xlsx (9.23 Ko)

bonjour,

une proposition via une fonction personnalisée (vba)

18essaicolonne.xlsm (18.06 Ko)

appel de la fonction en excel

=calcspe(texte,chaine d'equivalence)

où texte est la phrase à utiliser pour le calcul

où chaine d'équivalence est une liste de valeurs de remplacement pour une sequence de nombres successifs commençant à 1. La dernière valeur est la valeur qui s'applique pour toutes les autres valeurs supérieures.

par exemple, 1 sera remplacé par 3, 2 par 2, 3 par 1, 4 par 0 et toutes les valeurs supérieures à 4 par -1

"3,2,1,0,-1" 

Bonsoir h2SO4 et merçi pour votre réponse

je vais essayer mais cela me semble un peu flou

je vous tiendrai au courant

Bonsoir h2SO4 et merçi pour votre réponse

je vais essayer mais cela me semble un peu flou

je vous tiendrai au courant

bonjour,

voici la fonction personnalisée :

Function calcspe(a, Optional v = "3,2,1,0,-1", Optional verbose = False)
'--------------------------------------------------------------------------
' calcspe : fonction de remplacement de nombres d'une chaine de caractères par d'autres valeurs et somme de ces valeurs
' 2 caractères alphabétiques qui se suivent reçoivent une valeur -3
' on soustrait 0,5 par nombre manquants si le nombre de nombres est inférieur à 6
' a = chaine de caractères
' v = liste des valeurs de remplacement avec par défaut 1 à remplacer par 3, 2 par 2, 3 par 1, 4 par 0 et toutes les autres valeurs par -1
' verbose (vrai/faux) pour afficher ou non le détail du calcul, faux par défaut, on n'affiche que le résultat final.
'---------------------------------------------------------------------------
    tv = Split(v, ",")
    ReDim vf(UBound(tv))
    For i = LBound(tv) To UBound(tv)
        If i = UBound(tv) Then vf(0) = "+" & tv(i) Else vf(i + 1) = "+" & tv(i)
    Next i
    b = ""
    i = 1
    Do While i <= Len(a)
        c = Mid(a, i, 1)
        If c Like "#" Then
            c = Val(Mid(a, i))
            ch = ""
            ctr = ctr + 1
            i = i + Len(c)
            If Val(c) <= UBound(vf) Then c = vf(c) Else c = vf(0)
        ElseIf c Like "[A-z]" Then
            ch = ch & c
            c = ""
            i = i + 1
        Else
            c = ""
            flagc = False
            i = i + 1
        End If
        If Len(ch) = 2 And ctr > 0 Then b = b & "-3": ctr = ctr + 1: ch = ""
        If c <> "" Then b = b & Replace(c, "+-", "-")
        If ctr = 6 Then Exit Do
    Loop
    For i = 6 To ctr + 1 Step -1 'enleve 0,5 si nombre de nombres < 6
        b = b & "-0,5"
    Next i
    r = Application.Evaluate(Replace(b, ",", "."))
    calcspe = IIf(verbose, "(" & b & ")=" & r, r)
End Function

comment la rendre disponible dans un classeur ?

1. sélectionner et copier le code de la macro sur le forum (CTRL-C)

2. ouvrir le classeur qui convient en excel

3. ourvir l'éditeur VBA (alt-F11)

4. faire insérer module (menu, insérer->module)

5. coller le code (CTRL-V)

6. retour à excel (alt-F11)

7.sauver le document avec les macros, (format xlsm)

8. la fonction est disponible pour le classeur et peut être utilisée comme n'importe quelle autre fonction Excel.

Bonsoir,

Je vous remerçie grandement

pour votre travail et votre amabilité

Bonsoir h2so4

encore un grand merçi pour votre travail

j'ai oublié de vous dire qu'il faudrait éliminer les chiffres entre parenthèses ceux-là ne comptent pas

de plus les lettres ont une certaine importance car ce sont des catégories

donc en lettres , il y a les "a", les "m", les "p", les "h", les "s" et les "c"

après, le système de comptage reste le même

donc si je m'explique bien une fonction pour les "a", une autre pour les "m" et ainsi de suite pour ne pas mélanger les résultats si plusieurs types de lettres sur la même ligne

Ensuite , quand je tape la formule, elle me renvoie #NOM comme résultat

je vous joins le classeur que je vous avais envoyé avec une seconde feuille

merçi et merçi encore et bravo au site

10essaicolonne-1.xlsm (27.82 Ko)

bonsoir,

problème du #nom corrigé dans ton fichier (mauvais nom de module) et ajout de la non-prise en compte des données entre parenthèses.

Par contre, je n'ai pas compris ce qu'il faut faire pour ceci :

donc si je m'explique bien une fonction pour les "a", une autre pour les "m" et ainsi de suite pour ne pas mélanger les résultats si plusieurs types de lettres sur la même ligne

17essaicolonne-1.xlsm (32.55 Ko)

bonjour,

et tout d'abord encore un grand merçi pour ton aide

voilà,

il y a plusieurs catégories derrière les nombres: des 'a' exemple 2a 3a Da . des 'p' exemple tp 1p 10p et donc 6 catégories : des a, p , m, h, s, et c

et parfois sur une ligne, ils sont mélanges et je n'ai besoin que d'une catégorie exemple: 3a 6m 4h 7s 4p 3c mais sur cet exemple, il n'y a que les 'p' qui n'intéressent,

donc 0 pour le '4p' et 5x0.5points pour 5 cases vides (comme si les autres données ne comptaient pas)

est ce possible ?

et ensuite que dois je marquer dans la barre quand je me sers du module , pour l'exemple de la feuille 2: =calcspe(A1:A25) ou bien dois-je marquer autre chose

merçi encore de ton aide

Jacques

re-bonjour,

les nombres sont-ils toujours associés à une catégories ? chaque paire nombre-catégorie est-elle toujours séparée des autres paires par un espace ?

merci de mettre un exemple de toutes les structures possibles. (voici celles que j'ai identifiées, merci de compléter)

structure : nombre,lettre,espace 1a ou 21p

structure : lettre,lettre,espace Da

structure : nombre et lettre entre parenthèse,espace (4b)

structure : ...

la chaine de caractères qui sert de paramètre au calcul peut comprendre toutes les combinaisons de ces structures.

ps pour éviter des aller-retours incessants merci de mettre un fichier avec toutes les structures possibles à traiter

pour l'appel de la fonction voir dans le fichier : =calcspe(LA phrase à analyser, optionnel chaine d'équivalence, optionnel affichage du détail de la somme (vrai,faux)).

RE bonjour,

voilà je vous joins le même fichier avec une feuille en plus ou il y a un échantillon assez complet de mon problème

je vous souhaite une bonne journée

Jacques

14essaicolonne-1.xlsm (35.84 Ko)

bonjour,

très bien merci ! et comment faire le calcul pour :

  • les séquences avec la même catégorie, applique-t-on toujours les mêmes substitutions pour les mêmes nombres (c.à.d., 1=3,2=2,3=1,4=0 et -1 pour toute autre valeur) ou est-ce dépendant de la catégorie ?
  • les séquences avec des catégories différentes ?
  • pour "Inédite" ?

oui tout ce qui n'est pas 3,2,1,0, tout les autres sont moins 1 donc inédite = 6x-0.5=-3

et ensuite me dire quelle action exacte faire avec le module calcspe exemple : =calcspe(A2:A10) pour les lignes de la colonne désignée

encore un grand merçi pour votre aide je crois que je vais prendre un peu de cours sur le site pour pouvoir mieux comprendre le vba

bonne soirée à vous

Jacques

bonjour,

voici la fonction adaptée.

mettre dans une cellule la formule calcspe(texte,lettre,verbeux,chaine_d_equivalence)

  • texte : est LA cellule (référence à une seule cellule)
  • lettre : est la lettre dont il faut tenir compte pour la somme (a,p,m,h,s,c ou rien) (par defaut, il n'y a pas de lettre précisée, on fait donc le calcul quelles que soient les lettres rencontrées).
  • verbeux : mettre Vrai ou Faux, si VRAI affiche le détail du calcul et la lettre utilisée (par défaut, la valeur est FAUX, on n'affiche que le résultat)
  • chaine_d_equivalence : chaine avec les valeurs de remplacement pour des valeurs en séquence commençant à 1 ("valeur pour 1,valeur pour 2,valeur pour 3,valeur pour le reste) la dernière valeur est la valeur de remplacement pour toutes les autres valeurs. (par défaut la valeur est "3,2,1,0,-1", on remplace 1 par 3, 2 par 2, 3 par 1, 4 par 0 et toutes les autres valeurs supérieures par -1)

>Exemple d'utilisation :

si A1 contient 1h2h3hDh6h, et que l'on souhaite le résultat du calcul spécial pour la lettre "h" en B1. en B1 mettre la formule =calcspe(A1,"h") en prenant les valeurs par défaut pour verbeux et chaine_d_equivalence. Le premier paramètre ne peut pas être une plage de plusieurs cellules. Il faut mettre une formule par résultat à calculer.

j'ai également mis des formules spécifiques pour calculer selon la lettre

calca,calcp,calcm,calch,calcs et calcc, qui s'utilisent comme calcspe, sauf qu'il ne faut pas mettre la lettre comme paramètre.

exemple =calca(A1) pour faire le calcul sur base de A1 avec la lettre a,=calch(A2) pour faire le calcul sur base de A2 avec la lettre h

Bonjour h2so4,

Tout d'abord, un grand merçi, ce que tu as fait est formidable pour moi

je tiens à te remerçier ainsi que tout le site

et pour ce faire je vais m'abonner premium

je te souhaite une excellente journée

Jacques

Bonjour,

et pour ce faire je vais m'abonner premium

Sache que je n'en retire aucun avantage, mais effectivement tu permets ainsi de soutenir Sébastien, le créateur/propriétaire du site.

Moi j'aurais préféré que tu ne me mettes pas une note négative (mais je suppose qu'il s'agit d'une erreur )

mais je vais te mettre une super note car tu le mérites vraiment

Re bonjour heso4,

Tu vas vraiment me prendre pour un âne mais je ne trouve pas ou voter pour un membre, je vois les votes reçus mais pas ou voter

bonjour,

tu as la possibilité d'indiquer si tu trouves une réponse utile ou pas, en cliquant sur une des icônes que tu trouves en bas à droite de chaque message. Mais ne te casse pas la tête, tes remerciements me conviennent très bien !

berjac

Bonsoir h2so4

je suis très très content du travail que tu as fait pour moi et franchement ça fait plaisir de voir qu'il y a encore des gens qui aident les autres

Rechercher des sujets similaires à "fractionner donner valeurs"