Besoin d'aide pour une macro excel : urgent !

cs_Ques Messages postés 4 Date d'inscription jeudi 23 février 2006 Statut Membre Dernière intervention 28 février 2006 - 23 févr. 2006 à 18:29
cs_Ques Messages postés 4 Date d'inscription jeudi 23 février 2006 Statut Membre Dernière intervention 28 février 2006 - 28 févr. 2006 à 12:00
Bonjour,

J'ai un fichier excel dans lequel je dois rechercher la chaîne "note", jusque là ça va, mais c'est après que ça se complique pour moi en tout cas !

La chaîne "note" ne se trouve que dans la colonne A.
Une fois trouvée, il faut copier le contenu de la cellule G, sur la ligne où se trouve "note". Puis ce contenu doit être collé à toutes les cellules G en-dessous tant que la chaîne "note" n'est pas retrouvée dans la colonne A. Si "note" est de nouveau trouvée, alors on recommence, on copie la cellule G correspondante et on colle le contenu dans les cellules du dessous, etc. Et on s'arrête une fois que cellule A est vide.

Mon problème est que je ne connais pas d'avance les cellules à copier. Mais je n'arrive pas à trouver comment faire pour indiquer de copier la cellule correspondant à une variable... Apparemment on ne peut pas faire :
Range("variable").Select ou Cells(ligne, 7).select

J'espère que vous me comprenez, j'ai vraiment besoin d'aide... Je débute mais il faut que ce soit fait très vite.

Merci d'avance.

7 réponses

nanougat Messages postés 40 Date d'inscription samedi 6 novembre 2004 Statut Membre Dernière intervention 26 octobre 2007
23 févr. 2006 à 21:11
Bonsoir



Qu'as tu dans ta colonne A ?



A1 : note

A2 : ? = rien, note, x ?

A3 : ? = rien, note, x ?

A4 : note ou note A ?

.......



Cordialement
0
cs_DURANDO Messages postés 34 Date d'inscription jeudi 16 février 2006 Statut Membre Dernière intervention 21 mars 2006
24 févr. 2006 à 09:48
Salut à toi,

Tu peux effectivement passer une variable string a range() en
convertissant integer vers string (str) et supprimant les espaces en
partant de gauche (ltrim).

Voici le code qui devrait resoudre ton PB:



' recherche de chaine dans une colonne

Function rechercher(Colonne, chaine As String, ByRef debut, colonnecopie) As Boolean

If colonnecopie > "" Then

cellule = colonnecopie & LTrim(Str(debut))

valeurcopie = Range(cellule).Value

End If

j = False

Do While j = 0

debut = debut + 1

cellule = Colonne & LTrim(Str(debut))

j = InStr(1, UCase(Range(cellule).Value), chaine, 4) > 0

If (Range(cellule).Value = "") Then Exit Do

If Not j And colonnecopie > "" Then Range(colonnecopie & LTrim(Str(debut))) = valeurcopie

Loop

rechercher = j

End Function





Sub Macro1()

'

' recherche de note dans la colonne A a partir de ligne 1

i = 1

If rechercher("A", "NOTE", i, "") Then MsgBox "Note trouvé en cellule " & "A" & LTrim(Str(i))

'continuer recherche en ecrivant le contenu de colonne G de la ligne note trouvee

While rechercher("A", "NOTE", i, "G")

Wend

End Sub



Pour + infos n'hésite pas a reposer question .

A+




C'est parceque les c.. sont plus nombreux qu'ils ont forcément raison!(dixit Coluche)
Une seule ligne de conduite, l'objectivité.
0
cs_Ques Messages postés 4 Date d'inscription jeudi 23 février 2006 Statut Membre Dernière intervention 28 février 2006
24 févr. 2006 à 10:20
Merci beaucoup, je vais essayer ce code ;-)
0
cs_DURANDO Messages postés 34 Date d'inscription jeudi 16 février 2006 Statut Membre Dernière intervention 21 mars 2006
24 févr. 2006 à 17:44
désolé, mais je suis allé un peu trop vite il vaut mieux modifier la ligne suivante :

j = InStr(1, UCase(Range(cellule).Value), chaine, 4 ) > 0

en

j = InStr(1, UCase(Range(cellule).Value), chaine, len(chaine)) > 0



A+


C'est pas parceque les c.. sont plus nombreux qu'ils ont forcément raison!(dixit Coluche)
Une seule ligne de conduite, l'objectivité.
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
cs_Ques Messages postés 4 Date d'inscription jeudi 23 février 2006 Statut Membre Dernière intervention 28 février 2006
27 févr. 2006 à 09:56
Arf désolée je suis vraiment novice... Mais j'ai encore un soucis, c'est sûrement tout bête mais je ne comprends pas tout !

Lorsque je lance la macro, j'ai un message dans le Microsoft visual basic :

Run-time error '5'
Invalid procedure call or argument

Quand je clique sur Debug, il surligne cette ligne en jaune :

j = InStr(1, UCase(Range(cellule).Value), chaine, Len(chaine)) > 0

Qu'est ce que je dois faire ?

Encore merci
0
cs_DURANDO Messages postés 34 Date d'inscription jeudi 16 février 2006 Statut Membre Dernière intervention 21 mars 2006
28 févr. 2006 à 09:00
Dans un cas comme celui la, je te conseille de décomposer toute les
instruction de la ligne afin de trouver laquelle pose problème. C'est
peut-être un pb de version...



Remplace ta ligne :

j = InStr(1, UCase(Range(cellule).Value), chaine, Len(chaine)) > 0



par ceci :

b = range(cellule).value

c = Ucase(range(cellule).value)

d= len (chaine)

e = InStr(1, UCase(Range(cellule).Value), chaine, Len(chaine))
j = InStr(1, UCase(Range(cellule).Value), chaine, Len(chaine)) > 0



Ensuite, exécute ta macro en pas a pas avec F8. Tu pourras ainsi suivre
ta macro ligne après ligne. Au cours de ce test, tu remarqueras que le
survole des variables de ta ligne fait apparaître l'état de la dite
variable.

N'hésite pas à poser question si bloque encore.

A+




C'est pas parceque les c.. sont plus nombreux qu'ils ont forcément raison!(dixit Coluche)
Une seule ligne de conduite, l'objectivité.
0
cs_Ques Messages postés 4 Date d'inscription jeudi 23 février 2006 Statut Membre Dernière intervention 28 février 2006
28 févr. 2006 à 12:00
Ca y est ça marche ! Merci beaucoup !

J'ai du mettre comme ceci :

j = InStr(UCase(Range(cellule).Value), chaine) > 0

Je sais pas pourquoi mais du coup ça fonctionne ! Comme je t'ai dit je suis débutante... lol

Encore merci, mais il se peut que j'ai effectivement encore besoin d'aide.

A+
0
Rejoignez-nous