Formule ou maccro suivant un mot trouvé donne une valeur

6 réponses
Avatar
suze32
Bonjour =E0 tous,

Je suis en train d'=E9tablir un fichier excel pour comptes courant.
J'extraie sur excel les donn=E9es provenant de mon compte bancaire et dans =
la colonne C qui se nomme "TYPE", j'aimerais faire appara=EEtre le type de =
d=E9bit ou cr=E9dit :
-CB
-CHEQUE
-PRELMT


L'information se trouve dans la colonne B "Libell=E9" que j'ai extraite de =
ma banque. En voici en exemple:
"Leclerc paiement par carte"
"4891000 ch=E8que =E9mis"
"Pr=E9l=E8vement Orange"

Il faudrait donc une formule ou maccro qui fait appara=EEtre le type suivan=
t le mot que contient la cellule :=20
Si "carte" alors "CB" ou si "ch=E8que" alors "CHEQUE" ou si "Pr=E9l=E8vemen=
t" alors "PRELMT"

Merci pour votre aide

Suzy

6 réponses

Avatar
MichD
Bonjour,

Dans la feuille module où l'action se déroule, copie le code suivant et,
à chaque fois que tu modifies le contenu de la colonne B, si les cellules
de cette dernière contiennent un des 3 mots désirés, sur la même ligne
s'inscrit en colonne C le résultat désiré.
'-------------------------------------------------------------------
Private Sub Worksheet_Change(ByVal Target As Range)
Dim Rg As Range, C As Range
Application.EnableEvents = False
Set Rg = Intersect(Target, Columns(2))
If Not Rg Is Nothing Then
For Each C In Rg
If InStr(1, C.Value, "Chèque", vbTextCompare) > 0 Then
C.Offset(, 1) = "CHEQUE"
ElseIf InStr(1, C.Value, "Carte", vbTextCompare) > 0 Then
C.Offset(, 1) = "CB"
ElseIf InStr(1, C.Value, "Prélèvement", vbTextCompare) > 0 Then
C.Offset(, 1) = "PRELMT"
Else
C.Offset(, 1) = ""
End If
Next
End If
Application.EnableEvents = True
End Sub
'-------------------------------------------------------------------
Avatar
isabelle
bonjour Suzy,

une formule matriciel à valider avec crtl+shift+enter

=CHOISIR(SOMMEPROD(NON(ESTERREUR(CHERCHE({"carte";"chèque";"Prélèvement"};A2)))*{1;2;3});"CB";"CHEQUE";"PRELMT")

isabelle

Le 2015-10-06 08:15, suze32 a écrit :
Bonjour à tous,

Je suis en train d'établir un fichier excel pour comptes courant. J'extraie
sur excel les données provenant de mon compte bancaire et dans la colonne C
qui se nomme "TYPE", j'aimerais faire apparaître le type de débit ou crédit
: -CB -CHEQUE -PRELMT


L'information se trouve dans la colonne B "Libellé" que j'ai extraite de ma
banque. En voici en exemple: "Leclerc paiement par carte" "4891000 chèque
émis" "Prélèvement Orange"

Il faudrait donc une formule ou maccro qui fait apparaître le type suivant le
mot que contient la cellule : Si "carte" alors "CB" ou si "chèque" alors
"CHEQUE" ou si "Prélèvement" alors "PRELMT"

Merci pour votre aide

Suzy

Avatar
isabelle
petite correction, la validation matricielle n'est pas nécessaire
isabelle

Le 2015-10-06 10:11, isabelle a écrit :
bonjour Suzy,

une formule matriciel à valider avec crtl+shift+enter

=CHOISIR(SOMMEPROD(NON(ESTERREUR(CHERCHE({"carte";"chèque";"Prélèvement"};A2)))*{1;2;3});"CB";"CHEQUE";"PRELMT")


isabelle
Avatar
suze32
Bonjour Isabelle,

Un grand merci pour cette formule cela fondtionne!!

Bonne journée,
Suzy



Le mardi 6 octobre 2015 16:11:16 UTC+2, isabelle a écrit :
bonjour Suzy,

une formule matriciel à valider avec crtl+shift+enter

=CHOISIR(SOMMEPROD(NON(ESTERREUR(CHERCHE({"carte";"chèque";"Prélè vement"};A2)))*{1;2;3});"CB";"CHEQUE";"PRELMT")

isabelle

Le 2015-10-06 08:15, suze32 a écrit :
> Bonjour à tous,
>
> Je suis en train d'établir un fichier excel pour comptes courant. J'e xtraie
> sur excel les données provenant de mon compte bancaire et dans la col onne C
> qui se nomme "TYPE", j'aimerais faire apparaître le type de débit o u crédit
> : -CB -CHEQUE -PRELMT
>
>
> L'information se trouve dans la colonne B "Libellé" que j'ai extraite de ma
> banque. En voici en exemple: "Leclerc paiement par carte" "4891000 ch èque
> émis" "Prélèvement Orange"
>
> Il faudrait donc une formule ou maccro qui fait apparaître le type su ivant le
> mot que contient la cellule : Si "carte" alors "CB" ou si "chèque" al ors
> "CHEQUE" ou si "Prélèvement" alors "PRELMT"
>
> Merci pour votre aide
>
> Suzy
>
Avatar
suze32
Bonjour MichD,

Je commence le langage VBA et votre code m'intéresse, cependant pensez-vo us que vous puissiez me détailler chaque ligne pour que je puisse compren dre comment fonctionne la macro?

Merci d'avance,
Suzy


Le mardi 6 octobre 2015 14:37:52 UTC+2, MichD a écrit :
Bonjour,

Dans la feuille module où l'action se déroule, copie le code suivant et,
à chaque fois que tu modifies le contenu de la colonne B, si les cellul es
de cette dernière contiennent un des 3 mots désirés, sur la même ligne
s'inscrit en colonne C le résultat désiré.
'-------------------------------------------------------------------
Private Sub Worksheet_Change(ByVal Target As Range)
Dim Rg As Range, C As Range
Application.EnableEvents = False
Set Rg = Intersect(Target, Columns(2))
If Not Rg Is Nothing Then
For Each C In Rg
If InStr(1, C.Value, "Chèque", vbTextCompare) > 0 Then
C.Offset(, 1) = "CHEQUE"
ElseIf InStr(1, C.Value, "Carte", vbTextCompare) > 0 Then
C.Offset(, 1) = "CB"
ElseIf InStr(1, C.Value, "Prélèvement", vbTextCompare) > 0 Th en
C.Offset(, 1) = "PRELMT"
Else
C.Offset(, 1) = ""
End If
Next
End If
Application.EnableEvents = True
End Sub
'-------------------------------------------------------------------
Avatar
MichD
Les explications suivantes ne peuvent pas remplacer l'aide d'un bon bouquin sur le sujet.
L'auteur "John Walkenbach" en a écrit plusieurs sur le sujet. Fais une recherche sur Google
sur ce nom. La très grande majorité des bouquins ont été traduits en français...

Ceci est l'une des "procédures événementielles" possibles dans une feuille de calcul. Cela signifie
que la procédure se déclenche automatiquement à chaque fois qu'une cellule de la feuille de calcul
passe en mode "édition". Cela peut-être fait par la saisie manuelle d'une donnée, le coller du
contenu d'une ou des données du presse-papier vers une cellule ou une plage de cellule ou encore,
simplement en double-cliquant dans une cellule à l'aide de la souris ou en utilisant la touche F2.
Dès que le contenu d'une cellule est validé, la variable "Target" dans la ligne de déclaration de la
procédure, représente la plage de cellule de la feuille qui a été affectée (une cellule seule ou une
plage de cellules). Si le contenu de la cellule est modifié parce qu'il est le résultat d'une
formule, l'appel de cette procédure n'est pas effectué.


Private Sub Worksheet_Change(ByVal Target As Range)

'Déclaration des variables utilisées
Dim Rg As Range, C As Range

'Désactive les procédures événementielles durant l'exécution des lignes de code suivantes.
Application.EnableEvents = False

'Définit les cellules sur lesquelles ont désire travailler.
'L'intersection des cellules de la colonne B (Columns(2) ou la cellules ou cellules de la feuille
'qui viennent d'être validées pour ne retenir que les cellules de la colonnes2
Set Rg = Intersect(Target, Columns(2))

'Si au moins une cellule appartient à la colonne B
If Not Rg Is Nothing Then
'Une boucle sur chacune ces cellules de la colonne B sur lesquelles nous sommes intervenus
For Each C In Rg
'Un test pour savoir si l'une des expressions fait partie du contenu de la cellule
'3 tests, un test pour chacune des valeurs recherchées.
'La fonction InStr() retourne 0 si elle ne trouve pas l'expression recherchée
'Pour chacun des tests, si Instr() est plus grand que 0, iNSTR() retourne la position du
'premier caractère de la chaîne de caractères de la cellule de l'expression recherchée.
If InStr(1, C.Value, "Chèque", vbTextCompare) > 0 Then
'La méthode "Offset" a 2 paramètres (OFFSET(LIGNE,COLONNE)
'La syntaxe suivante permet d'inscrire dans la colonne à droite (en colonne C) le texte
désiré.
C.Offset(, 1) = "CHEQUE"
ElseIf InStr(1, C.Value, "Carte", vbTextCompare) > 0 Then
C.Offset(, 1) = "CB"
ElseIf InStr(1, C.Value, "Prélèvement", vbTextCompare) > 0 Then
C.Offset(, 1) = "PRELMT"
Else
C.Offset(, 1) = ""
End If
Next
End If
Application.EnableEvents = True
End Sub