Microsoft 365 Macro excel qui bug

Céline49

XLDnaute Junior
Bonjour,
Je créé une macro excel pour retravailler 3 bases de données pour lesquels je veux supprimer des colonnes, modifier le format des chiffres (remplacer les points par des virgules, reclasser l'ordre des colonnes, ne garder que les 4 premiers caractères d'une colonne) mais j'ai un bug certainement à plusieurs niveaux de ma macro mais j'avoue ne pas trop savoir comment procéder pour détecter d'où vient le problème.
Vous remerciant par avance pour votre aide

Je vous mets la macro ci-dessous car le fichier est trop lourd avec la macro...mais pourquoi?

Sub Modif()

Dim fl As Worksheet

'Désactiver le raffraichissement d'écran
Application.ScreenUpdating = False

'Désactiver le Calcul Automatique
Application.Calculation = xlManual



' Travailler sur la feuille Vte, Cai et Bqe
For Each fl In Worksheets

If fl.Name <> "Vte" And fl.Name <> "Cai" And fl.Name <> "Bqe" Then

'Remplacer les points par des virgules pour les colonnes G et H

Columns("G:H").Select
Selection.Replace What:=".", Replacement:=",", LookAt:=xlPart, _
SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, _
ReplaceFormat:=False, FormulaVersion:=xlReplaceFormula2

'Supprimer colonnes inutiles
.Range("A:A,E:E").Delete

' Déplacer la colonne de "pièce"

Columns("D:D").Select
Application.CutCopyMode = False
Selection.Cut
Columns("B:B").Select
Selection.Insert Shift:=xlToRight

'Supprimer 1ère ligne
.Rows("1:1").Delete

End If


' Travailler sur la feuille Cai et Bqe
If fl.Name <> "Cai" And fl.Name <> "Bqe" Then


' Ne garder que les 4 premiers caractères de la colonne N° pièce (F)


'Réactiver le Calcul Automatique
Application.Calculation = xlAutomatic
'Réactiver le raffraichissement d'écran
Application.ScreenUpdating = True

End Sub
 

Pièces jointes

  • Trame écriture sans macro.xlsx
    32.1 KB · Affichages: 6

Staple1600

XLDnaute Barbatruc
Bonjour

Pour infos (et pour zapper les smileys ;))
VB:
Sub Modif()

Dim fl As Worksheet

'Désactiver le raffraichissement d'écran
Application.ScreenUpdating = False

'Désactiver le Calcul Automatique
Application.Calculation = xlManual



' Travailler sur la feuille Vte, Cai et Bqe
For Each fl In Worksheets

If fl.Name <> "Vte" And fl.Name <> "Cai" And fl.Name <> "Bqe" Then

'Remplacer les points par des virgules pour les colonnes G et H

Columns("G:H").Select
Selection.Replace What:=".", Replacement:=",", LookAt:=xlPart, _
SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, _
ReplaceFormat:=False, FormulaVersion:=xlReplaceFormula2

'Supprimer colonnes inutiles
.Range("A:A,E:E").Delete

' Déplacer la colonne de "pièce"

Columns("D:D").Select
Application.CutCopyMode = False
Selection.Cut
Columns("B:B").Select
Selection.Insert Shift:=xlToRight

'Supprimer 1ère ligne
.Rows("1:1").Delete

End If


' Travailler sur la feuille Cai et Bqe
If fl.Name <> "Cai" And fl.Name <> "Bqe" Then


' Ne garder que les 4 premiers caractères de la colonne N° pièce (F)


'Réactiver le Calcul Automatique
Application.Calculation = xlAutomatic
'Réactiver le raffraichissement d'écran
Application.ScreenUpdating = True

End Sub
Il suffit d'utiliser la balise BBCODE idoine ;)
(voir ma signature)
 

Staple1600

XLDnaute Barbatruc
Re, jmfmarques (re)

•>jmfmarques
Oui, c'est ce que je viens de dire au message#5
Mais le répéter une seconde fois est indolore...:rolleyes:

•>Céline49
Testes ton code modifié de la sorte et redis-nous
VB:
Sub Modif_II()
Dim fl As Worksheet
'Désactiver le raffraichissement d'écran
Application.ScreenUpdating = False
'Désactiver le Calcul Automatique
Application.Calculation = xlManual
' Travailler sur la feuille Vte, Cai et Bqe
For Each fl In Worksheets
If fl.Name <> "Vte" And fl.Name <> "Cai" And fl.Name <> "Bqe" Then
'Remplacer les points par des virgules pour les colonnes G et H
fl.Columns("G:H").Replace What:=".", Replacement:=","
'Supprimer colonnes inutiles
fl.Range("A:A,E:E").Delete
' Déplacer la colonne de "pièce"
fl.Columns("D:D").Cut fl.Columns("B:B") '.Insert Shift:=xlToRight
'Supprimer 1ère ligne
fl.Rows("1:1").Delete
End If
Next
'Réactiver le Calcul Automatique
Application.Calculation = xlAutomatic
'Réactiver le raffraichissement d'écran
Application.ScreenUpdating = True
End Sub
 

Céline49

XLDnaute Junior
Bonjour,
Je viens de recopier le code de Staple 1600 mais il m'applique la macro sur l'onglet "Mode opératoire" alors qu'il me semble de le code demande bien à ce qu'il soit appliquer sur les onglets "Vte", "Cai", Bqe"
Qu'est-ce qui m'échappe?
Et désolée de mon ignorance...mais c'est quoi les balises BBCODE?
Merci
 

Staple1600

XLDnaute Barbatruc
Re

C'est écrit dans ma signature comme je l'indiquais, non ?
Enjolivez votre code VBA : utiliser l'éditeur de code intégré
(ou les balises BBCODE suivantes: [CODE=VB]Ici le code VBA[/CODE]
Merci pour le plaisir de nos yeux
NB: Cette fois-ci, c'est moi qui suis dans le rôle du répétiteur

Pour la macro, c'est ta macro ;)
J'ai juste ajouté fl là où cela manquait ;)
 

Staple1600

XLDnaute Barbatruc
Re

•>Mme Th*i**ier (²)
Testé sur ton fichier exemple
VB:
Sub Modif_III()
Const FAT As String = "VteCaiBqe"
Dim ws As Worksheet, Nfo
Nfo = Array(Array(0, 1), Array(4, 9))
Application.ScreenUpdating = False
For Each ws In Worksheets
    If InStr(1, FAT, ws.Name) > 0 Then
        With ws
            .Columns("G:H").Replace What:=".", Replacement:=",", LookAt:=2, SearchOrder:=1
            .Columns(7).TextToColumns Destination:=Range("G1"), DataType:=1
            .Columns(8).TextToColumns Destination:=Range("H1"), DataType:=1
            .Range("A:A,E:E").Delete
            .Columns("D:D").Cut
            .Columns("B:B").Insert Shift:=xlToRight
            Application.CutCopyMode = False
            .Columns("B:B").TextToColumns Destination:=Range("B1"), DataType:=2, FieldInfo:=Nfo
            .[B1] = "N° Pièce"
            .[A1].CurrentRegion.Columns.AutoFit
        End With
    End If
Next
End Sub
(²): Toujours penser à anonymiser les classeurs joints ;)
 

Discussions similaires

Statistiques des forums

Discussions
311 719
Messages
2 081 871
Membres
101 828
dernier inscrit
Did-Pan