Module Excel permettant d’ajouter une virgule

Bonjour à tous.

Je suis débutant en VBA et j’aimerais faire un module Excel permettant d’ajouter une virgule à la fin de toutes les cases remplies de la deuxième colonne de la feuille active. J’ai écrit le code suivant :

Sub adkomma()

Dim zz As Long

Dim Text As String

zz = 2

Text = Cells(zz, 2)

Do Until Text <> 0

Text = Cells(zz, 2) & ","

zz = zz + 1

Text = Cells(zz, 2)

Loop

End Sub

J’ais une erreur de compilation à la ligne « Text = Cells(zz, 2) »

Bonjour FMad,

Quelle est l'erreur retournée ?

De plus à aucun moment tu ne changes la valeur de la cellule.

Change ça :

Text = Cells(zz, 2) & ","

zz = zz + 1

Text = Cells(zz, 2)

par ça :

Text = Cells(zz, 2) & ","

zz = zz + 1

Cells(zz, 2) = Text

Sinon, un autre code qui fait ce que tu souhaites :

Sub adkomma2()
    Dim cel As Range
    For Each cel In Range("b1:b" & Range("b" & Rows.Count).End(xlUp).Row)
        If cel <> "" Then cel = cel & ","
    Next cel
End Sub

Bonjour, merci beaucoup pour le coup de main. J’avais oublié qu’on pouvait déclarer des variables Range.

J’ai une erreur de compilation sur mon deuxième programme à la ligne « cc = WorksheetFunction.Len(Branchen) ». Erreur 438 « méthode mon trouvée ».

J’ai une feuille Excel avec en première colonne des noms d’entreprises et en deuxième des secteurs d’activités séparés par des virgules. Et je voudrais obtenir une feuille a deux colonnes comme ci-dessous:

Nomd’entreprise1 1° secteur d’activité

Nomd’entreprise1 2° secteur d’activité

Nomd’entreprise2 1° secteur d’activité

Ce qu’est censé faire ce programme

Sub Branchenextractor()

Dim Unternehmen As Range

Dim Branchen As Range

Dim Branche As Range

Dim virgule As String * 1

Dim aa As Byte

Dim bb As Byte

Dim zz As Long

Dim cc As Byte

virgule = ","

ll = 2

aa = 0

bb = 0

zz = 2

Do Until Cells(zz, 2) = "0"

Cells(zz, 2).Activate

Set Unternehmen = Cells(zz, 1)

Set Branchen = Cells(zz, 2)

cc = WorksheetFunction.Len(Branchen)

Do Until cc = aa

bb = WorksheetFunction.Search(virgule, Branchen, aa)

Set Branche = WorksheetFunction.Mid(Branchen, aa, bb - aa - 1)

Selection.Insert Shift:=xlDown

zz = zz + 1

Cells(zz, 1) = Unternehmen

Cells(zz, 2) = Branchen

Cells(zz - 1, 2) = Branche

aa = bb

Loop

Loop

End Sub

Essaie comme ça plutôt :

cc = Len(Branchen)

La fonction permettant de compter un nombre de caractères existe déjà en VBA.

Merci encor. Je n’ais plus qu’un petit problème à la ligne « Cells(zz - 1, 2) = Branche ». Erreur 1004, Erreur de définition d’accès ou d’objet.

D’après la fenêtre des variables locales, la valeur de Branche à ce moment là est Nothing. Je pense donc que le problème viens de plus haut quand j’essai de donner une variable à branche :

« Branche = WorksheetFunction.Mid(Branchen, aa, bb - aa - 1) »

Option Explicit

Sub Branchenextractor()

Dim Unternehmen As Range

Dim Branchen As Range

Dim Branche As Range

Dim virgule As String * 1

Dim aa As Byte

Dim bb As Double

Dim zz As Long

Dim cc As Byte

virgule = ","

aa = 0

bb = 0

zz = 2

Do Until Cells(zz, 2) = "0"

Cells(zz, 2).Activate

Set Unternehmen = Cells(zz, 1)

Set Branchen = Cells(zz, 2)

cc = Len(Branchen)

Do Until cc = aa

bb = WorksheetFunction.Search(virgule, Branchen, aa)

Branche = WorksheetFunction.Mid(Branchen, aa, bb - aa - 1)

Selection.Insert Shift:=xlDown

zz = zz + 1

Cells(zz, 1) = Unternehmen

Cells(zz, 2) = Branchen

Cells(zz - 1, 2) = Branche

aa = bb

Loop

Loop

End Sub

Mid est une fonction VBA donc enlève le WorksheetFunction.

Est-ce que Search est aussi une fonction VBA?

C'est une fonction Excel.

Pour le savoir, lorsque tu tapes Worksheetfunction.s tu devrais avoir une fenêtre similaire à celle en-dessous. On voit que Search existe en tant que fonction Excel.

menu

Si tu fais la même chose pour Mid ou Len, la fonction ne s'affiche pas.

Merci toujours.

J’ai réussi à compiler le programme, mais j’ai un Bugue étrange à l’exécution. Quand une entreprise est présent sur 3 secteurs comme si dessous :

Entreprise1, Secteur1,secteur2,secteur3

J’obtiens ce résultat :

Entreprise1 Secteur1

Entreprise1 secteur2,secteur3

Entreprise1 secteur3

J’ai utilisé la fonction MskBox pour afficher les valeurs « dd » et « ff » avant d’appliquer la fonction Mid. Et les valeurs sont correctes Mid devrais sortir « secteur2 » à la 3° ligne. Est-ce que vous savez d’où peux venir le problème ?

Dim virgule As String * 1

Dim aa As Long

Dim bb As Long

Dim zz As Long

Dim cc As Byte

Dim dd As Long

Dim ee As Long

virgule = ","

aa = 0

bb = 0

zz = 2

Call adkomma2

‘Sous-routine ajoutant une virgule à la fin de chaque case.

Do Until Cells(zz, 2) = 0

Branchen = Cells(zz, 2)

cc = Len(Branchen)

Do Until cc = aa

bb = WorksheetFunction.Search(virgule, Branchen, aa + 1)

dd = aa + 1

ee = bb - 1

Branche = Mid(Branchen, dd, ee)

Cells(zz, 2).Activate

Rows(zz).Select

Selection.Insert Shift:=xlDown

zz = zz + 1

Cells(zz, 2) = Branchen

Cells(zz - 1, 2) = Branche

Branchen = Cells(zz, 1)

Cells(zz - 1, 1) = Branchen

Branchen = Cells(zz, 2)

aa = bb

Loop

aa = 0

bb = 0

Rows(zz).Select

Selection.Delete Shift:=xlUp

Loop

End Sub

Bonjour FMad,

J'avais zappé ton message. A ce stade, il faudrait que tu joignes ton fichier pour faciliter la résolution du problème.

Rechercher des sujets similaires à "module permettant ajouter virgule"