Boostez vos compétences Excel avec notre communauté !
Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force.
Apprenez, échangez, progressez – et tout ça gratuitement !
👉 Inscrivez-vous maintenant !
à 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.
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.
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
la macro fonctionnait très bien , je l'utilisais souvent et là elle me dit cette erreur
si quelqu'un a la solution pour la ligne
.Cells(i, j) = CDbl(.Cells(i, j))
à 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.
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
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).
- Navigue sans publicité - Accède à Cléa, notre assistante IA experte Excel... et pas que... - Profite de fonctionnalités exclusives Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel. Je deviens Supporter XLD