XL 2016 Grouper 3 macros

luke3300

XLDnaute Impliqué
Bonjour le forum,

J'utilise 3 macros actuellement et j'aimerais les simplifier et n'en avoir qu'une seule.

Voici les codes:

Code:
Sub Macro2()
'
' Copie les noms
'

'
Application.ScreenUpdating = False
Application.DisplayAlerts = False
    Sheets("New").Select
    Range("A5").Select
    Range(Selection, Selection.End(xlDown)).Select
    Selection.Copy
    Sheets("Distribution").Select
    Range("D26").Select
    Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
        :=False, Transpose:=False
    Application.CutCopyMode = False 'supprime le clignotement lié au copier/coller
    Range("F26").Select
    Sheets("Données").Select
    Range("A1").Select
End Sub
Sub Macro3()
'
' Macro3 Macro
'

'
Application.ScreenUpdating = False
Application.DisplayAlerts = False
    Sheets("New").Select
    Range("D2").Select
    Range(Selection, Selection.End(xlToRight)).Select
    Selection.Copy
    Sheets("Distribution").Select
    Range("F9").Select
    Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
        :=False, Transpose:=False
    Selection.Replace What:="J0", Replacement:="", LookAt:=xlPart, _
        SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, _
        ReplaceFormat:=False
    Selection.Replace What:="JS", Replacement:="S", LookAt:=xlPart, _
        SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, _
        ReplaceFormat:=False
    Application.CutCopyMode = False 'supprime le clignotement lié au copier/coller
    Range("F26").Select
    Sheets("Données").Select
    Range("A1").Select
End Sub
Sub Macro5()
'
' Macro5 Macro
'

'
Application.ScreenUpdating = False
Application.DisplayAlerts = False
    Sheets("New").Select
    Range("D5").Select
    Range(Selection, Selection.End(xlToRight)).Select
    Range(Selection, Selection.End(xlDown)).Select
    Application.CutCopyMode = False
    Selection.Copy
    Sheets("Distribution").Select
    Range("F26").Select
    Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
        :=False, Transpose:=False
    Selection.Replace What:="2", Replacement:="1", LookAt:=xlPart, _
        SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, _
        ReplaceFormat:=False
    Selection.Replace What:="3", Replacement:="1", LookAt:=xlPart, _
        SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, _
        ReplaceFormat:=False
    Application.CutCopyMode = False 'supprime le clignotement lié au copier/coller
    Range("F26").Select
    Sheets("Données").Select
    Range("A1").Select
End Sub

Il s'agit de Macros de copier/coller et de remplacement de valeurs.

Merci d'avance pour l'aide que vous pourrez m'apporter et excellent début de semaine à toutes et tous.
 

cp4

XLDnaute Barbatruc
Bonjour,

Avec un petit fichier ça aurait été plus pratique.
essaie la 1ère macro, si elle fait le même boulot.
VB:
Sub Macro2()
' Copie les noms
Application.ScreenUpdating = False
Application.DisplayAlerts = False
    Sheets("New").Range("A5:A" & Sheets("new").Range("A5").End(xlDown).Row).Copy Sheets("Distribution").Range("D26")
Application.DisplayAlerts = True
Application.ScreenUpdating = True
End Sub
@+
 

cp4

XLDnaute Barbatruc
à tester la suivante
VB:
Sub Macro3()
   Dim Rng1 As Range, Cell As Variant, dl As Integer
   Application.ScreenUpdating = False
   Application.DisplayAlerts = False
   Set Rng1 = Sheets("New").Range("D2:D" & Sheets("new").Range("D2").End(xlDown).Row)
   dl = Rng1.End(xlDown).Row

   Rng1.Copy Sheets("Distribution").Range("F9")
   With Sheets("Distribution")
      For Each Cell In .Range("F9:F" & dl)
         Cell.Value = Replace(Cell.Value, "J0", "")
         Cell.Value = Replace(Cell.Value, "JS", "S")
      Next Cell
   End With
   Application.DisplayAlerts = True
   Application.ScreenUpdating = True
End Sub
@+
 

luke3300

XLDnaute Impliqué
Bonjour cp4, zebanx, le forum,

J'ai fait un petit fichier que je joint ... ce sera plus facile je pense ;)
J'aimerais que les données soient collées en valeur et les plages (tant d'origine que de destinations) sont susceptibles de s'étendre suivant les données dans le sens des flèches que j'ai ajoutés dans le fichier.

Encore merci et bonne journée
 

Pièces jointes

  • Test1 - Copie.xlsm
    252.2 KB · Affichages: 20

cp4

XLDnaute Barbatruc
Bonsoir,

Je n'ai pas compris tu as mis sur la feuille distribution, des validations à 0 ou 1.
Alors que la plage en question est alimentée à partir de la feuille new.
un essai à tester.
VB:
Option Explicit

Sub essai1()
   Dim Lfs As Integer, Lfd As Integer, Cfs As Integer, Cfd As Integer
   Dim NbCfd As Intege
   Dim Fs As Worksheet, Fd As Worksheet
   Set Fs = Worksheets("new")
   Set Fd = Worksheets("distribution")

   With Fd 'on vide les lignes et colonnes
      Lfd = .Range("d" & Rows.Count).End(xlUp).Row
      Cfd = .Range("f9").End(xlToRight).Column
      NbCfd = Cfd - 5
      .Range("D26:D" & Lfd).ClearContents
      On Error Resume Next
      .Range(Cells(9, 6), Cells(9, 6 + NbCfd)).ClearContents
      On Error GoTo 0

   End With

   With Fs
      Lfs = .Range("a" & Rows.Count).End(xlUp).Row
      Cfs = .Range("D2").End(xlToRight).Column
      .Range("A5:A" & Lfs).Copy Fd.Range("D26")
      .Range(.Cells(2, 4), .Cells(2, Cfs)).Copy Fd.Range("F9")
      .Range(.Cells(5, 4), .Cells(Lfs, Cfs)).Copy Fd.Range("F26")
   End With

   With Fd
      Dim cel As Range
      Lfd = .Range("d" & Rows.Count).End(xlUp).Row
      Cfd = .Range("f9").End(xlToRight).Column
      For Each cel In .Range(.Cells(9, 4), .Cells(9, Cfd))
         cel = Replace(cel, "J0", "")
         cel = Replace(cel, "JS", "S")
      Next
      For Each cel In .Range(.Cells(26, 5), .Cells(Lfd, Cfd))
         cel = Replace(cel, 2, 1)
         cel = Replace(cel, 3, 1)
      Next
   End With
End Sub
Bonne continuation.
 

luke3300

XLDnaute Impliqué
Bonjour cp4, le forum,

Cela fonctionne mais les données sont collées avec les formats etc ... et la colonne C de la feuille New ... alors que le but est de les coller en tant que "valeurs" et de ne pas intégrer les données de la colonne C.
Serait-ce possible?

Merci beaucoup pour ton aide :)
 
Dernière édition:

cp4

XLDnaute Barbatruc
Bonjour cp4, le forum,

Cela fonctionne mais les données sont collées avec les formats etc ... et la colonne C de la feuille New ... alors que le but est de les coller en tant que "valeurs" et de ne pas intégrer les données de la colonne C.
Serait-ce possible?

Merci beaucoup pour ton aide :)
Revoie bien le code, à aucune ligne la colonne C n'est prise en considération. Ce qui veut dire que ses données ne sont pas copiées sur la feuille distribution. Bien sûr, si tu as joint un fichier que ne reprend pas exactement ton fichier original. Là, je perds mon temps. Que veux-tu obtenir d'autre en copiant/collant du texte en tant que valeur; ça sera toujours du texte. Sauf si tu as autre chose que du string (numérique ou formule).
Bonne continuation.
 

luke3300

XLDnaute Impliqué
Re cp4 :)
Non j'utilise bien le fichier que j'ai joint. J'avais bien vu que la colonne C n'est mentionnée nulle part dans le code et c'est pour ça que je l'ai signalé ... dans le fichier de base, la colonne C de la feuille Distribution comporte des formules et lorsque j'active le code, les formules sont remplacées par des nombres.
Merci beaucoup
 

cp4

XLDnaute Barbatruc
Je pense bien que tu ne m'as pas compris, à quoi bon copier/coller la colonne A qui contient que du texte (A......N) en tant que valeur.
Du texte restera toujours du texte.
Je n'ai pas compris ton insistance pour copier en tant que valeur. Merci d'expliquer.
 

luke3300

XLDnaute Impliqué
En fait la macro copie la mise en forme des cellules de départ et en collant, écrase la mise en forme des cellules de destination. Hors j'aimerais conserver la mise en forme de la feuille Distribution. Moi je ne connais que le copié/collé en tant que valeur pour contourner cela ... d'où mon insistance :(
 

Discussions similaires

Réponses
1
Affichages
121

Statistiques des forums

Discussions
312 198
Messages
2 086 132
Membres
103 127
dernier inscrit
willwebdesign