Inserer valeur avec conditions

Résolu/Fermé
vinceggg - 4 avril 2011 à 09:04
mic13710 Messages postés 1088 Date d'inscription samedi 26 novembre 2005 Statut Membre Dernière intervention 13 mai 2021 - 5 avril 2011 à 11:37
Bonjour a tous

J'ai des difficultes pour faire tourner une macro:
Ma colonne F ne possede que du texte: ex: Warrant; Equities, Deposit, Clif Loan, XL-Loan, Term Loan, Cash, overdraft...

Je souhaiterai que le mot "LOAN" apparaisse dans la colonne G, quand la ligne correspondante de la colonne F contient le mot loan.

exemple: (le texte ne commence qu'a partir de la ligne 7, avant c'est blank)
Expected Result:
H | G
Warrant |
Equities |
Deposit |
Clif Loan | loan
XL-Loan | loan


ma tentative:

Sub CashvsCashSUBCATEGORY()

Sheets("Valuation").Activate

ActiveSheet.Range("F:F").AutoFilter Field:=6, Criteria1:= _
"=*loan*", Operator:=xlAnd

With Selection.Interior
.Pattern = xlNone
.TintAndShade = 0
.PatternTintAndShade = 0
End With
Range("G7:G" & End_Of_Table).Select
ActiveCell.FormulaR1C1 = "LOAN-TEST"
Selection.FillDown
End Sub

Le filtre semble fonctionner normalement sur la colonne F, mais ca ne copie pas "loan" dans la colonne G.
j'ai erreur 1024
Et c'est cette ligne qui est surligne en jaune: Range("G7:G" & End_Of_Table).Select

Avez vous des idees ?

merci d'avance pour l'aide apportee.
A voir également:

2 réponses

mic13710 Messages postés 1088 Date d'inscription samedi 26 novembre 2005 Statut Membre Dernière intervention 13 mai 2021 354
Modifié par mic13710 le 4/04/2011 à 15:59
Il ne suffit pas de déclarer une variable, encore faut-il lui attribuer une valeur.
La difficulté dans les tableaux filtrés c'est de sélectionner la seule plage visible.
Il faut donc chercher la première ligne visible de la plage et ensuite chercher la dernière cellule utilisée dans la colonne de référence (ici la F)

Dans le cas d'un seul critère, remplacer les lignes suivantes :

Range("G7:G" & End_Of_Table).Select
ActiveCell.FormulaR1C1 = "LOAN-TEST"
Selection.FillDown

Par :

Range("G7").Select
Dim cellule As Range
Set cellule = ActiveCell
'récupérer la prochaine cellule visible
Do
Set cellule = cellule.Offset(1, 0)
Loop Until cellule.EntireRow.Hidden = False
cellule.Select
ActiveCell.FormulaR1C1 = "LOAN-TEST"
Selection.Copy
Range("G" & ActiveCell.Row & ":G" & Range("F65536").End(xlUp).Row).Select
ActiveSheet.Paste

Ce code n'est pas très propre mais il devrait fonctionner.
A vous de l'adapter à votre utilisation.

La variable End_Of_Table peut-être supprimée, à moins qu'elle ne soit utilisée par ailleurs

Michel

Edit : message modifié suite à l'élimination d'une variable inutile.
1
merci a mic13710 je voulais dire, au lieu de merci a tous.
un tres grand merci.
0
mic13710 Messages postés 1088 Date d'inscription samedi 26 novembre 2005 Statut Membre Dernière intervention 13 mai 2021 354
5 avril 2011 à 11:37
Pas de quoi vinceggg, ce fut un plaisir.
0
mic13710 Messages postés 1088 Date d'inscription samedi 26 novembre 2005 Statut Membre Dernière intervention 13 mai 2021 354
Modifié par mic13710 le 4/04/2011 à 11:11
Déjà, il faudrait savoir sur quel logiciel vous travaillez.
Si c'est excel, End_of_Table n'est pas une instruction vba valide.
Pour vba c'est une variable, et vous ne l'avez pas défini ni même attribué une valeur.
Michel
0
Bonjour,
merci pour la reponse rapide,

je travaille sur VBA - Microsoft Office Excel 2007.
mon wexcel sheet s'appelle Valuation
J'ai rajoute End_Of_Table as integer au debut du programme,
mais la colonne G ne se remplit toujours pas.

J'ai de nouevau ce message d'erreur
Run-time error '1004':
Method 'Range' of object'_Global' failed.
Et c'est toujours la meme ligne qui est surligne en jaune.

En fait je n'arrive pas a ecrire correctement: que excel doit ecrire "loan" dans la colonne G jusuqu'a la derniere ligne du tableau
0
mic13710 Messages postés 1088 Date d'inscription samedi 26 novembre 2005 Statut Membre Dernière intervention 13 mai 2021 354
4 avril 2011 à 11:28
Vous pouvez faire ce que vous souhaitez sans passer par des macros.
Votre texte en H1, en G1 vous mettez cette formule :
=SI(ESTTEXTE(H1);SI(ESTNUM(CHERCHE("Loan";H1));"Loan";"");"")
Si "Loan" existe en H1, il apparaitra en G1. Cette formule est indifférente à la casse.
0
mic13710 Messages postés 1088 Date d'inscription samedi 26 novembre 2005 Statut Membre Dernière intervention 13 mai 2021 354
4 avril 2011 à 11:33
A adapter bien entendu à votre langue excel car il me semble que vous avez une version en anglais.
0
merci pour cette solution,
Mais, je ne peux pas privilegier cette solution, car dans la realite, dans la colonne G, je cherche a ecrire automatiquement, "loan" (quand une ligne contiendra loan dans la colonne F). Mais je cherche aussi a ecrire d'autres valeurs en G, en fonciton des valeurs en H.
Donc je suis oblige de faire tourner une macro, pour que toutes les "insertions" en G, puissent se faire sans s'impacter.. (il doit y avoir plus de 20 000 lignes dans mon fichier excel), c'est pour cela que je dois en automatiser le traitement.

Si j'arrive a automatiser la partie avec "loan", j'arriverai a automatiser le reste par moi-meme, mais je suis oblige de faire comme ca, du moins je pense.
0
j ene voulais pas dire "H" mais "F"
en F: les valeurs original
en G: les donnes que je cherche a inserer automatiquement: ici "loan"
0