recopie compliquée tableau avec conditions

francois31170

XLDnaute Nouveau
Bonjour

Merci par avance pour votre aide j’espere.

Je ne suis pas un expert Macro, j’essaie de les construire ou plutôt adapté grâce mes recherches sur cet excellent site, mais là je n’avance pas beaucoup.

Voici mon problème : Je dois réaliser ou actualiser chaque semaine des tableaux excel pour suivre l’activité commerciale et le suivi des facturations.


Mon travail :
- Je dois donc chaque semaine fusionner sur un tableau de reporting « Source » chaque reporting « conseiller » (j‘ai trouvé la macro pour faire cela)
- Extraire de ce tableau certaines données nouvelles et les intégrer dans un autre tableau que je complète manuellement également avec d’autres champs (etat facturation, etc…)

Ce que je dois automatiser:
- Sur mon tableau « Source », je dois identifier les lignes :
o Où la cellule de la colonne « REF » n’est pas vide
o Où la cellule de la colonne « REF » n’est pas déjà présente dans la colonne « REF » du tableau de destination « Tab». (pour éviter de recopier des doublons)
- Puis, si les 2 conditions sont remplies, copier que quelques données de cette ligne : Pas toutes les colonnes mais que certaines colonnes bien identifiées (colonne A, B, D, F par exemple)
- Puis Coller le tout dans mon onglet « Tab» à la suite de la dernière ligne remplie et dans les colonnes identiques (A, B, D, F) mais pouvant être placé dans un ordre différent (ou avec d’autres colonnes entre les 2.) Les titres des colonnes sont bien sur identiques.

La « difficulté » est que j’ai 2 conditions (cellule non vide et non doublon avec autre tableau) et une recopie partielle de quelques données du tableau.

Ci-joint un fichier excel exemple avec :
- Un onglet « Source »
- Un onglet ‘Tab avant’ avant intégration nouvelles des données
- Un onglet «’Tab apres » après intégration des données pour comprendre le résultat espéré.

Dans la pratique bien sur il n’existe qu’un fichier « source » et qu’un fichier « Tab»

En vous remerciant par avance si vous pouvez m’aider, je croise les doigts.


Francois
 

Pièces jointes

  • reportingexcel.xlsm
    16.6 KB · Affichages: 84

Pierrot93

XLDnaute Barbatruc
Re : recopie compliquée tableau avec conditions

Re,

modifie comme suit, mais attention sur la feuille source que tu as joint en exemple, certaines cellules de la colonne A sont vides, donc la ca va pas le faire....

Code:
Sub macro1()
Dim o As Worksheet 'déclare la variable o (Onglet)
Dim z As Worksheet 'déclare la variable z (Onglet)
Dim cel As Range 'déclare la variable cel (CELlule)
Dim dest As Range 'déclare la variable dest (DESTination
Dim x As Range 'cellule recherchée
Set o = Worksheets("Source")
Set z = Worksheets("Tab.avant")
For Each cel In o.Range("A2:A" & o.Range("E65536").End(xlUp).Row)
    Set x = z.Range("A2:A" & z.Range("A65536").End(xlUp).Row).Find(cel.Value, , xlValues, xlWhole, , , False)
    If x Is Nothing Then
        If cel.Value <> z.Range("A1") Then
            Set dest = z.Range("A65536").End(xlUp).Offset(1, 0)
            o.Range(o.Cells(cel.Row, 1).Resize(, 5).Address & "," _
                & o.Cells(cel.Row, 8).Resize(, 2).Address).Copy dest
        End If
    End If
Next cel
End Sub
 

francois31170

XLDnaute Nouveau
Re : recopie compliquée tableau avec conditions

Merci beaucoup Pierrot pour ton aide.

J'ai rajouté une condition If cel Value <>"" pour le problème de cellules vides, et tout cela a l'air de fonctionner.

Ci dessous code que j'espere définitif.

Sub macro1()
Dim o As Worksheet 'déclare la variable o (Onglet)
Dim z As Worksheet 'déclare la variable z (Onglet)
Dim cel As Range 'déclare la variable cel (CELlule)
Dim dest As Range 'déclare la variable dest (DESTination
Dim x As Range 'cellule recherchée
Set o = Worksheets("Feuil1")
Set z = Worksheets("Feuil2")
For Each cel In o.Range("A2:A" & o.Range("E65536").End(xlUp).Row)
If cel.Value <> "" Then
Set x = z.Range("A2:A" & z.Range("A65536").End(xlUp).Row).Find(cel.Value, , xlValues, xlWhole, , , False)
If x Is Nothing Then
If cel.Value <> z.Range("A1") Then
Set dest = z.Range("A65536").End(xlUp).Offset(1, 0)
o.Range(o.Cells(cel.Row, 1).Resize(, 5).Address & "," _
& o.Cells(cel.Row, 8).Resize(, 2).Address).Copy dest
End If
End If
End If
Next cel
End Sub

MERCI PIERROT :):)
 

francois31170

XLDnaute Nouveau
Re : recopie compliquée tableau avec conditions

Hic

J'avais oublié que je n'étais pas encore au bout.

En effet,

: maintenant que je sais identifier les lignes à recopier (contrainte cellule pas vide sur colonne A et pas de doublon entre les 2 feuilles sur la colonne A),

: je ne dois recopier que certaines colonnes bien identifiées (colonne Titre A, B, D, F par exemple) et les coller dans ma feuill2 à la suite de la dernière ligne remplie et dans les colonnes identiques (Titre A, B, D, F) mais pouvant être placé dans un ordre différent (avec d’autres colonnes entre les 2.) Les titres des colonnes sont bien sur identiques.

Dur dur de faire du VBA quand on n'est pas de la partie.:(
 

Pierrot93

XLDnaute Barbatruc
Re : recopie compliquée tableau avec conditions

Bonjour,

quelles colonnes sont à recopier de la feuille source, A, B, C, D, E, H et I ? et les titres des colonnes dans la feuille de destination seront toujours présents et ce pour toutes les colonnes à recopier ? si un titre n'est pas trouvé, on fait quoi ?
 

francois31170

XLDnaute Nouveau
Re : recopie compliquée tableau avec conditions

Bonjour Pierrot
Heureux de te revoir :)

Par exemple, je souhaite recopier (de la feuil1 vers feuil2) :
col A : "REF" vers col A : "REF"
col B : "Conseiller" vers col C : "Conseiller"
Col C : "Nom" vers col E : "Nom"
Col G : "Etat" vers col H : "Etat"
Col I : "Date Prev" vers col I : "Date Prev"

Oui les titres de colonnes seront toujours les même dans les 2 feuilles.
Impossible qu'un titre soit absent dans la colonne destination.

Je te remercie encore..
 

Pierrot93

XLDnaute Barbatruc
Re : recopie compliquée tableau avec conditions

Re,

essaye ainsi, les colonnes sources sont paramètrables par la modification du tableau ( t = array), non testé, je te laisse le soin de le faire... :

Code:
Option Explicit
Sub macro1()
Dim o As Worksheet, z As Worksheet, cel As Range, dest As Range, x As Range
Dim t() As Variant, i As Byte
Set o = Worksheets("Feuil1")
Set z = Worksheets("Feuil2")
t = Array(1, 2, 3, 7, 9)
For Each cel In o.Range("A2:A" & o.Range("E65536").End(xlUp).Row)
    If cel.Value <> "" Then
        Set x = z.Range("A2:A" & z.Range("A65536").End(xlUp).Row).Find(cel.Value, , xlValues, xlWhole, , , False)
        If x Is Nothing Then
            If cel.Value <> z.Range("A1") Then
                For i = LBound(t) To UBound(t)
                    Set dest = z.Rows(1).Find(o.Cells(1, i).Value, , xlValues, xlWhole, , , False)
                    If Not dest Is Nothing Then o.Cells(cel.Row, i).Copy z.Cells(z.Cells(65536, _
                        dest.Column).End(xlUp).Row, dest.Column)
                Next i
            End If
        End If
    End If
Next cel
End Sub
 

Pierrot93

XLDnaute Barbatruc
Re : recopie compliquée tableau avec conditions

Re,

aarf, manquait des +1 à i, ne doit pas valoir 0 bien sur...

Code:
Sub macro1()
Dim o As Worksheet, z As Worksheet, cel As Range, dest As Range, x As Range
Dim t() As Variant, i As Byte
Set o = Worksheets("Source")
Set z = Worksheets("Tab.avant")
t = Array(1, 2, 3, 4, 5, 8, 9)
For Each cel In o.Range("A2:A" & o.Range("E65536").End(xlUp).Row)
    If cel.Value <> "" Then
        Set x = z.Range("A2:A" & z.Range("A65536").End(xlUp).Row).Find(cel.Value, , xlValues, xlWhole, , , False)
        If x Is Nothing Then
            If cel.Value <> z.Range("A1") Then
                For i = LBound(t) To UBound(t)
                    Set dest = z.Rows(1).Find(o.Cells(1, i + 1).Value, , xlValues, xlWhole, , , False)
                    If Not dest Is Nothing Then o.Cells(cel.Row, i + 1).Copy z.Cells(z.Cells(65536, _
                        dest.Column).End(xlUp).Row, dest.Column)
                Next i
            End If
        End If
    End If
Next cel
End Sub
 

francois31170

XLDnaute Nouveau
Re : recopie compliquée tableau avec conditions

j'allais te répondre sur erreur 400 mais tu m'as devancé.
Plus d'erreur 400 mais :
- les 5 premières cellules la première ligne (après la ligne de titres, soit A2 B2 C2 D2 E2) viennent se copier sur la feuille 2 à la place de A1 B1 C1 D1 E1 (ligne des titres)
- les autres lignes en dessous ne sont pas recopiées
 

Pierrot93

XLDnaute Barbatruc
Re : recopie compliquée tableau avec conditions

Re,

Aarf grossières erreurs.. il en reste peut être d'autres....

Code:
Option Explicit
Sub macro1()
Dim o As Worksheet, z As Worksheet, cel As Range, dest As Range, x As Range
Dim t() As Variant, i As Byte
Set o = Worksheets("Source")
Set z = Worksheets("Tab.avant")
t = Array(1, 2, 3, 7, 9)
For Each cel In o.Range("A2:A" & o.Range("E65536").End(xlUp).Row)
    If cel.Value <> "" Then
        Set x = z.Range("A2:A" & z.Range("A65536").End(xlUp).Row).Find(cel.Value, , xlValues, xlWhole, , , False)
        If x Is Nothing Then
            If cel.Value <> z.Range("A1") Then
                For i = LBound(t) To UBound(t)
                    Set dest = z.Rows(1).Find(o.Cells(1, t(i)).Value, , xlValues, xlWhole, , , False)
                    If Not dest Is Nothing Then o.Cells(cel.Row, t(i)).Copy z.Cells(z.Cells(65536, _
                        dest.Column).End(xlUp).Row + 1, dest.Column)
                Next i
            End If
        End If
    End If
Next cel
End Sub
 

francois31170

XLDnaute Nouveau
Re : recopie compliquée tableau avec conditions

Bonsoir Pierrot avec un peu de retard malheureusement.

Simplement pour te dire un GRAND MERCI pour ton aide.

Tres tres sympa de ta part pour le temps et la patience...

Pas toujours facile pour vous expert d'aider des néophytes comme nous.

J'apprécie réellement.

Au plaisir

Francois
 

francois31170

XLDnaute Nouveau
Re : recopie compliquée tableau avec conditions

Hello Pierrot

Malheureusement je viens de découvrir un petit bug.
Les lignes que je recopies vers Feuil2 doivent etre intégralement remplies.
Sinon la ligne suivante que je recopie va venir se copier sur la cellule vide de la ligne précédent.
Exemple :
Si je recopie ligne 2 sur Feuil2 et que D2 est vide par exemple
Si je recopie ligne 3 sur Feuil2 aussi, et bien la cellule D3 va se recopier dans la cellule D2 qui est vide..

En espérant que tu sois dans le coin. :eek:

Dis moi si je ne suis pas clair dans mes tentatives d'explications.

Francois
 

Pierrot93

XLDnaute Barbatruc
Re : recopie compliquée tableau avec conditions

Bonjour,

il faut tester quoi ? 1 cellule ? laquelle ? plusieurs ? lesquelles ? ou toute une ligne... remets un tout petit fichier représentant bien le problème posé avec le code utilisé....

bonne journée
@+
 

Discussions similaires

Membres actuellement en ligne

Statistiques des forums

Discussions
312 177
Messages
2 085 972
Membres
103 073
dernier inscrit
MSCHOE16