Excel 2007 : MAJ des lignes de la feuille 2 à partir de la feuil

coolmek2014 Messages postés 6 Statut Membre -  
eriiic Messages postés 24581 Date d'inscription   Statut Contributeur Dernière intervention   -
Bonjour,

Bonjour,

J'ai un gros fichier Excel (vers les 15000 lignes) composé de 2 feuilles, feuille1 et feuille2:
- feuille1:
Idt AA BB CC Statut
111 azetest defrtest tfretest Oui
113 miracle btesr taiwan
115 azer gthy sdffg
122 reza defrgt fhgj
130 qsdftest zdefrtest fhghtest OUi
145 meknes defrgt aleatoire
180 strasbog szqadefr breve
200 wxcvtest gyjutest fhghtest OUI
235 aze defrgt ghjhjj

feuille2:

Idt AA BB CC
111 aze defr hytfre
115 azer gthy sdffg
122 reza defrgt fhgj
130 qsdf szdefr fhgh
200 wxcv gthyju fhgh
235 aze defrgt ghjhjj

j'ai besoin de mettre à jour les lignes de la feuille 2 en recupérant les lignes de la feuille 1 qui ont le statut "Oui"

ce traitement je le lance une fois par semaine.

Je vous remercie d'avance.

8 réponses

  1. eriiic Messages postés 24581 Date d'inscription   Statut Contributeur Dernière intervention   7 281
     
    Bonjour,

    à tester :
    Sub maj()
        Dim derlig As Long, lig As Long, col As Long, datas As Variant
        Dim sh1 As Worksheet, sh2 As Worksheet, c As Range, inconnu As Long
        Set sh1 = Sheets("Feuil1")
        Set sh2 = Sheets("Feuil2")
    
        'recup datas
        With sh1
            derlig = .Cells(Rows.Count, "A").End(xlUp).Row
            datas = .[A2].Resize(derlig - 1, 5)
        End With
    
        ' traitement
        Application.ScreenUpdating = False
        For lig = 1 To UBound(datas)
            If LCase(datas(lig, 5)) = "oui" Then
                Set c = sh2.[A:A].Find(datas(lig, 1), LookIn:=xlValues, Lookat:=xlWhole)
                If c Is Nothing Then
                    inconnu = inconnu + 1
                Else
                    For col = 2 To 4
                        sh2.Cells(c.Row, col) = datas(lig, col)
                    Next col
                End If
            End If
        Next lig
        If inconnu Then MsgBox inconnu & " références non trouvées."
    End Sub 

    https://www.cjoint.com/?DCusiXCqa0k
    Au cas où, le nombre de références à mettre à jour non trouvées dans feuil2 est annoncé à la fin.

    eric
    0
  2. coolmek2014 Messages postés 6 Statut Membre
     
    merci pour la réponse, mais j'avoue que je n'ai rien compris.
    0
    1. eriiic Messages postés 24581 Date d'inscription   Statut Contributeur Dernière intervention   7 281
       
      Tu as ouvert le fichier joint et lancer la macro ?
      Si tu ne connais pas lire ça :
      https://www.commentcamarche.net/faq/37089-vba-premiers-pas-dans-l-editeur-microsoft-visual-basic-for-applications
      et ça :
      Mise à jour d'une procédure

      Si tu as d'autres questions il faudra ta version d'excel.
      eric
      0
  3. coolmek
     
    Slt Eric,

    ça l'air de marcher, je vais la terser demain sur le gros fichier excel.

    est ce que c'est possible d'insérer les lignes qui n'ont pas le statut "Oui" au lieu de : If inconnu Then MsgBox inconnu & " références non trouvées."

    Je te remercie beaucoup Eric et bonne soirée.
    0
  4. eriiic Messages postés 24581 Date d'inscription   Statut Contributeur Dernière intervention   7 281
     
    Bonjour,

    Comme ça ?
    Sub maj()
        Dim derlig As Long, lig As Long, col As Long, datas As Variant
        Dim sh1 As Worksheet, sh2 As Worksheet, c As Range
        Dim cpt1 As Long, cpt2 As Long, inconnu As Long, msg As String
        Set sh1 = Sheets("Feuil1")
        Set sh2 = Sheets("Feuil2")
    
        'recup datas
        With sh1
            derlig = .Cells(Rows.Count, "A").End(xlUp).Row
            datas = .[A2].Resize(derlig - 1, 5)
        End With
    
        ' traitement
        Application.ScreenUpdating = False
        For lig = 1 To UBound(datas)
            If LCase(datas(lig, 5)) = "oui" Then
                cpt1 = cpt1 + 1
                Set c = sh2.[A:A].Find(datas(lig, 1), LookIn:=xlValues, Lookat:=xlWhole)
                If c Is Nothing Then
                    inconnu = inconnu + 1
                Else
                    For col = 2 To 4
                        sh2.Cells(c.Row, col) = datas(lig, col)
                    Next col
                End If
            Else
                cpt2 = cpt2 + 1
            End If
        Next lig
        msg = "Oui : " & vbTab & cpt1 & vbLf
        msg = msg & "Autres : " & vbTab & cpt2 & vbLf & vbLf
        msg = msg & "Références 'Oui' non trouvées : " & inconnu
        MsgBox msg
    End Sub 

    eric
    0
  5. Vous n’avez pas trouvé la réponse que vous recherchez ?

    Posez votre question
  6. coolmek2014 Messages postés 6 Statut Membre
     
    merci Eric,

    j'ai 2 autres questions stp ,

    - J'ai un décalage des colonnes entre les 2 feuilles:

    Feuille1 :

    ColA ColE ColF ColG
    idt info1 info2 info3

    Feuille2:

    ColA ColB ColC ColD DateMaj
    idt info1 info2 info3 Date

    - Dans colonne "DateMaJ", je dois mettre la date du jour pour les lignes qui ont été mises à jour.

    Est ce que tu peux m'aider à modifier le prog?

    Merci beaucoup
    0
  7. eriiic Messages postés 24581 Date d'inscription   Statut Contributeur Dernière intervention   7 281
     
    Il faut mettre le fichier correct dès le début...
    J'ai un décalage des colonnes entre les 2 feuilles
    Avec 'oui' en colH je suppose ?

    Sub maj()
        Dim derlig As Long, lig As Long, col As Long, datas As Variant
        Dim sh1 As Worksheet, sh2 As Worksheet, c As Range
        Dim cpt1 As Long, cpt2 As Long, inconnu As Long, msg As String
        Set sh1 = Sheets("Feuil1")
        Set sh2 = Sheets("Feuil2")
    
        'recup datas
        With sh1
            derlig = .Cells(Rows.Count, "A").End(xlUp).Row
            datas = .[A2].Resize(derlig - 1, 8)
        End With
    
        ' traitement
        Application.ScreenUpdating = False
        For lig = 1 To UBound(datas)
            If LCase(datas(lig, 8)) = "oui" Then
                cpt1 = cpt1 + 1
                Set c = sh2.[A:A].Find(datas(lig, 1), LookIn:=xlValues, Lookat:=xlWhole)
                If c Is Nothing Then
                    inconnu = inconnu + 1
                Else
                    sh2.Cells(c.Row, 2) = datas(lig, 5)
                    sh2.Cells(c.Row, 3) = datas(lig, 6)
                    sh2.Cells(c.Row, 4) = datas(lig, 7)
                    sh2.Cells(c.Row, 5) = Now
                End If
            Else
                cpt2 = cpt2 + 1
            End If
        Next lig
        msg = "Oui : " & vbTab & cpt1 & vbLf
        msg = msg & "Autres : " & vbTab & cpt2 & vbLf & vbLf
        msg = msg & "Références 'Oui' non trouvées : " & inconnu
        MsgBox msg
    End Sub

    J'ai mis date-heure de modif. Changer format de cellule si tu ne veux afficher que la date.

    eric
    0
  8. coolmek2014 Messages postés 6 Statut Membre
     
    Merci Eric,

    Il fait quoi ce bout de code Stp ?

    datas = .[A2].Resize(derlig - 1, 8)
    0
    1. eriiic Messages postés 24581 Date d'inscription   Statut Contributeur Dernière intervention   7 281
       
      Il stocke en mémoire, dans la variable datas, toutes les données sur 8 colonnes.
      0
  9. coolmek2014 Messages postés 6 Statut Membre
     
    Eric,

    une dernière demande,
    je vais te joindre un exemple de fichier excel, ou ils sont exactement les collens de la feuille1 et de la feuille2. car je n'arrive pas à les trouver dans le code.
    0
    1. eriiic Messages postés 24581 Date d'inscription   Statut Contributeur Dernière intervention   7 281
       
      sh2.Cells(c.Row, 2) = datas(lig, 5)
      2 et 5 sont les colonnes
      0