Vba selectionner une plage apres boucle

mimi_jolie -  
 Pawn -
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!
Configuration: Windows 2003 Internet Explorer 7.0

10 réponses

  1. Pawn
     
    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
  2. mimi_jolie
     
    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
  3. Pawn
     
    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
  4. mimi_jolie
     
    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
  5. Vous n’avez pas trouvé la réponse que vous recherchez ?

    Posez votre question
  6. Pawn
     
    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
  7. mimi_jolie
     
    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
  8. Pawn
     
    Ya pas de quoi !
    Tien moi au courant

    a+
    0
  9. mimi_jolie
     
    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
  10. Pawn
     
    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
  11. Pawn
     
    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