Besoin d'aide pour une macro excel : urgent !

Signaler
Messages postés
4
Date d'inscription
jeudi 23 février 2006
Statut
Membre
Dernière intervention
28 février 2006
-
Messages postés
4
Date d'inscription
jeudi 23 février 2006
Statut
Membre
Dernière intervention
28 février 2006
-
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

Messages postés
40
Date d'inscription
samedi 6 novembre 2004
Statut
Membre
Dernière intervention
26 octobre 2007

Bonsoir



Qu'as tu dans ta colonne A ?



A1 : note

A2 : ? = rien, note, x ?

A3 : ? = rien, note, x ?

A4 : note ou note A ?

.......



Cordialement
Messages postés
34
Date d'inscription
jeudi 16 février 2006
Statut
Membre
Dernière intervention
21 mars 2006

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é.
Messages postés
4
Date d'inscription
jeudi 23 février 2006
Statut
Membre
Dernière intervention
28 février 2006

Merci beaucoup, je vais essayer ce code ;-)
Messages postés
34
Date d'inscription
jeudi 16 février 2006
Statut
Membre
Dernière intervention
21 mars 2006

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é.
Messages postés
4
Date d'inscription
jeudi 23 février 2006
Statut
Membre
Dernière intervention
28 février 2006

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
Messages postés
34
Date d'inscription
jeudi 16 février 2006
Statut
Membre
Dernière intervention
21 mars 2006

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é.
Messages postés
4
Date d'inscription
jeudi 23 février 2006
Statut
Membre
Dernière intervention
28 février 2006

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+