Soucis

je veux copier les valeurs qui sont dans la feuille 1 dans la colonne B dans la feuille 2 dans la colonne b aussi

leurs colonne A : ils sont les mêmes valeurs mais dans la feuille 2 il sont espacé au lieux de 10 ligne j ai 14 ligne du coup j ai fais le code comme ceci j’espère que vous allé maider jai rajouter mm le fichier excel :

Sub mise_à_jour()

Dim i, j As Integer

Dim nbligne2, nbligne1 As Integer

nbligne1 = Feuil1.Cells(Rows.Count, "A").End(xlUp).Row

nbligne2 = Feuil2.Cells(Rows.Count, "A").End(xlUp).Row

For i = 1 To nbligne2

If Feuil2.Cells(i, 1).Value <> "" Then

For j = 1 To nbligne1

If (Feuil1.Cells(j, 1) = Feuil2.Cells(i, 1)) Then

Feuil1.Cells(j, 2) = Feuil2.Cells(i, 2)

Feuil1.Cells(j, 2).Copy Feuil2.Cells(i, 2)

End If

Next j

End If

Next i

End Sub

4one.xlsx (9.37 Ko)

Bonjour,

Une piste :

Sub Test()

    Dim PlgFE1 As Range
    Dim PlgFE2 As Range
    Dim Cel1 As Range
    Dim Cel2 As Range

    With Worksheets("Feuil1"): Set PlgFE1 = .Range(.Cells(1, 1), .Cells(.Rows.Count, 1).End(xlUp)): End With
    With Worksheets("Feuil2"): Set PlgFE2 = .Range(.Cells(1, 1), .Cells(.Rows.Count, 1).End(xlUp)): End With

    For Each Cel1 In PlgFE1

        Set Cel2 = PlgFE2.Find(Cel1.Value, , xlValues, xlWhole)
        If Not Cel2 Is Nothing Then Cel2.Offset(, 1).Value = Cel1.Offset(, 1).Value

    Next Cel1

End Sub

Bonjour,

j'ai résonné en C mais ça marche pas apparemment sur excel .

S'il vous plait j'ai une autre question comment puis je faire la même chose si j ai genre la feuille 1 est dans un fichier excel unique et la feuille 2 est dans un autre fichier excel

en générale je veux faire cette tache mais avec deux fichier excel

merci d'avance pour votre repense

Un truc dans le genre :

Sub Test()

    Dim PlgFE1 As Range
    Dim PlgFE2 As Range
    Dim Cel1 As Range
    Dim Cel2 As Range

    With Workbooks("Classeur1.xlsm").Worksheets("Feuil1"): Set PlgFE1 = .Range(.Cells(1, 1), .Cells(.Rows.Count, 1).End(xlUp)): End With
    With Workbooks("Classeur2.xlsm").Worksheets("Feuil2"): Set PlgFE2 = .Range(.Cells(1, 1), .Cells(.Rows.Count, 1).End(xlUp)): End With

    For Each Cel1 In PlgFE1

        Set Cel2 = PlgFE2.Find(Cel1.Value, , xlValues, xlWhole)
        If Not Cel2 Is Nothing Then Cel2.Offset(, 1).Value = Cel1.Offset(, 1).Value

    Next Cel1

End Sub

Il te faut adapter les noms des classeurs avec leurs extensions mais attention, ils doivent être ouverts tous les deux

MERCI BCP BONNE SOIREE

Je t'en prie, c'est avec plaisir

coucou enfaîte j'ai essayé avec deux fichier de 400 éléments CA MARCHE PAS je sais pas pourquoi voila le code que j'ai fais

sub Mise_à_jour()

Dim PlgFE1 As Range

Dim PlgFE2 As Range

Dim Cel1 As Range

Dim Cel2 As Range

Dim chemin_globale As String

chemin_globale = "c:\za.xlsx"

Set za = Application.Workbooks.Open(chemin_globale)

With Application.Workbooks("za.xlsx").Worksheets("Feuil1"): Set PlgFE1 = .Range(.Cells(3, 2), .Cells(.Rows.Count, 2).End(xlUp)): End With

With Application.Workbooks("zo.xlsm").Worksheets("Documents"): Set PlgFE2 = .Range(.Cells(3, 3), .Cells(.Rows.Count, 3).End(xlUp)): End With

For Each Cel1 In PlgFE1

Set Cel2 = PlgFE2.Find(Cel1.Value, , xlValues, xlWhole)

If Not Cel2 Is Nothing Then Cel2.Offset(, 1).Value = Cel1.Offset(, 2).Value

Next Cel1

End Sub

Bonjour,

Sinon, avec une double boucles mais ça sera un peu plus lent.

Si tu travailles depuis Excel, tu n'est pas obligé d'utiliser l'objet "Application" car la collection "Workbooks" est une propriété implicite de l'application active comme l'est pas exemple la collection "Worksheets" pour l'objet "Workbook" actif :

Sub Mise_à_jour()

    Dim za As Workbook
    Dim PlgFE1 As Range
    Dim PlgFE2 As Range
    Dim Cel1 As Range
    Dim Cel2 As Range
    Dim chemin_globale As String

    chemin_globale = "c:\za.xlsx"

    'teste si le classeur est ouvert...
    On Error Resume Next
    Set za = Workbooks("za.xlsx")
    '...si non, l'ouvre
    If Err.Number <> 0 Then Set za = Workbooks.Open(chemin_globale)

    'supprime le gestionnaire d'erreur
    On Error GoTo 0

    With za.Worksheets("Feuil1"): Set PlgFE1 = .Range(.Cells(3, 2), .Cells(.Rows.Count, 2).End(xlUp)): End With
    With Workbooks("zo.xlsm").Worksheets("Documents"): Set PlgFE2 = .Range(.Cells(3, 3), .Cells(.Rows.Count, 3).End(xlUp)): End With

    For Each Cel1 In PlgFE1

        For Each Cel2 In PlgFE2

        If Cel1.Value = Cel2.Value Then Cel2.Offset(, 1).Value = Cel1.Offset(, 2).Value

        Next Cel2

    Next Cel1

End Sub

Bonjour,

Merci bcp pour tout

mais le-soucis par exemple si j'ai dans la FEUIL1

A1=A et B1=0

A2=A et B2= 9

dans la FEUIL 2 il prend toujours en considération la dernier valeurs du coup il affiche :

A1=A et B1=9

A2=A et B2= 9

merci encore une fois par avance pour votre temps précieux

2classeur1.xlsm (16.40 Ko)

Ce qui est tout a fait logique puisqu'il fait des passes successives sur la plage en feuille "Feuil2" de haut en bas donc, si il trouve une cellule ayant comme valeur A et que à coté il y a 9, 9 va remplacé le 0 de la cellule A précédente c'est comme si tu as 10 valeurs A avec en B des valeurs différentes, ça sera toujours la dernière qui va être inscrite puisque pour le compilateur, A = A !

Tu as deux A en feuille "Feuil1" avec chacune une valeur différente (0 et 9) et que en feuille "Feuil2" tu as un seul A comment veux tu lui dire laquelle il faut prendre ?

Donc, soit tu contrôles si la cellule devant recevoir la valeur est déjà renseignée ou pas ou alors il faudrait que j'en sache plus !

oui genre quand il copie la valeurs si la case elle est pleine il l’écrase pas il saute a second case .

j’espère que vous savez comment puis je faire ça

oui genre quand il copie la premeir valeurs il voit si la case est pleine il saute a la 2eme je veux pas quil l'ecrase

jspr que vous savez comment faire

Il te faut faire le test :

For Each Cel1 In PlgFE1

    For Each Cel2 In PlgFE2

    If Cel1.Value = Cel2.Value Then

        'n'inscrit que si la cellule es vide
        If Cel2.Offset(, 1).Value = "" Then Cel2.Offset(, 1).Value = Cel1.Offset(, 2).Value

    Next Cel2

Next Cel1

Bonjour,

merci bcp vous étes vraiment gentille , sos j ai un soucis

j ai regrouper tout les fichier par ligne mais il peut pas faire la comparaison tant que le fichier n est pas dérougrouper

j ai éssayé qu'est ce qui ya sur internet mais ca marche pas sil vous plait vous avait pas une solution a me proposé ??

il faut qui dégroupe la liste pour la comparer cest le mm code

Sub Mise_à_jour()

Dim za As Workbook

Dim PlgFE1 As Range

Dim PlgFE2 As Range

Dim Cel1 As Range

Dim Cel2 As Range

Dim chemin_globale As String

chemin_globale = "c:\za.xlsx"

'teste si le classeur est ouvert...

On Error Resume Next

Set za = Workbooks("za.xlsx")

'...si non, l'ouvre

If Err.Number <> 0 Then Set za = Workbooks.Open(chemin_globale)

'supprime le gestionnaire d'erreur

On Error GoTo 0

With za.Worksheets("Feuil1"): Set PlgFE1 = .Range(.Cells(3, 2), .Cells(.Rows.Count, 2).End(xlUp)): End With

With Workbooks("zo.xlsm").Worksheets("Documents"): Set PlgFE2 = .Range(.Cells(3, 3), .Cells(.Rows.Count, 3).End(xlUp)): End With

' degrouper le fichier et puis il fait ca

For Each Cel1 In PlgFE1

For Each Cel2 In PlgFE2

If Cel1.Value = Cel2.Value Then Cel2.Offset(, 1).Value = Cel1.Offset(, 2).Value

Next Cel2

Next Cel1

End Sub

Rechercher des sujets similaires à "soucis"