Vba selectionner une plage apres boucle

Fermé
mimi_jolie - 2 juil. 2009 à 10:24
 Pawn - 3 juil. 2009 à 09:36
Bonjour,

Bonjour,

Je cherche à faire une boucle qui recherche un mot en particulier dans une certaine colonne.
Une fois ce mot trouvé, la boucle devrait pouvoir copier l'intégralité des colonnes en relation avec ce mot.

Voici ce que j'ai codé:

colonne = 18
critere_de_copie = "POM"
i = 1
Do While (Cells(i, colonne) <> "")
If Cells(i, colonne) = critere_de_copie Then

Worksheets("Argentine FSI").Range("Argentine_FSI").Copy
Workshhets("PIM GLOBAL OPPORTUNITIES (Trade) - Template.xls").Activate
Sheets("DataGPMS").Select
Sheets("DataGPMS").Range("A7").Select
ActiveSheet.Paste


Mon problème se situe à la ligne vide. Je ne sais pas comment sélectionner le contenu des colonnes qui précèdent la 18 et où apparait le mot POM


Merci par avance!

10 réponses

Bonjour,


Pour copier les colonne de 1 à 17 essaye :

Range(cells(1,1),cells(65536,colonne - 1)).copy

la ligne sheets("DataGPMS").select n'est pas utile puisque tu l'indique apres
par Sheets("DataGPMS").Range("A7").Select
0
Salut,

Merci pour ta réponse.

2 problèmes avec la solution que tu me proposes.

Je démarre en A7 et donc j'ai une erreur qui me dit que la plage de copie et celle de collé ne sont pas de la même taille (ça marche quand je copie en A1, mais je peux pas)

Le code que tu m'as donné sélectionne en fait TOUT le document, je cherche à ne séléctionner que les lignes où le mot POM apparait en colonne 18.

Tu crois que c'est possible?

Merci encore en tout cas
0
Adapte ce code a ton besoin
Dim FL1 As Worksheet
Dim FL2 As Worksheet

Dim i As Long, e As Long

Set FL1 = Workbooks("classeur1").Worksheets("feuil1")
Set FL2 = Workbooks("classeur2").Worksheets("feuil1")

'Pour aller jusqu'a la dernière ligne renseignée.
For i = 7 To FL1.Range("A1").SpecialCells(xlCellTypeLastCell).Row
For e = 6 To FL2.Range("Q1").SpecialCells(xlCellTypeLastCell).Row
If FL2.Cells(e, 2) = "POM" Then
FL2.Range(Cells(e, 1), Cells(e, 17)).Copy FL1.Cells(i, 1)
End If
Next e
Next i
End Sub
0
Merci beaucoup pour ton temps!

Je me bas depuis tout à l'heure avec ta macro :)

En fait j'ai peur de ne pas saisir. Je comprends bien ce que fait globalement ce code, je pense que c'est exactement ce dont j'ai besoin, mais je n'arrive pas à l'utiliser.

Je ne comprends pas bien cette ligne là:
For i = 7 To FL1.Range("A1").SpecialCells(xlCellTypeLastCell).Row

Est ce que cette ligne là "If FL2.Cells(e, 2) = "POM" Then" va bien chercher POM en colonne 18?

FL2.Range(Cells(e, 1), Cells(e, 17)).Copy FL1.Cells(i, 1) Est ce que cette ligne Paste également?
En fait j'ai essayé de modifier un peu les cellules, mais ça me donne une erreur de range


C'est compliqué la prog quand même..
0

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

Posez votre question
For i = 7 To FL1.Range("A1").SpecialCells(xlCellTypeLastCell).Row
=>
toute les cellule de 7 à la fin du tableau

Est ce que cette ligne là "If FL2.Cells(e, 2) = "POM" Then" va bien chercher POM en colonne 18?
=>
Non elle cherche en 2, remplace 2 par 18 ou ta variable "colonne"

FL2.Range(Cells(e, 1), Cells(e, 17)).Copy FL1.Cells(i, 1) Est ce que cette ligne Paste également?
=>
Oui, Automatiquement, c'est plus rapide que de mettre les select et les paste.

En fait j'ai essayé de modifier un peu les cellules, mais ça me donne une erreur de range
Quel genre de modification ?
0
J'ai pas le temps de tester ça maintenant, mais je tenais à te remercier une fois de plus pour t'être donné le mal de m'aider! :)
0
Ya pas de quoi !
Tien moi au courant

a+
0
Re,

Toujours pas :)

Je comprends pas ce que je fais de mal. Voici ce que j'ai en ayant modifié ton code:

Run-time error 1004:

method 'range' of object '_Worksheet' failed

Dim FL1 As Worksheet
Dim FL2 As Worksheet

Dim i As Long, e As Long

Set FL1 = Workbooks("PIM GLOBAL OPPORTUNITIES (Trade) - Template.xls").Worksheets("DataGPMS")
Set FL2 = Workbooks("Gesthold_EUR_Trade.xls").Worksheets("Gesthold_EUR_Trade")

'Pour aller jusqu'a la dernière ligne renseignée.
For i = 7 To FL1.Range("A1").SpecialCells(xlCellTypeLastCell).Row
For e = 1 To FL2.Range("Q1").SpecialCells(xlCellTypeLastCell).Row
If FL2.Cells(e, 18) = "POM" Then
FL2.Range(Cells(e, 1), Cells(e, 17)).Copy FL1.Cells(i, 1)
End If
Next e
Next i
End Sub

En fait, c'est la ligne en gras qui pose problème.

Voilà voilà...
0
Essaye avec ça,

sub copy()
'Variable
Dim FL1 As Worksheet 'FichierReceveur
Dim FL2 As Worksheet 'FichierSource
Dim i As Long, e As Long

Set FL1 = Workbooks("PIM GLOBAL OPPORTUNITIES (Trade) - Template.xls").Sheets("DataGPMS")Set FL2 = Workbooks("Gesthold_EUR_Trade.xls").Sheets("Gesthold_EUR_Trade")

'Pour aller jusqu'a la dernière ligne renseignée.
For i = 7 To FL1.Range("A1").End(xlUp).Row
For e = 1 To FL2.Range("Q1").End(xlUp).Row
If FL2.Cells(i, 18) = "POM" Then
FL2.Range(Cells(e, 1), Cells(e, 17)).Copy FL1.Cells(i, 1)
Exit For
End If
Next e
Next i
End Sub
0
j'ai oublier 2 truc en gras ^^ .END(XLUP)
J'ai fais sa de tete, si besoin met un exemple sur cijoint et je regarderais.
0