Ceci est une page optimisée pour les mobiles. Cliquez sur ce texte pour afficher la vraie page.

XL 2016 Remplacer cellules vides par zéro dans plage variable.

  • Initiateur de la discussion Initiateur de la discussion KTM
  • Date de début Date de début

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 !

KTM

XLDnaute Impliqué
Bonjour chers amis du forum,
Dans mon fichier joint je voudrais par macro exécuter les taches suivantes:
1- Remplacer les vides par 0 dans la plage jusqu'à la dernière colonne utilisée.
2-Convertir les données de la colonne B en colonnes.
J'ai élaboré ce qui suit mais quelque chose ne va pas. Prière me corriger.
Merci
VB:
Sub convert()
Application.ScreenUpdating = False
Dim dl, dercol As Long
Dim Rg As Range, Qui As String, Plage As String, pg As Range

With Sheets("Convert")
dl = .Range("B" & Rows.Count).End(xlUp).Row
Qui = "/"
Plage = "B5:B" & dl
Set Rg = Range(Plage).Find(Qui)
If Not Rg Is Nothing Then
On Error Resume Next
dercol = .Cells(1, .Cells.Columns.Count).End(xlToLeft).Column
Set pg = .Range("C5").Offset(dl, dercol)
     pg.SpecialCells(xlCellTypeBlanks).Value = 0
    .Columns("C:D").Insert Shift:=xlToRight, CopyOrigin:=xlFormatFromLeftOrAbove
    .Range("B5:B" & dl).TextToColumns Destination:=.Range("B5"), DataType:=xlDelimited, _
        TextQualifier:=xlDoubleQuote, ConsecutiveDelimiter:=False, Tab:=False, _
        Semicolon:=False, Comma:=False, Space:=False, Other:=True, OtherChar _
        :="/", FieldInfo:=Array(Array(1, 1), Array(2, 1), Array(3, 1)), _
        TrailingMinusNumbers:=True
End If
End With
Application.ScreenUpdating = True
End Sub
 

Pièces jointes

Bonjour,

Déjà, ta variable dc (dernière colonne) n'est pas bonne puisque tu n'as pas de valeur dans la vraie dernière colonne de ton tableau sur la ligne 5.

En suite, ta variable pg n'est pas bonne non plus puisque tu prends une seule cellule (C5) et que tu te décales, non pas du nombre de colonnes de ton tableau comme tu sembles le croire, mais d'un nombre de colonnes égal au numéro de la dernière colonne de ton tableau (en supposant que dc contienne vraiment le numéro de la dernière colonne de ton tableau).

Je pense qu'il faudrait que tu détermines la plage de ton tableau avec CurrentRegion, et que tu remplaces, ou combines, l'Offset avec un Resize.

Sinon, travaille avec un tableau structuré, ça simplifie la vie. 😉
 
Bonjour KTM, Marcel32, le forum,

Je ne vois pas l'intérêt de la question 1 mais bon :
VB:
Sub convert()
Dim ncol%, tablo, i&, x$, n%, maxi%
With Sheets("Convert").[B5].CurrentRegion
    ncol = .Columns.Count
    tablo = .Columns(1).Resize(, 2) 'matrice, plus rapide, au moins 2 éléments
    For i = 1 To UBound(tablo)
        x = CStr(tablo(i, 1))
        n = Len(x) - Len(Replace(x, "/", ""))
        If n > maxi Then maxi = n
    Next
    Application.ScreenUpdating = False
    Application.DisplayAlerts = False
    If maxi Then .Columns(2).Resize(, maxi).Insert xlToRight
    .Columns(1).TextToColumns .Cells(1), xlDelimited, Other:=True, OtherChar:="/" 'commande Convertir
    .Resize(, ncol + maxi).Replace "", 0, xlWhole 'à quoi ça sert ???
End With
End Sub
A+
 

Pièces jointes

- 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

Discussions similaires

Réponses
2
Affichages
371
  • Question Question
Microsoft 365 Code VBA
Réponses
7
Affichages
622
Réponses
2
Affichages
691
Réponses
6
Affichages
293
Réponses
5
Affichages
379
Les cookies sont requis pour utiliser ce site. Vous devez les accepter pour continuer à utiliser le site. En savoir plus…