Reprise de données d'un onglet vers un autre selon condition

Résolu
mamined Messages postés 37 Statut Membre -  
mamined Messages postés 37 Statut Membre -
Bonjour le forum,

j'ai construit une macro qui effectue un matching de données provenant de 2 fichiers. A la fin, la macro copie toutes les données dans un autre onglet.

Malheureusement il me reste une étape que je n'arrive pas à faire. Depuis l'onglet "Complet", je souhaite copier dans l'onglet "Final" dès la cellule A2 toutes les valeurs des colonnes de "A" à "I", si dans l'onglet "Complet", la cellule "i" n'est pas vide.

J'arrive à intégrer dans la macro une formule si cellule "i"X non vide mais le problème c'est que cela me ramène la valeur non pas depuis la cellule A2, mais en fonction de la ligne de position de l'onglet source.

Y a t'il un moyen de ramener les infos dès la cellule A2 sans avoir des lignes vides entre les valeurs?

Ceci sachant que le nombre de ligne de l'onglet "Complet" varie d'un mois à un autre.

Un grand merci par avance car je plenche là-dessus depuis des jours sans trouver la solution

2 réponses

  1. f894009 Messages postés 17417 Date d'inscription   Statut Membre Dernière intervention   1 717
     
    Bonjour,

    une facon de faire

    Sub copie_Final()
    Dim plage As Range, cel As Range, derlig, derlig1

    'fige ecran
    Application.ScreenUpdating = False
    With Worksheets("Complet")
    'derniere cellule non vide colonne A
    derlig = .Range("A" & Rows.Count).End(xlUp).Row
    'mise en memoire plage donnees
    Set plage = .Range("I2:I" & derlig)
    'boucle test cellule Ix non vide
    For Each cel In plage
    If cel <> "" Then
    'premiere cellule vide colonne A
    derlig1 = Worksheets("Final").Range("A" & Rows.Count).End(xlUp).Row + 1
    'copy donnees
    .Range("A" & cel.Row & ":I" & cel.Row).Copy Worksheets("Final").Range("A" & derlig1 & ":I" & derlig1)
    End If
    Next cel
    End With
    Application.ScreenUpdating = True
    End Sub
    0
  2. mamined Messages postés 37 Statut Membre
     
    Bonjour tout le monde,

    merci pour la réponse. Entre temps j'ai eu un coup de main et ai pu faire ce que je souhaitais

    si ça peut intéresser, voilà le code qui m'a permis de le faire :

    With Sheets("Complet")
    For i = 2 To .Range("a2").End(xlDown).Row
    If .Cells(i, 9) <> "" Then
    .Range("a" & i & ":I" & i).Copy Sheets("Final").Range("a80000").End(xlUp).Offset(1, 0)
    End If

    Next
    End With
    0