Microsoft 365 VBA ajouter une ligne dans une nouvelle sheet si la ligne n'existe pas

lestatber

XLDnaute Nouveau
Bonjour à tous,

J'ai besoin d'un coup de pouce en VBA :)

J 'ai un tableau Extactlims" sheet "data" +-8000 lignes
1635763506040.png

et un tableau "invalide" sheet invalides
1635763497455.png

Je souhaiterai créer un bouton qui permettre de filter la colonne "INVALIDE" sur base de la "INV" du tableau "Extactlims"
1635763586251.png

ensuite je souhaite un code qui me permette de verifier si l'ID de l'echantillon dont l'identifier ="parentsampleid" de la sheet data existe dans mon tableau d'invalide
s'il n'existe pas
je souhaiterai copier les valeurs de chaque colonne en "Jaune" dans la tableau invalide
1635764223261.png

Merci pour votre aide

Merci d'avabc
 

Pièces jointes

  • 1635763544298.png
    1635763544298.png
    15.5 KB · Affichages: 10
  • aide.xlsm
    14.3 KB · Affichages: 5
Solution
Bonjour Lestatber, bonjour le forum,

En pièce jointe une proposition VBA avec le CommandButton (Recup) et le code ci-dessous :

VB:
Sub Macro1()
Dim OS As Worksheet 'déclare la variable OS (Onglet Source)
Dim TV As Variant 'déclare la variable TV (Tableau des Valeurs)
Dim OD As Worksheet 'déclare la variable OD (Onglet Destination)
Dim TS As ListObject 'déclare la variable TS (Tableau Structuré)
Dim PTS As Range 'déclare la variable PTS (Plage du Tableau Structuré)
Dim I As Integer 'déclare la variable I (Incrément)
Dim K As Integer 'déclare la variable K (incrément)
Dim R As Range 'déclare la variable R (Recherche)
Dim TL() As Variant 'déclare la variable TL (Tableau des Lignes)
Dim LR As Integer 'déclare...

Robert

XLDnaute Barbatruc
Repose en paix
Bonjour Lestatber, bonjour le forum,

En pièce jointe une proposition VBA avec le CommandButton (Recup) et le code ci-dessous :

VB:
Sub Macro1()
Dim OS As Worksheet 'déclare la variable OS (Onglet Source)
Dim TV As Variant 'déclare la variable TV (Tableau des Valeurs)
Dim OD As Worksheet 'déclare la variable OD (Onglet Destination)
Dim TS As ListObject 'déclare la variable TS (Tableau Structuré)
Dim PTS As Range 'déclare la variable PTS (Plage du Tableau Structuré)
Dim I As Integer 'déclare la variable I (Incrément)
Dim K As Integer 'déclare la variable K (incrément)
Dim R As Range 'déclare la variable R (Recherche)
Dim TL() As Variant 'déclare la variable TL (Tableau des Lignes)
Dim LR As Integer 'déclare la variable LR (LIgne de Référence)

Set OS = Worksheets("TAB") 'définit l'onglet source OS
TV = OS.Range("A1").CurrentRegion 'définit le tableau des valeurs TV
Set OD = Worksheets("INVALIDE") 'définit l'onglet destination OD
Set TS = OD.ListObjects("Invalide") 'définit le tableau structuré TS
Set PTS = TS.DataBodyRange 'définit la plage PTS
LR = IIf(PTS(1, 1).Value = "", 1, TS.HeaderRowRange(1, 1).End(xlDown).Row) 'définit la ligne LR
For I = 2 To UBound(TV, 1) 'boucle sur toutes les lignes I du tableau des valeurs TV (en partant de la seconde)
    If TV(I, 56) = "INV" Then 'condition 1 : si la donnée ligne I colonne 56 (=> colonne BD)
        Set R = PTS.Columns(1).Find(TV(I, 1), , xlValues, xlWhole) 'définir la recherche R (recherche dans la colonne 1 de la plage PTS la valeur exacte de la donnée ligne I colonne 1 de TV)
        If R Is Nothing Then 'condition 2 : s'il n'existe aucubne occurrence trouvée
            K = K + 1 'incrémente K
            ReDim Preserve TL(1 To 5, 1 To K) 'redimensionne le tableau des lignes TL (5 lignes K colonnes)
            TL(1, K) = TV(I, 1) 'récupère dans la ligne 1 de TL la donnée en colonne 1 de TV => Transposition)
            TL(2, K) = TV(I, 10) 'récupère dans la ligne 2 de TL la donnée en colonne 10 de TV => Transposition)
            TL(3, K) = TV(I, 16) 'récupère dans la ligne 3 de TL la donnée en colonne 16 de TV => Transposition)
            TL(4, K) = TV(I, 17) 'récupère dans la ligne 4 de TL la donnée en colonne 1 de T7 => Transposition)
            TL(5, K) = TV(I, 56) 'récupère dans la ligne 5 de TL la donnée en colonne 56 de TV => Transposition)
            TS.ListRows.Add 'ajoute une ligne au tableau structuré TS
        End If 'fin de la condition 2
    End If 'fin de la condition 1
Next I 'prochaine ligne de la boucle
PTS(LR, 1).Resize(K, 5).Value = Application.Transpose(TL) 'renvoie le tableau TL transposé dans la cellule ligne LR colonne 1 redimensionnée de la plage PTS
End Sub
 

Pièces jointes

  • Lesstatber_ED_v01.xlsm
    27.4 KB · Affichages: 2

Discussions similaires

Statistiques des forums

Discussions
314 749
Messages
2 112 462
Membres
111 555
dernier inscrit
NicolasLienard