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

Microsoft 365 FORMULE Excel VBA

kenny

XLDnaute Occasionnel
Bjr,

je voudrais appliquer cette formule en VBA qui me retourne les doublon en ouvrant une boite de dialogue et qui demande sur quelle colonne l'appliquer, cette formule s'applique à la cellule 2 de la colonne préciser.

j'ai une erreur de type :

Je n'arrive pas à solutionner.

Merci pour votre aide.
PS. : visiblement d'après le débogueur c'est cette partie du code qui pose problème :
Set rng = ActiveSheet.Range(colName & "2:" & colName & ActiveSheet.Cells(Rows.Count, colName).End(xlUp).Row)

Sub AddLeadingZeros()

' Demander à l'utilisateur sur quelle colonne appliquer la macro
Dim colName As String
colName = InputBox("Entrez le nom de la colonne :")

' Vérifier si le nom de colonne est valide
If colName = "" Then
MsgBox "Veuillez entrer un nom de colonne valide."
Exit Sub
End If

' Définir la plage de cellules
Dim rng As Range
Set rng = ActiveSheet.Range(colName & "2:" & colName & ActiveSheet.Cells(Rows.Count, colName).End(xlUp).Row)

' Parcourir chaque cellule de la plage
For Each cell In rng
' Vérifier si la cellule n'est pas vide et ne contient pas d'erreur
If Not IsError(cell.Value) And cell.Value <> "" Then
' Appliquer la formule avec la fonction REPT et NBCAR
cell.Value = WorksheetFunction.Rept("0", 9 - WorksheetFunction.Len(cell.Value)) & cell.Value
End If
Next cell

MsgBox "La macro a été appliquée avec succès à la colonne " & colName & "."

End Sub
 

Phil69970

XLDnaute Barbatruc
Bonjour @kenny

PS. : visiblement d'après le débogueur c'est cette partie du code qui pose problème :
Set rng = ActiveSheet.Range(colName & "2:" & colName & ActiveSheet.Cells(Rows.Count, colName).End(xlUp).Row)

Manifestement on a pas le même débogueur !!
Ton problème vient de ta formule qui est fausse
' Appliquer la formule avec la fonction REPT et NBCAR
cell.Value = WorksheetFunction.Rept("0", 9 - WorksheetFunction.Len(cell.Value)) & cell.Value
Alors quelle est ta formule que tu souhaites (écris là en formule sans essayer de la convertir en VBA)

De plus ton code ne contrôle rien du tout car si je tape par exemple dans la boite de dialogue "qsdfgqdrg" et bien tu l'acceptes et plantage 3 lignes plus loin !!!

@Phil69970
 

Phil69970

XLDnaute Barbatruc
Re

Je te propose plus simplement pour reprendre le code de @gbinforme

VB:
Sub AddLeadingZeros()
Dim MaZone As Range
Set MaZone = Range("A2:K" & UsedRange.Rows.Count) 'Lettre des colonnes à adapter éventuellement

MaZone.NumberFormat = "000000000"
Set MaZone = Nothing
End Sub

Plus besoin de demander à l'utilisateur une colonne toute la zone passe au format voulue et plus de contrôle à avoir.....

Merci de ta réponse

@Phil69970
 

kenny

XLDnaute Occasionnel
 

kenny

XLDnaute Occasionnel
Bonjour Phil,

J'ai dû mal m'exprimer, cette macro doit être générale, vu que les colonnes qui doivent contenir les chiffres avec 9 caractères sont mobiles
D'où ma tentative de demander la colonne sur laquelle appliquer cette macro.
J'ai essayer ta proposer la plage de A2 à K cela ne répond pas à ma demande. Il s'agit d'appliquer la macro sur une colonne précise qui contiendrait des chiffres à 6 ou 7 caractères..

Je te remercie d'avance
 

Phil69970

XLDnaute Barbatruc
Re

Je te propose cette version qui fonctionne quelque soit le nombre de chiffres
(Pour info chez moi un chiffre n'est pas une lettre)

sur une colonne précise qui contiendrait des chiffres à 6 ou 7 caractères..

VB:
Sub AddLeadingZeros()

' Demander à l'utilisateur sur quelle colonne appliquer la macro
Dim colName As String
colName = InputBox("Entrez le nom de la colonne :")

' Vérifier si le nom de colonne est valide
If colName = "" Then
    MsgBox "Veuillez entrer un nom de colonne valide."
    Exit Sub
End If

' Définir la plage de cellules
Dim Rng As Range
Set Rng = ActiveSheet.Range(colName & "2:" & colName & ActiveSheet.Cells(Rows.Count, colName).End(xlUp).Row)

Rng.NumberFormat = "000000000"

MsgBox "La macro a été appliquée avec succès à la colonne " & colName & "."

End Sub

Merci de ton retour

@Phil69970
 

gbinforme

XLDnaute Impliqué
D'où ma tentative de demander la colonne sur laquelle appliquer cette macro.
Il s'agit d'appliquer la macro sur une colonne précise qui contiendrait des chiffres à 6 ou 7 caractères..
Comme ceci il te suffit de faire un double clic sur une cellule de la colonne choisie
VB:
Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
    Columns(Target.Column).NumberFormat = "000000000"
End Sub
Cette macro est à mettre dans la feuille concernée
 

kenny

XLDnaute Occasionnel
Bonjour Phil, j'ai essayé ta macro, j'ai un bug sur la partie du code :
Set Rng = ActiveSheet.Range(colName & "2:" & colName & ActiveSheet.Cells(Rows.Count, colName).End(xlUp).Row)

Je joins un fichier test,

gbinforme idem cela ne fonctionne pas bizarre tout cela​

 

Pièces jointes

  • TestCar.xlsm
    98.9 KB · Affichages: 2

Phil69970

XLDnaute Barbatruc
Re

@kenny
Tu as mis aucune macro dans le fichier test que tu as fourni donc sans macro cela ne peut pas fonctionner !!!

J'ai mis un bouton et rajouter une dizaine de colonne (pour pouvoir choisir une colonne)
J'ai juste copié le code que j'ai fourni au post #9 pour lancer la macro et tu vas rire cela fonctionne sur mon PC comme sur tous les PC du monde et surement aussi sur mac mais vu que je n'ai pas de Mac j'ai pas pu faire d'essai.

@Phil69970
 

Pièces jointes

  • TestCar V1.xlsm
    434.6 KB · Affichages: 2

kenny

XLDnaute Occasionnel
Phil merci mais je comprends pas avec moi ca fonctionne pas
cela me retourne cette erreur.


2)

3)

c'est quoi cette incompatibilité de type qui me pourrie la vie ;o))
 

Discussions similaires

Réponses
21
Affichages
807
Réponses
6
Affichages
575
Les cookies sont requis pour utiliser ce site. Vous devez les accepter pour continuer à utiliser le site. En savoir plus…