Copie cellule des colonnes H et M à T si cellule colonne I=code nouveau

Bonjour,

Je suis débutant sur excel au niveau VB et j'aurais besoin d'aide l'objectif est de copier les celulles d'une meme lignes sur une autre feuille si la condition de cette ligne en colonne I =Nouveau code

Je désire créer une macro pouvant réaliser ceci : à savoir

feuille BOM : condition si la cellule dans la colonne I=Nouveau code

alors copier les cellules de la meme ligne pour les colonnes H et M à O dans la feuille PDS021 opérations dans les cellules B et D, F, G

merci d'avance

16classeur1.xlsx (11.00 Ko)

Bonjour Salpetier,

Ma proposition en P.J.

Cordialement,

Gérard

merci cela fonctionne

Bonjour,

Je reviens vers car quand je reporte la macro j'ai cette ligne qui se met en jaune quand je veux l'appliquer je ne comprend pas pourquoi

aidé moi s'il vous plait

Set oRange = ThisWorkbook.Names("FirstRow").RefersToRange

Bonjour salpetier.

Bonjour Gérard.

Une autre solution en fichier joint.

Merci cela règle mon problème précédent qui je pense et lié au bouton

j'ai un autre besoin sur cette macro

il faudrait que celle-ci me copie aussi les valeurs des colonnes Q,R,S ET U,V,W si il y a quelques chose dans la cellule avec leur références associés en colonne H comme précédement

Salutations

82435107 100 22380 99

82435108 100 22380 99

82455283 100 22220 99

82454009 100 22220 99

82454010 100 22220 99

82455283 110 22630 0,4

82454009 110 22630 0,4

82454010 110 22630 0,4

je les désirai comme- ceci tt dans la meme colonne si possible avec un tri par référence

salutations

Code Movex / Poste de charge N°OPE PDC2 " TPS EN CH EXECUTION

82435107 100 22380 99

82435108 100 22380 99

82454009 100 22220 99

82454009 110 22630 0,4

82454010 100 22220 99

82454010 110 22630 0,4

82455283 100 22220 99

82455283 110 22630 0,4

c'est à dire un tableau avec colonne : colonne B code Movex/ Colonne C N° ope/colonne D poste de charge/ colonne F TPS EN CH EXECUTION

Code Movex / Poste de charge N°OPE PDC2 "TPS EN CH EXECUTION

82435107 100 22380 99

82435108 100 22380 99

82454009 100 22220 99

82454009 110 22630 0,4

82454010 100 22220 99

82454010 110 22630 0,4

82455283 100 22220 99

82455283 110 22630 0,4

c'est à dire un tableau avec colonne colonne B code Movex/ Colonne C N° ope/colonne D poste de charge/ colonne F TPS EN CH EXECUTION

Effectivement, en demandant dans la même colonne j'ai compris tout dans la même colonne sans décalage.

Vraiment un grand merci pour votre aide

j'aimerai comprendre le code créé pourriez vous me décrire sue la macro ce que fait chaque ligne si cela ne vous dérange pas et si vous avez le temps bien sur

et dernière question comment s'effectue la recherche sur la colonne jusqu'ou descend elle?

merci d'avance

La recherche s'effectue jusqu'à la dernière ligne de ton fichier.

Option Explicit

Sub export()
Dim a(), i&, n&

With ThisWorkbook.Sheets("BOM")
    'Enregistrement du tableau BOM dans un tableau virtuel.
    'De [A1] à [W&dernière ligne]
    a = .Range(.[a1], .Range("W" & .Cells.Find("*", , , , xlByRows, xlPrevious).Row)).Value
End With

With ThisWorkbook.Sheets("PDS021 Opérations")
    'Nettoye la feuille PDS021.
    .Range(.[a4], .Range("E" & .Cells.Find("*", , , , xlByRows, xlPrevious).Row)).Offset(1).Clear
    'Boucle sur le tableau virtuel.
    For i = LBound(a) To UBound(a)
        'Si en 9ème colonne il est inscrit Nouveau code alors.
        If a(i, 9) = "Nouveau code" Then
            'On incrémente n de 1.
            n = n + 1
            'En [B4] décalé de n lignes, on enregistre la valeur en colonne 8.
            'Ainsi de suite.
            .[B4].Offset(n).Value = a(i, 8)
            .[C4].Offset(n).Value = a(i, 13)
            .[D4].Offset(n).Value = a(i, 14)
            .[E4].Offset(n).Value = a(i, 15)
            'S'il existe une valeur en colonne 17 alors.
            If a(i, 17) <> "" Then
                n = n + 1
                .[B4].Offset(n).Value = a(i, 8)
                .[C4].Offset(n).Value = a(i, 17)
                .[D4].Offset(n).Value = a(i, 18)
                .[E4].Offset(n).Value = a(i, 19)
            End If
            'S'il existe une valeur en colonne 21 alors.
            If a(i, 21) <> "" Then
                n = n + 1
                .[B4].Offset(n).Value = a(i, 8)
                .[C4].Offset(n).Value = a(i, 21)
                .[D4].Offset(n).Value = a(i, 22)
                .[E4].Offset(n).Value = a(i, 23)
            End If
        End If
    Next i
    'Tri de la liste de [B5] à [E&dernière ligne] par rapport à [B5]
    .Range(.[B4], .Range("E" & .Cells.Find("*", , , , xlByRows, xlPrevious).Row)).Offset(1).Sort .[B5], xlAscending
End With
End Sub

merci

Bonjour

comment faire si je veux faire pareil mais de la colonne x jusqu' a la dernière colonne du tableau

(ex : colonne 50 jusqu'a la dernière colonne du tableau)

tjs en accumulant des données les une en dessous des autres dans les meme colonnes de destinations

'Option Explicit

Sub export()
Dim a(), i&, n&, j&
Dim ii&, jj&

With ThisWorkbook.Sheets("BOM")
    'Enregistrement du tableau BOM dans un tableau virtuel.
    'De [A1] à [W&dernière ligne]
    ii = .Cells.Find("*", , , , xlByRows, xlPrevious).Row
    jj = .Cells.Find("*", , , , xlByColumns, xlPrevious).Column
    a = .Range(.[a1], .Cells(ii, jj)).Value
End With

With ThisWorkbook.Sheets("PDS021 Opérations")
    'Nettoye la feuille PDS021.
    .Range(.[a4], .Range("E" & .Cells.Find("*", , , , xlByRows, xlPrevious).Row)).Offset(1).Clear
    'Boucle sur le tableau virtuel.
    For i = LBound(a) To UBound(a)
        'Si en 9ème colonne il est inscrit Nouveau code alors.
        If a(i, 9) = "Nouveau code" Then
            For j = 13 To jj Step 4
                If a(i, j) = "" Then Exit For
                'On incrémente n de 1.
                n = n + 1
                'En [B4] décalé de n lignes, on enregistre la valeur en colonne 8.
                'Ainsi de suite.
                .[B4].Offset(n).Value = a(i, 8)
                .[C4].Offset(n).Value = a(i, j)
                .[D4].Offset(n).Value = a(i, j + 1)
                .[E4].Offset(n).Value = a(i, j + 2)
            Next j
        End If
    Next i
    'Tri de la liste de [B5] à [E&dernière ligne] par rapport à [B5]
    .Range(.[B4], .Range("E" & .Cells.Find("*", , , , xlByRows, xlPrevious).Row)).Offset(1).Sort .[B5], xlAscending
End With
End Sub

La dernière colonne est déterminée.

Ici on boucle à partir de la colonne 13 puis toutes les 4 colonnes, décalage de ton dernier fichier.

Si tu dois partir depuis la 50 :

For j = 50 To jj Step 4
Rechercher des sujets similaires à "copie colonnes colonne code nouveau"