Microsoft 365 Copier en VBA sans la mise en forme

Francky79

XLDnaute Junior
Bonjour le forum,

Comment modifier ce code pour copier sans la mise en forme ?

VB:
Sub lignes_livrées_Acno()
Dim dlg As Integer, lg As Integer, i As Integer
With ActiveSheet
    dlg = .Range("A" & Rows.Count).End(xlUp).Row
    For i = dlg To 2 Step -1
        If UCase(Range("I" & i)) = "2" Then
            lg = Sheets("Lignes_livrées_Acno").Range("A" & Rows.Count).End(xlUp).Row + 1
            .Range("A" & i & ":M" & i).Copy Sheets("Lignes_livrées_Acno").Range("A" & lg)
            .Rows(i).Delete
        End If
    Next
End With
End Sub

Il faudrait intégrer ce bout de code mais je ne sais pas comment faire.

Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False

Merci pour votre aide,
 
Solution
si tu veux juste les valeur ,pas besoins d'utiliser copy
simplement value=value
et meme pas besoins que le sheet de destination soit actif
cependant vaudrait mieux quand même préciser la feuille source concerné à la place de activesheet
remplace donc "tartampion" par le nom du sheets source

VB:
Sub lignes_livrées_Acno()
    Dim dlg As Integer, i As Integer, plage As Range, destination As Range
    With sheets("tartampion")
        dlg = .Range("A" & Rows.Count).End(xlUp).Row
        For i = dlg To 2 Step -1
            If UCase(Range("I" & i)) = "2" Then  'pourquoi UCASE ici!!!???? pas besoins en fait !!!les chiffres et nombres n'ont pas de casse
                Set plage = .Range("A" & i & ":M" & i)
                Set...

patricktoulon

XLDnaute Barbatruc
si tu veux juste les valeur ,pas besoins d'utiliser copy
simplement value=value
et meme pas besoins que le sheet de destination soit actif
cependant vaudrait mieux quand même préciser la feuille source concerné à la place de activesheet
remplace donc "tartampion" par le nom du sheets source

VB:
Sub lignes_livrées_Acno()
    Dim dlg As Integer, i As Integer, plage As Range, destination As Range
    With sheets("tartampion")
        dlg = .Range("A" & Rows.Count).End(xlUp).Row
        For i = dlg To 2 Step -1
            If UCase(Range("I" & i)) = "2" Then  'pourquoi UCASE ici!!!???? pas besoins en fait !!!les chiffres et nombres n'ont pas de casse
                Set plage = .Range("A" & i & ":M" & i)
                Set destination = Sheets("Lignes_livrées_Acno").Range("A" & Rows.Count).End(xlUp).Offset(1).Resize(1, plage.Columns.Count)
                destination.Value = plage.Value
                .Rows(i).Delete
            End If
        Next
    End With
End Sub
 

vgendron

XLDnaute Barbatruc
Bonjour

et pourquoi pas juste
VB:
Sub lignes_livrées_Acno()
Dim dlg As Integer, lg As Integer, i As Integer
With ActiveSheet
    dlg = .Range("A" & Rows.Count).End(xlUp).Row
    For i = dlg To 2 Step -1
        If UCase(Range("I" & i)) = "2" Then
            lg = Sheets("Lignes_livrées_Acno").Range("A" & Rows.Count).End(xlUp).Row + 1
            .Range("A" & i & ":M" & i).Copy 
            Sheets("Lignes_livrées_Acno").Range("A" & lg).PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
            .Rows(i).Delete
        End If
    Next
End With
End Sub

cela dit.. sans fichier pas moyen de vérifier
il me semble que le pastespecial necessite de selectionner la cellule cible....
un rangeSource.copy rangedest.pastespecial n'est pas accepté par vba.. jamais compris pourquoi...
 

Phil69970

XLDnaute Accro
Bonjour @Francky79
Edit : Bonjour @patricktoulon , @vgendron

Je te propose :
VB:
Sub lignes_livrées_Acno()
Dim dlg As Integer, lg As Integer, i As Integer
With ActiveSheet
    dlg = .Range("A" & Rows.Count).End(xlUp).Row
    For i = dlg To 2 Step -1
        If UCase(Range("I" & i)) = "2" Then
            lg = .Range("A" & Rows.Count).End(xlUp).Row + 1
            .Range("A" & lg & ":M" & lg) = .Range("A" & i & ":M" & i).Value
            .Rows(i).Delete
        End If
    Next
End With
End Sub

*Merci de ton retour

@Phil69970
 
Dernière édition:

Jacky67

XLDnaute Barbatruc
Bonjour à tous

Le tout des codes donnés sans oublier le point devant "Range" et "Rows"
dlg = .Range("A" & .Rows.Count).End(xlUp).Row
'
If UCase(.Range("I" & i)) = "2" Then
ou
If .Range("I" & i) = 2 Then

selon.que 2 soit numérique ou pas
 

Discussions similaires

Réponses
14
Affichages
200
Réponses
2
Affichages
205

Statistiques des forums

Discussions
292 828
Messages
1 926 650
Membres
183 166
dernier inscrit
oussama2021