Automatiser la suppression de caractères dans uns colonne

Bonjour le forum,

Je voudrais savoir si quelqu’un peut me trouver une solution pour automatiser le travail que je fais manuellement avec la formule « GAUCHE » et qui consiste à ne laisser que les trois premières lettres des noms qui se trouvent dans la colonne L puis de sauvegarder le fichier sous un autre nom de façon à ce que mon fichier d’origine soit toujours intact.

Merci.

Bonjour,

Une proposition à étudier.

La copie du classeur s'effectue dans le même dossier.

ALT F11, voir module JeanEric et la procédure DEMO().

Cdlt.

Salut Jean-Eric,

Merci pour ta petite macro qui me donne le travail demandé. Il me reste plus qu'à l'intégrer dans mon fichier principale avec une petite macro complémentaire pour une sauvegarde sous un nom différent dès que ta macro aura fait son travail pour pouvoir avoir toujours mon fichier original avec les noms en entier.

Merci encore pour le travail . Je mets ma question en résolue.

Oups j'enlève la question en résolue car lorsque j'ai intégré ta macro dans mon fichier principal j'ai le message d'erreur ci-dessous :

erreur

As-tu une solution à ce petit problème car je ne vois pas ce qui bug ?

Merci.

Bonjour,

Tu as semble-t-il oublier de copier la fonction personnalisée dans ton classeur..

Cdlt.

Public Function fnFileName(sFile As String) As String
'Nom fichier sans extension
    fnFileName = Mid(sFile, 1, InStrRev(sFile, ".") - 1)
End Function

Oui tu as raison. Maintenant c'est OK. Merci.

Bonsoir Jean-Eric

Petit additif à ma question de départ. Si je souhaite étendre la macro en plus de la colonne "12" (NOM) à la colonne "13" (PRENOM) comment je peux adapter ta macro ?

J'ai ciblé la ligne de commande qui s'adapte à la colonne des "NOMS" c'est :

If Not IsEmpty(.Cells(i, 12)) Then .Cells(i, 12).Value = Left(.Cells(i, 12), 3)

mais si je veux ajouter la colonne des prénoms je fais comment ? j'ai voulu faire

If Not IsEmpty(.Cells(i, 12)) Then

.Cells(i, 12).Value = Left(.Cells(i, 12), 3)

.Cells(i, 12).Value = Left(.Cells(i, 12), 3)

mais ça ne marche pas.

Merci.

Bonjour,

A =1, E = 5, L =12 donc M = 13

Alors :

If Not IsEmpty(.Cells(i, 12)) Then 
    .Cells(i, 12).Value = Left(.Cells(i, 12), 3)
    .Cells(i, 13).Value = Left(.Cells(i, 13), 3)
End If

Et si tu voulais les résultats en majuscule :

If Not IsEmpty(.Cells(i, 12)) Then 
    .Cells(i, 12).Value =UCase(Left(.Cells(i, 12), 3))
    .Cells(i, 13).Value =UCase(Left(.Cells(i, 13), 3))
End If

Bon dimanche.

Cdlt.

Bonjour Jean-Eric

J'ai intégré la ligne de commande supplémentaire dans le module mais maintenant j'ai un message d'erreur de "NEXT" sans "FOR" pourtant j'ai bien le "for" correspondant au "next". Incompréhensible ????. Je mets une copie des lignes de commandes avec le message d'erreur ci-dessous :

next sans for

Est-ce que tu peux dire où est l'erreur ? Merci.

Bonjour,

A priori, Il manque un End If avant le Next i...

Cdlt.

C'est tout bête l'oubli d'un "END IF" et maintenant c'est OK. Merci.

Juste pour info, ta macro insérée dans mon fichier principal qui comporte actuellement 4600 lignes met plus de trois minutes pour s'exécuter. Est-ce que tu connais une manière pour que le travail soit fait plus rapidement ? Si oui ça serait super, si non j'attendrai

Sinon merci encore pour ton aide.

Bonjour,

Essaie ainsi :

Public Sub DEMO()
Dim wb As Workbook
Dim ws As Worksheet
Dim sPath As String, sFilename As String
Dim tbl As Variant
Dim lRow As Byte
Dim lastRow As Long, i As Long

    Application.ScreenUpdating = False

    Set wb = ThisWorkbook
    Set ws = wb.Worksheets("Liste AF à compléter par DATES")
    lRow = 2

    sPath = wb.Path & Application.PathSeparator
    sFilename = "Copie " & fnFileName(wb.Name) & " " & Format(Date, "yyyy-mm-dd") & ".xlsm"

    wb.SaveAs FileName:=sPath & sFilename, FileFormat:=52

    With ws
        lastRow = .Cells(.Rows.Count, 1).End(xlUp).Row
        tbl = .Cells(3, 12).Resize(lastRow - lRow, 2).Value
        For i = 1 To lastRow - lRow
            If tbl(i, 1) <> "" Then
                tbl(i, 1) = Left(tbl(i, 1), 3)
                tbl(i, 2) = Left(tbl(i, 2), 3)
            End If
        Next i
        .Cells(3, 12).Resize(lastRow - lRow, 2).Value = tbl
    End With

    wb.Save

End Sub

Ouah !!!! impressionnant..... de plus trois minutes je passe à moins de 15 secondes. Quel est le secret ?

Merci.

Bonjour

Je reviens sur cette question que j'ai mis en résolue pour savoir si on peut ajouter une action complémentaire à l’exécution de la macro « MODULE » qui fonction très bien. C’est : est-ce qu’il serait possible lorsque je lance la macro « DEMO » qui laisse juste les trois caractères des noms et prénoms qu’elle fasse ou éventuellement qu’une autre macro le fasse la suppression de toutes les formations qui ont une date de fin depuis plus d’un mois en prenant la date du jour de l’exécution de la macro comme point de départ.

Exemple si je lance la macro aujourd’hui le 13/12/2017, il faudrait que les lignes des formations qui sont finies depuis le 12/11/2017 disparaissent. J’ai mis un onglet résultat avec les lignes en hachurées qui aurez dû disparaitre dans le fichier joint.

Merci.

Bonjour,

Je laisse tomber ma question sur la question complémentaire et j'y reviendrai dans un notre sujet plus tard. Pour l'instant je fais la manip manuellement.

Rechercher des sujets similaires à "automatiser suppression caracteres uns colonne"