Résolu Copier si condition 1remplie et coller sur un autre classeur si condition2 rempl

fopy12

Habitué
Bonjour tout le monde, Voilà après des reherches et des recherches, je viens chercher une réponse à ma question. merci d'avance de l'attention que porterez à ce message. Voici mon problème : J'aimerai copier des lignes de mon classeurA qui se trouve dans mon C/temp si la colonne L de la feuille 1 n'est pas vide. Et puis coller ces données copiées dans un autre classeurB, dans la colonne L de la feuille 1 si la valeur de la colonne D du classeurA est la même que celle du classeurB.
voici mon code mais il ne génére aucun résultat :
Sub test3()
Dim ligne As Long
Dim a As Long Dim
FeuilleSource As Worksheet
Dim FeuilleCible As Worksheet
Dim Sh As Workbook
Dim Sh1 As Workbook
Set Sh = Worksbooks("classeurA.xlsm").Worksheets("Feuil1")
Set Sh1 = Worksbooks("classeurB.xlsm").Worksheets("Feuil1")
ligne = 2 ligne
For a = 2 To 65536
If Sh.Cells(a, 4).Text = Sh1.Cells(a, 4) Then
Sh.Cells(a, 12).Copy Sh1.Cells(ligne, 12)
ligne = ligne +1
End If
Next
End Sub

je vous remercie encore
 

beru

Habitué
Salut à toi,

Avant que Zeb ne fasse son passage, je te conseille vivement d'aller lire ce petit . Et après en avoir pris connaissance, faudra modifier ta demande si tu veux qu'elle soit correctement traitée.
 

fopy12

Habitué



Ok merci pour le tuyau.
 

fopy12

Habitué
Je suis allée prendre connaissance du règlement () et donc je vais reformuler ma demande.

J'ai deux classeurs :
- 1 fichier : nommé ClasseurA (= fichier archivé en fin de semaine)
- et 1 fichier : nommé ClasseurEnCours (=fichier de la semaine en cours)

Ces deux fichiers ont les mêmes intitulés au niveau des colonnes et le même nombre de colonne.
- Dans la colonne D, il y a les numéros des clients ; ex: cellule D1 = NumClient1, cellule D2 = NumClient2 ….
- Et dans la colonne L, il y a les commentaires. Chaque commentaire est unique à un client donné (donc à un numéro de client)

Quant aux lignes, leur nombre peut varier d'une semaine à l'autre.

En fait l'objectif est de recopier les commentaires dans le fichier archivé et puis de les coller sur mon fichier en cours. Et ce, s'il s'agit du même client.
Ex : Client1, qui a pour numéro : NumClient1 et pour commentaire Comment1 se trouve dans la ligne 25, dans le fichier archivé.
Mais dans le fichier EnCours, ce même client peut se trouver dans la ligne 29 (ou même il peut ne pas exister).
Je veux copier le commentaire Comment1 concernant le client1 qui se trouve dans le fichier "ClasseurA" et le coller dans le fichier ClasseurEnCours dans la ligne où se trouve le client1 et dans la colonne L (colonne où il y a les commentaires)

Tout ceci aurait pu être facile, pour moi, si les NumClient ne changent pas d'emplacement d'une semaine à l'autre.

Voici mon code (code de débutant), qui marche si les NumClient sont, chacun, à la même cellule dans le fichier "Classeur A" et dans le fichier "ClasseurEnCours"

Code:
Sub OuvrirClasseur()

    Dim ClasseurSource As Workbook

    Workbooks.Open Filename:="C:\Temp\1_MACRO_ffd\ClasseurA.xlsm"

    Set ClasseurSource = ActiveWorkbook

    
    Dim ClasseurCible As Workbook

    Set ClasseurCible = ThisWorkbook 

    Dim i As Long

    Dim j As Long

    Dim FeuilleSource As Worksheet

    Dim FeuilleCible As Worksheet



    Set FeuilleSource = ClasseurSource.Worksheets("Feuil1")

    Set FeuilleCible = ClasseurCible.Worksheets("Feuil1")


    i = 2


     For j = Cells(65536, 2).End(xlUp).Row To 2 Step -1  
        If FeuilleSource.Cells(j, 4).Text = FeuilleCible.Cells(j, 4) Then           
        FeuilleSource.Cells(j, 12).Copy FeuilleCible.Cells(j, 12)           
        i = i + 1

        Else

        End If

     Next


    ClasseurSource.Close


End Sub


Merci d'avance
 

zeb

Modérateur
Salut,

Wahooooo! jusqu'à la ligne 26, ce code est nickel.
Bon, après ça devient un peu plus brouillon.

D'abord, pourquoi ce Step -1 ? Ca n'empêche pas la macro de fonctionner, mais c'est vraiment le plaisir de se faire des noeuds au cerveau pour rien. :pfff:
Ensuite toujours à la même ligne, à quelle feuille la méthode Cells() s'applique-t-elle ? :??:
Ligne 33, tu précises la propriété Text pour l'une des cellule, pas pour l'autre. Sois plus précis ;)
Ligne 34, tu écrases une mouche avec un marteau-pilon :lol: Ceci devrait suffir
Code:
FeuilleCible.Cells(j, 12).Value = FeuilleSource.Cells(j, 12).Text
(A la réflexion, pourquoi pas ? Oublie ce que je viens de dire. Ta soluce n'est pas plus mal que ce que je te propose.)
Euh, sans indiscrétion, à quoi te sert i ?
(La solution à ton problème est dans la réponse ;) )

Réponds à mes questions, essaye de débrouiller un peu ton problème avec les éléments que je te propose...
En attendant, je te prépare une soluce ;)
 

fopy12

Habitué
Merci Zeb pour les idées.
Pour répondre à ta question, ce programme me permettrait de ne pas avoir à copier les commentaires manuellement d’une semaine à l’autre et d’un fichier à l’autre. Et ce tout en cherchant à chaque fois à quel client appartient un commentaire. De plus les clients changent de ligne d’une semaine à l’autre ou peuvent même disparaitre de mon fichier en cours, s’ils ont déjà réglé leur facture.
J’espère avoir bien répondu à ta question
merci
 

zeb

Modérateur
Euh, en fait là, tu paraphrases ce que tu as déjà expliqué.

Les questions sont :
■ A quelle feuille la méthode Cells() s'applique-t-elle ?
■ A quoi te sert i ?
(T'inquiète, moi j'ai compris. Mais je voudrais que tu t'y penches, juste histoire que tu participes. C'est surtout pour ne pas me donner l'impression que je fais ton boulot à ta place - :spamafote: )

Les demandes sont :
■ Sois plus précis
■ Débrouille un peu ton problème

Allez, un ptit effort de principe et je te propose une soluce....
 

fopy12

Habitué




excuse, j'avais pas compris.
alors pourr cells, il s'as'applique à la feuilleCible
Quant au i , il me sert de passer d'une ligne à l'autre


je suis en train te "débrouiller" :) mon probleme, mais ça ne marche toujours pas. j'essay des tentatives :(
 

zeb

Modérateur
Salut,

>>> alors pourr cells, il s'as'applique à la feuilleCible
C'est pas évident dans ton code. A revoir.

>> Quant au i , il me sert de passer d'une ligne à l'autre
Je ne vois rien en rapport avec ça dans ton code. A revoir.

Alors, c'est revu ?
(Montre un peu ce que tu fais...)
 

fopy12

Habitué
salut zeb,
j'ai rectifié le cells, qu'en penses tu ?
je me suis penché sur le i dont tu me parlais et je me suis dit que c'est lui le problème. il faut qu'Excel cherche la premiere valeur de la cellule D2 dans feuille source et puis la compare avec toutes les valeurs de la colonne D, si il trouve dans ce cas il fait le copieé collé. si pas trouvé il passe au suivant.

Et j'ai trouvé Instr dans l'aide, mais toujours rien, je suis desespérée
voici mon nouveau code
Code:
Sub TEST()
'
    'Ouvrir le classeur "classeurA" qui se trouve dans le chemin ci dessus. Et puis l'activer.
    Dim ClasseurSource As Workbook
    Workbooks.Open Filename:="\\A19TS-BREFYYKKZ\Utilisateurs\F9596924\Mes Documents\MACROS\ClasseurA.xls"
    Set ClasseurSource = ActiveWorkbook
    
    Dim ClasseurCible As Workbook
    Set ClasseurCible = ThisWorkbook
    
    Dim i As Long
    Dim j As Long
    Dim FeuilleSource As Worksheet
    Dim FeuilleCible As Worksheet


    Set FeuilleSource = ClasseurSource.Worksheets("Feuil1")
    Set FeuilleCible = ClasseurCible.Worksheets("Feuil1")

    i = 2

    For j = FeuilleCible.Cells(65536, 2).End(xlUp).Row To 2 Step -1
    
            If InStr(FeuilleSource.Cells(j, i).Text, FeuilleCible.Cells(j, i).Text) Then
                FeuilleSource.Cells(j, i).Copy FeuilleCible.Cells(j, i)
                i = i + 1
           
                Else
            End If
 
    Next
    
    
    ClasseurSource.Close

End Sub

J'ai mis un autre "for i" mais ca ne marchait pas et je l'ai enlevé.

Je pense que tu m'as assez torturée !! :)
 

zeb

Modérateur
Meilleure réponse
Mais bien sûr qu'il faut ajouter un For i !!!!
Il faut que tu boucles sur ta source ET sur ta cible.

M'enfin, c'est quoi ce Instr() que tu nous mets là ?

Je t'ai dit de virer ce Step -1 ridicule. :o Parce que si je te dis d'étudier ça, tu fais quoi ?

Code:
Dim ClasseurSource As Workbook
Dim ClasseurCible  As Workbook
Dim FeuilleSource  As Worksheet
Dim FeuilleCible   As Worksheet
Dim CelluleSource  As Range
Dim CelluleCible   As Range

Set ClasseurSource = Workbooks.Open(Filename:="C:\Temp\1_MACRO_ffd\ClasseurA.xlsm", ReadOnly:=True)
Set ClasseurCible = ThisWorkbook

Set FeuilleSource = ClasseurSource.Worksheets("Feuil1")
Set FeuilleCible = ClasseurCible.Worksheets("Feuil1")

For Each CelluleSource In FeuilleSource.Range("D2", FeuilleSource.Cells(.Rows.Count, 4).End(xlUp))
    For Each CelluleCible In FeuilleCible.Range("D2", FeuilleCible.Cells(.Rows.Count, 4).End(xlUp))
        If CelluleSource.Text = CelluleCible.Text Then
            CelluleCible.Offset(, 8).Value = CelluleSource.Offset(, 8).Text
        End If
    Next
Next
ClasseurSource.Close SaveChanges:=False

En plus, j'ai optimisé tout ça :
Code:
Dim ClasseurSource As Workbook
Dim PlageSource    As Range
Dim PlageCible     As Range
Dim CelluleSource  As Range
Dim CelluleCible   As Range

Set ClasseurSource = Workbooks.Open(Filename:="C:\Temp\1_MACRO_ffd\ClasseurA.xlsm", ReadOnly:=True)

With ClasseurSource.Worksheets(1)
    Set PlageSource = .Range("D2", .Cells(65536, 4).End(xlUp))
End With
With ThisWorkbook.Worksheets(1)
    Set PlageCible = .Range("D2", .Cells(65536, 4).End(xlUp))
End With

For Each CelluleSource In PlageSource
For Each CelluleCible In PlageCible
        If CelluleSource.Text = CelluleCible.Text Then CelluleCible.Offset(, 8).Value = CelluleSource.Offset(, 8).Text
        End If
Next
Next
ClasseurSource.Close SaveChanges:=False


 

fopy12

Habitué
attends je teste tout ca puis je te redis.

merci


 

fopy12

Habitué
ça marche nickel. t'es trop fort. Respect. En plus ça a l'air si simple. Merci mille fois.
 

zeb

Modérateur
Nan, nan et nan. :non:
Je ne t'ai jamais demandé de le tester mais de l'étudier :o
Comme ça, si il y a un ptit truc à adapter, c'est à toi de le faire, et tu ne peux pas me répondre "oh l'autre, eh, il a pô fait comme il fallait..."

:o

... :D
 

fopy12

Habitué


tkt j lé bien étudiée parce que je devais ensuite l'expliké à ma bosse :D
 
Vous devez vous inscrire ou vous connecter pour répondre ici.
Derniers messages publiés
Statistiques globales
Discussions
730 134
Messages
6 718 079
Membres
1 586 395
Dernier membre
franckorus
Partager cette page
Haut