Cellules non vides suite export SAP

babass78

XLDnaute Occasionnel
Bonjour,

J'ai un fichier exporté de SAP Business One

1)° Dans les colonnes B, C et L, (en jaune) j'aimerai que les données de la ligne se répètent jusqu'au client suivant

code client
nom du client
code mode de paiement

Lorsque je sélectionne la colonne, F5 Atteindre cellules vides, il ne se passe rien

Comment pourrais-je faire?

2°) Comment faire pour que les dates soient des dates ?(colonnes orange) (quand on fait F2, cela se met en date et à droite)

Merci de votre aide
 

Pièces jointes

  • Test cellules vides Exceldownload.xlsx
    13.7 KB · Affichages: 29
  • Test cellules vides Exceldownload.xlsx
    13.7 KB · Affichages: 38
  • Test cellules vides Exceldownload.xlsx
    13.7 KB · Affichages: 39

Paf

XLDnaute Barbatruc
Re : Cellules non vides suite export SAP

Bonjour,

à tester une solution par macro qui
-remplie les cellules vides des colonnes B, C, L
- transforme les colonnes G et H en date
- transforme les colonnes J à R (sauf L) en numérique

Code:
Sub MisAJour()
 With Worksheets("Sheet1")
 For i = 2 To .Range("A" & Rows.Count).End(xlUp).Row
 ' *** remplissage cellules vides colonnes B, C, L
    If .Cells(i, 2) = "" Then
        .Cells(i, 2) = .Cells(i - 1, 2)
        .Cells(i, 3) = .Cells(i - 1, 3)
        .Cells(i, 12) = .Cells(i - 1, 12)
    End If
 ' *** mise au "format" date colonnes G et H
    If .Cells(i, 7) <> "" Then
        .Cells(i, 7) = CDate(.Cells(i, 7))
        .Cells(i, 8) = CDate(.Cells(i, 8))
    End If
 ' *** mise au "format" numérique colonnes J à R sauf L
    For j = 10 To 18
        If j <> 12 Then
            If .Cells(i, j) <> "" Then
                .Cells(i, j).Replace What:=".", Replacement:=","
                .Cells(i, j) = CDbl(.Cells(i, j))
            End If
        End If
    Next
 Next
 End With
End Sub

S'il y avait beaucoup de lignes à traiter , une solution par tableau serait à envisager pour réduire le temps d'éxecution.

A+
 

Jam

XLDnaute Accro
Re : Cellules non vides suite export SAP

Salut babass78,

Pour ton point 1, tu peux utiliser la macro ci-dessous à mettre dans un module normal.
Elle fonctionne pas sélection de la plage (jaune dans ton fichier). Attention si elle peut traiter plusieurs colonnes, il faut qu'elles soient adjacentes. Elle fonctionne dans les 2 sens de haut en bas ou de bas en haut.
Le problème des cellules non vides avec SAP provient du fait que les cellules ont été "traitées" par SAP et qu'Excel considère alors qu'elles ne sont plus vides même si elles en ont l'air !

VB:
'********************************************************************
' Remplace les cellules vides par la valeur de la première
' cellule de taille 0 immédiatement au-dessus ou au-dessous.
' Cette procédure parcours la sélection de HAUT en BAS et inversement
' ATTENTION : Cette procédure utilise la sélection en cours
'********************************************************************
Sub FillLenZeroCellsWithValue()
Dim i As Long
Dim j As Long
Dim nbColonnes As Long
Dim Start As Long
Dim Finish As Long
Dim TopBot As Byte
Dim Direction As Integer
Dim MyArray, Valeur As Variant
Dim MyRange As Range
Dim Msg As String


On Error GoTo GestionErreur


With Application
    .ScreenUpdating = False
    .Calculation = xlCalculationManual
End With


Set MyRange = Selection
With MyRange
    nbColonnes = .Columns.Count
    MyArray = .Value
End With


Msg = "Pour effectuer un remplacement de " & vbCr
Msg = Msg & "HAUT en BAS cliquer sur le bouton OUI" & vbCr
Msg = Msg & "BAS en HAUT cliquer sur le bouton NON"
TopBot = MsgBox(Msg, vbYesNoCancel + vbQuestion, TITLE)
Select Case TopBot
    Case vbCancel
        End
    Case vbYes
        Start = 1: Finish = UBound(MyArray, 1): Direction = 1
    Case Else
        Start = UBound(MyArray, 1): Finish = 1: Direction = -1
End Select
For i = 1 To nbColonnes
    Valeur = ""
    For j = Start To Finish Step Direction
        Select Case Len(MyArray(j, i))
            Case 0
                MyArray(j, i) = Valeur
            Case Else
                Valeur = MyArray(j, i)
        End Select
    Next
Next
MyRange.Value = MyArray
GestionErreur:
With Application
    .ScreenUpdating = True
    .Calculation = xlCalculationAutomatic
End With
End Sub

Pour le point 2 il suffit juste de:
Sélectionner la colonne
puis menu Données > Convertir
suivant - suivant - sélectionner Date - puis valider.


Bon courage
 

babass78

XLDnaute Occasionnel
Re : Cellules non vides suite export SAP

Bonjour Paf,

La macro fonctionnait très bien et d'un coup, il me dit l'erreur suivante :
Erreur d'exécution 13 sur la ligne

.Cells(i, j) = CDbl(.Cells(i, j))

Je ne comprends pas pourquoi puisque l'extraction est toujours SAP
Merci de ton aide

Sub MisAJour()
With Worksheets("Sheet1")
For i = 2 To .Range("A" & Rows.Count).End(xlUp).Row
' *** remplissage cellules vides colonnes B, C, L
If .Cells(i, 2) = "" Then
.Cells(i, 2) = .Cells(i - 1, 2)
.Cells(i, 3) = .Cells(i - 1, 3)
.Cells(i, 12) = .Cells(i - 1, 12)
End If
' *** mise au "format" date colonnes G et H
If .Cells(i, 7) <> "" Then
.Cells(i, 7) = CDate(.Cells(i, 7))
.Cells(i, 8) = CDate(.Cells(i, 8))
End If
' *** mise au "format" numérique colonnes J à R sauf L
For j = 10 To 18
If j <> 12 Then
If .Cells(i, j) <> "" Then
.Cells(i, j).Replace What:=".", Replacement:=","
.Cells(i, j) = CDbl(.Cells(i, j))
End If
End If
Next
Next
End With
End Sub
 

babass78

XLDnaute Occasionnel
Re : Cellules non vides suite export SAP

Bonjour,

à tester une solution par macro qui
-remplie les cellules vides des colonnes B, C, L
- transforme les colonnes G et H en date
- transforme les colonnes J à R (sauf L) en numérique

Code:
Sub MisAJour()
 With Worksheets("Sheet1")
 For i = 2 To .Range("A" & Rows.Count).End(xlUp).Row
 ' *** remplissage cellules vides colonnes B, C, L
    If .Cells(i, 2) = "" Then
        .Cells(i, 2) = .Cells(i - 1, 2)
        .Cells(i, 3) = .Cells(i - 1, 3)
        .Cells(i, 12) = .Cells(i - 1, 12)
    End If
 ' *** mise au "format" date colonnes G et H
    If .Cells(i, 7) <> "" Then
        .Cells(i, 7) = CDate(.Cells(i, 7))
        .Cells(i, 8) = CDate(.Cells(i, 8))
    End If
 ' *** mise au "format" numérique colonnes J à R sauf L
    For j = 10 To 18
        If j <> 12 Then
            If .Cells(i, j) <> "" Then
                .Cells(i, j).Replace What:=".", Replacement:=","
                .Cells(i, j) = CDbl(.Cells(i, j))
            End If
        End If
    Next
 Next
 End With
End Sub

S'il y avait beaucoup de lignes à traiter , une solution par tableau serait à envisager pour réduire le temps d'éxecution.

A+

Bonjour Paf,

La macro fonctionnait très bien et d'un coup, il me dit l'erreur suivante :
Erreur d'exécution 13 sur la ligne

.Cells(i, j) = CDbl(.Cells(i, j))

Je ne comprends pas pourquoi puisque l'extraction est toujours SAP
Merci de ton aide

Sub MisAJour()
With Worksheets("Sheet1")
For i = 2 To .Range("A" & Rows.Count).End(xlUp).Row
' *** remplissage cellules vides colonnes B, C, L
If .Cells(i, 2) = "" Then
.Cells(i, 2) = .Cells(i - 1, 2)
.Cells(i, 3) = .Cells(i - 1, 3)
.Cells(i, 12) = .Cells(i - 1, 12)
End If
' *** mise au "format" date colonnes G et H
If .Cells(i, 7) <> "" Then
.Cells(i, 7) = CDate(.Cells(i, 7))
.Cells(i, 8) = CDate(.Cells(i, 8))
End If
' *** mise au "format" numérique colonnes J à R sauf L
For j = 10 To 18
If j <> 12 Then
If .Cells(i, j) <> "" Then
.Cells(i, j).Replace What:=".", Replacement:=","
.Cells(i, j) = CDbl(.Cells(i, j))
End If
End If
Next
Next
End With
End Sub
 

Jam

XLDnaute Accro
Re : Cellules non vides suite export SAP

Salut babass78,

Difficile de répondre à cette question en l'absence de plus d'info.
A priori je pencherai pour une erreur liée au fait que le programme essai de convertir une donnée de la cellule en double alors qu'il y a autre chose dans la cellule.
Pour mieux comprendre l'erreur utilise le mode pas à pas: mets un point d'arrêt sur la ligne qui précède (touche {F9} pour que le programme s'arrête à cet endroit et que tu puisses "regarder" le contenu des variables ou des cellules, avant l'arrivée de l'erreur, via la fenêtre de débogage par exemple ou par la fenêtre des variables locales (voir dans le menu Affichage).

Bon courage
 

Discussions similaires

Statistiques des forums

Discussions
312 239
Messages
2 086 508
Membres
103 237
dernier inscrit
smbt-excel