Utiliser VBA pour copier une ligne depuis un onglet dans un autre

Bonjour,

je suis novice sur VBA et malgrès tout mes efforts pour arriver a faire fonctionner ma macro j'y arrive pas.

en résumer il fait qu'une partie du boulot et pas correctement.

j'ai un fichier gestion stock labo chimique avec un onglet "consultation" et une colonne en S qui me dit "vide" lorsque la date de fermeture ou de peremption est depasser.

dans le même fichier j'ai un onglet archivage, lorsque la colonne S indique vide et a l'activation de ma macro je voudrais qu'il copie la ligne avec "vide" dans archivage et qu'il la supprime de l'onglet consultation.

je suis arriver a un code qui me copie la colonne S de consultation dans la colonne D d'archivage ce qui n'est pas ce que je souhaite.

la macro concerner est archivage

cordialement

Bonjour Omont

Remplace le contenu de ta macro "archivage" par cela :

Sub archivage()
  Dim NbLigConsul As Long
  Dim NbLigArch As Long
  Dim K As Long
  Dim WsConsul, WsArchive As Worksheet
    Set WsConsul = Sheets("consultation")
    Set WsArchive = Sheets("Archive")

    NbLigConsul = WsConsul.Range("D5").End(xlDown).Row
    If WsArchive.Range("C5") = "" Then
        NbLigArch = 5
    Else
        NbLigArch = WsArchive.Range("C5").End(xlDown).Row + 1
    End If

  ' Désactive l'actualisation de l'écran pour optimiser les performances
  Application.ScreenUpdating = False

  ' Parcourt chaque ligne
  For K = 5 To NbLigConsul
    ' Si la cellule S de la ligne courante contient "vide"
    If WsConsul.Range("S" & K) = "vide" Then

      ' Copie la ligne entière vers l'onglet "Archive"

        WsArchive.Range("C" & NbLigArch & ":R" & NbLigArch).Value = WsConsul.Range("D" & K & ":S" & K).Value
      ' Supprime la ligne de l'onglet "consultation"
        Rows(K).EntireRow.Delete
        NbLigConsul = NbLigConsul - 1
      ' Décrémente le compteur K pour éviter de sauter une ligne
        K = K - 1

      ' Incrémente le compteur J pour la prochaine ligne dans l'onglet "Archive"
        NbLigArch = NbLigArch + 1
    End If
  Next

  ' Réactive l'actualisation de l'écran
  Application.ScreenUpdating = True
End Sub

Evite I et J pour compter des nombres de ligne, ce n'est pas parlant.

Vois si cela correspond à ton problème.

Bonne soirée

un tres grand MERCI patty c'est exactement ca que je cherchais a faire. Bon Maintenant j'ai au moins 3 jour de boulot pour comprendre toute les etapes et etre capable de m'en re-servir ailleurs.

bonjour Omont,Patty5046,

vous avez 2 tableaux structurés, il faut les utiliser !

Sub Vide()
     Dim iCol, LO

     Set LO = Range("tableau1").ListObject   'tableau "archivage"
     LO.Range.AutoFilter

     With Range("tableau4").ListObject 'tableau "consultation"
          .Range.AutoFilter
          iCol = .ListColumns("Colonne1").Index
          .Range.AutoFilter iCol, "vide"
          I = .Range.Columns(1).SpecialCells(xlVisible).Count
          If I > 1 Then
               .DataBodyRange.Copy LO.ListRows.Add.Range 'copier& coller données "vides"
          End If
          .DataBodyRange.EntireRow.Delete 'supprimer ces données "vides"
          .Range.AutoFilter
     End With
End Sub

merci du conseil. c'est vrai que le code a l'air bien plus court et simple.

Bonjour

la version 2401 d'Excel n'existe pas. C'est une révision.

Vérifies si tu as 2021 ou 365 et mets ton profil à jour

Je te conseille aussi de donner de snoms plus signifiants à tes tableaux que les noms automatiques Tableau1, Tableau4.

Pourquoi pas celui des onglets : Consultation et Archives ?

bonjour,

effectivement c'etait la revision et pas la version. j'ai modifier.

Rechercher des sujets similaires à "utiliser vba copier ligne onglet"