Macro - Remplacer un caractère + un nombre (variable)

Bonjour à tous,

Je recherche le moyen de simplifier ce bout de macro:

Sub Macro1()
' Macro1 Macro

    Columns("A:A").Select
    Selection.Replace What:=".1", Replacement:="", LookAt:=xlPart, _
        SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, _
        ReplaceFormat:=False
    Selection.Replace What:=".2", Replacement:="", LookAt:=xlPart, _
        SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, _
        ReplaceFormat:=False
    Selection.Replace What:=".3", Replacement:="", LookAt:=xlPart, _
        SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, _
        ReplaceFormat:=False
    Selection.Replace What:=".4", Replacement:="", LookAt:=xlPart, _
        SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, _
        ReplaceFormat:=False
End Sub

L'idée est de remplacer le caractère "." + un Nombre par rien "", j'ai essayer avec ce code

Sub Macro1()
' Macro1 Macro

Dim Nb As Byte
For Nb = 1 To 12
    Columns("A:A").Select
    Selection.Replace What:="Que faut-il mettre ici", Replacement:="", LookAt:=xlPart, _
        SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, _
        ReplaceFormat:=False

End Sub

mais je ne trouve pas ce qu'il faut mettre à la place de "Que faut-il mettre ici", quelqu'un aurait une idée svp ?

J'ai cherché sur le forum mais je ne trouve rien en tapant "remplacer", "plusieurs éléments", "remplacer variable" ...

Merci d'avance pour votre aide et bonne journée ^^

Bonjour

Nb sans " autour

et ne pas oublier le Next

Mais 11 et 12 ne servent à rien car déjà enlevés par 1 et 2

Bonjour

Nb sans " autour

et ne pas oublier le Next

Mais 11 et 12 ne servent à rien car déjà enlevés par 1 et 2

Bonjour Chris,

Merci pour votre réponse mais cela ne fonctionne pas, en mettant Nb sans " cela remplace tous les chiffres de 1,2,3,4... hors j'ai besoin de supprimer uniquement les chiffres qui se trouve après le 2ème "." ainsi que celui-ci.

Exemple:

P/1.002.1

P/1.002.2

P/1.002.3

P/1.002.4

Les 4 valeurs doivent devenir P/1.002

Bonjour

a tester

Sub RecheDel()
Del = Array(".1", ".2", ".3", ".4", ".5", ".6")
    For L = 2 To Cells(Rows.Count, 1).End(xlUp).Row
        MaVar = Range("A" & L).Value
            For Each A In Del
                MaVar = Replace(MaVar, A, "")
            Next A
        Range("A" & L).Value = MaVar
    Next
End Sub

A+

Maurice

Bonjour

a tester

Sub RecheDel()
Del = Array(".1", ".2", ".3", ".4", ".5", ".6")
    For L = 2 To Cells(Rows.Count, 1).End(xlUp).Row
        MaVar = Range("A" & L).Value
            For Each A In Del
                MaVar = Replace(MaVar, A, "")
            Next A
        Range("A" & L).Value = MaVar
    Next
End Sub

A+

Maurice

Bonjour Maurice,

Merci pour ce code, en effet cela fonctionne, pouvez-vous expliquer pas-à-pas votre code [j'aimerai ne pas juste faire un simple copier/coller et basta ... mais bien comprendre le code (que j'ai un peu compris)] Merci pour votre explication.

Par contre ici le code est bon à condition qu'on est que quelques nombres .1 / .2 / .3 ... Dans mon message de base je n'ai mis que 4 nombres parce que ceci est répétitif, le problème est que ces nombres vont de 1 jusqu'à 128 et cela peut évoluer dans le temps, du coup il faudrait à chaque fois mettre à jour le code...

Auriez-vous une autre méthode vis-à-vis des nombres ? Ou une modification pour intégrer une série de nombre allant de 1 à 500 ou plus ...

Mais déjà un grand merci pour ce bout de code ^^

Bonjour à tous

Oups j'avais zappé le point

Bonjour

si le 2eme point se trouve toujours en 8eme position

marco plus simple

Sub RecherRef()
    For L = 2 To Cells(Rows.Count, 1).End(xlUp).Row
        Range("A" & L).Value = Left(Range("A" & L).Value, 7)
    Next
End Sub

A+

Maurice

Bonjour à tous

Dans le cas contraire

Sub RecheDel()
Del = Array(".1", ".2", ".3", ".4", ".5", ".6", ".7", ".8", ".9")
    For L = 2 To Cells(Rows.Count, 1).End(xlUp).Row
        MaVar = Range("A" & L).Value
            For Each A In Del
                If InStr(MaVar, A) > 0 Then
                    MaVar2 = Mid(MaVar, InStr(MaVar, A), 10)
                    MaVar = Replace(MaVar, MaVar2, "")
                    Exit For
                End If
            Next A
        Range("A" & L).Value = MaVar
    Next
End Sub

Bonjour

on peux jouer

a voir

Sub cherchePoint()
    For Lg = 2 To Cells(Rows.Count, 1).End(xlUp).Row
        Mot = Range("A" & Lg)
        L = Len(Mot)
        For I = L To 1 Step -1
            If Asc(Mid(Mot, I, 1)) = 46 Then
                Range("A" & Lg).Value = Left(Range("A" & Lg).Value, I - 1)
                Exit For
            End If
        Next
    Next
End Sub

A+

Maurice

Re bonjour à tous,

Bonjour à tous

Dans le cas contraire

Sub RecheDel()
Del = Array(".1", ".2", ".3", ".4", ".5", ".6", ".7", ".8", ".9")
    For L = 2 To Cells(Rows.Count, 1).End(xlUp).Row
        MaVar = Range("A" & L).Value
            For Each A In Del
                If InStr(MaVar, A) > 0 Then
                    MaVar2 = Mid(MaVar, InStr(MaVar, A), 10)
                    MaVar = Replace(MaVar, MaVar2, "")
                    Exit For
                End If
            Next A
        Range("A" & L).Value = MaVar
    Next
End Sub

Chris malheureusement ton code ne marche pas.

Bonjour

on peux jouer

a voir

Sub cherchePoint()
    For Lg = 2 To Cells(Rows.Count, 1).End(xlUp).Row
        Mot = Range("A" & Lg)
        L = Len(Mot)
        For I = L To 1 Step -1
            If Asc(Mid(Mot, I, 1)) = 46 Then
                Range("A" & Lg).Value = Left(Range("A" & Lg).Value, I - 1)
                Exit For
            End If
        Next
    Next
End Sub

A+

Maurice

Merci Maurice mais ce code marche mais lorsqu'on a par exemple "P/12.100" on va avoir un problème ...

En pièce jointe un exemple de ce que j'ai (colonne A), le résultat attendu avec les valeurs qui sont mise à jour avec la Macro en rouge (colonne D) et un contrôle si c'est bon (colonne E), un modèle (colonne I) pour recoller la base en colonne A après le test de la Macro.

Est-ce qu'on peut pas gérer cela avec la base que j'ai fait ? J'ai la possibilité de remplacer le "." par autre chose si besoin, n'hésitez pas à me proposer d'autres solutions ... je suis preneur de toutes explications/solutions ...

Merci à vous !

13test.xlsm (22.29 Ko)

Bonjour

j'espère que tu a mis tout les cas

Sub cherchePoint()
ValACompter = "."
    For Lg = 1 To Cells(Rows.Count, 1).End(xlUp).Row
        Mot = Range("A" & Lg)
            MaVal = Mot
            MonRes = Split(MaVal, ValACompter)
            If UBound(MonRes) = 1 Then Mot = MaVal & "."
        L = Len(Mot)
        For I = L To 1 Step -1
            If Asc(Mid(Mot, I, 1)) = 46 Then
                Range("B" & Lg).Value = Left(Range("A" & Lg).Value, I - 1)
                Exit For
            End If
        Next
    Next
End Sub

A+

Maurice

bonsoir,

une autre proposition

Sub aargh()
    delim = "."
    colres = "B" 'colonne résultat
    For i = 2 To Cells(Rows.Count, 1).End(xlUp).Row
        s = Cells(i, 1)
        k = 0
        For j = 1 To Len(s)
            If Mid(s, j, 1) = delim Then
                k = k + 1
                If k = 2 Then s = Left(s, j - 1): Exit For
            End If
        Next j
        Cells(i, colres) = s
    Next i
End Sub

Bonjour,

Merci pour votre aide.

A+

Bonjour à tous,

Je ré-ouvre le sujet car je dois réaliser une modification suite à un rajout d'un caractère et d'un nouveau besoin.

Dans le fichier joint, colonne A ce que j'ai à la base, colonne C ce que j'aimerais avoir après activation de la Macro en colonne A.

En faite, je cherche à faire une macro avec plusieurs condition, j'ai commencer avec ce code:

Dim Nb_LigneB As Long
Nb_LigneB = Range("B65536").End(xlUp).Row

Dim Plage_donnee As Long
    For Plage_donnee = 2 To Nb_LigneB
        If Cells(Plage_donnee, 3).Value Like "*,*" Then
            Cells(Plage_donnee, 9).FormulaR1C1 = "Ok"
        End If
    Next Plage_donnee
End Sub

Avec ce code j'arrive à identifier les cellules avec une virgule, et pour le moment je met "OK" dans la 9ème colonne.

Je cherche à remplacer en vain:

Cells(Plage_donnee, 9).FormulaR1C1 = "Ok"

Par une formule du style:

   Range("C4").AutoFill Destination:=Range("C4:C5"), Type:=xlFillDefault

Au final j'aimerais plusieurs conditions:

  • Si la cellule contient "000" ou "129" je ne fais rien
  • Si la cellule contient un point je copie la cellule précédente
  • Si la cellule contient une virgule j'étire la cellule du dessus d'une case

J'ai aussi essayer avec For ... each, mais le problème reste le même, je n'arrive pas à lui dire de sélectionner la cellule précédente et ...

Voilà j'espère que ma demande est claire ... désolé si c'est pas le cas.

9test-pos.xlsm (10.76 Ko)

Bonjour,

une proposition

Sub aargh()
    oa = Split("p/00.000", ".")
    With Sheets("feuil1")
        dl = .Cells(Rows.Count, 1).End(xlUp).Row
        For i = 2 To dl
            t = .Cells(i, 1)
            If i > 2 Then t1 = .Cells(i - 1, 3)
            If InStr(t, "000") > 0 Or InStr(t, "129") Then
                .Cells(i, 3) = t
            Else
                a = Split(t, ".")
                oa = Split(t1, ".")
                If UBound(a) = 1 Then
                    If a(0) = oa(0) Then a(1) = oa(1) + 1 Else a(1) = 0
                Else
                    If a(0) = oa(0) Then a(1) = oa(1) Else a(1) = 0
                End If
                .Cells(i, 3) = a(0) & "." & Format(a(1), "000")
            End If
        Next i
    End With
End Sub
10test-pos.xlsm (18.27 Ko)

Bonjour,

Merci pour ton code h2so4, j'ai l'option Explicit du coup que faut-il déclarer comme variable ?

Peux-tu expliquer ton code ?

Merci

Faut-il déclarer les variables comme ceci:

Dim oa() As String, a As String
Dim i As Integer, t As Integer, t1 As Integer

bonjour,

voici le code adapté et commenté

Option Explicit
Sub aargh()
Dim oa As Variant, a As Variant ' variable tableau qui contiendra une découpe de la base en utilisant le point comme séparateur, oa valeur ligne précédente, a valeur ligne actuelle
Dim t As String, t1 As String 't et t1 contiennent la valeur de la base pour la ligne actuelle et la ligne précédente
Dim dl As Long, i As Long 'dl dernière ligne, i pointeur de ligne en cours/ligne actuelle

    t1 = "p/00.000" 'première valeur de t1

    With Sheets("feuil1") 'selection obglet
        dl = .Cells(Rows.Count, 1).End(xlUp).Row 'dernière ligne
        For i = 2 To dl 'on parcourt les lignes
            t = .Cells(i, 1) 't =base ligne actuelle
            If i > 2 Then t1 = .Cells(i - 1, 3) ' t1=ligne précédente, si elle existe
            If InStr(t, "000") > 0 Or InStr(t, "129") Then 'base contient 000 ou 129 ?
                .Cells(i, 3) = t 'nouvelle base = base de la ligne actuelle
            Else
                a = Split(t, ".") 'découpe de la base actuelle
                oa = Split(t1, ".") 'découpe de la base précédente
                If UBound(a) = 1 Then ' si 2 éléments on a trouvé un seul point
                    If a(0) = oa(0) Then a(1) = oa(1) + 1 Else a(1) = 0 ' si premier élément de la base actuelle = premier élement de la base précédente on ajoute 1 à la séquence sinon séquence=0
                Else
                    If a(0) = oa(0) Then a(1) = oa(1) Else a(1) = 0 ' on a trouvé plus d'un point, si le premier élément de la base actuelle = premier élément de la base précédente on copie la séquence actuelle=séquence précédente sinon séquence=0
                End If
                .Cells(i, 3) = a(0) & "." & Format(a(1), "000") 'on met la nouvelle base actuelle en colonne 3
            End If
        Next i
    End With
End Sub
9test-pos.xlsm (19.46 Ko)

Bonjour à tous,

h2so4, j'espère que tu vas bien car j'ai besoin de toi encore une fois ^^

Peux-tu modifier ta macro en la simplifiant un peu ? En faite avec le temps je me rend compte que j'aurais besoin de la simplifier car je n'utilise pas à 100% l'une des 2 fonctions que tu m'as créer, celle-ci "Si la cellule contient un point je copie la cellule précédente", en faite si la cellule contient un "." après la base qui est "p/00.000" je la laisse tel quel et je ne fait rien (mais il faut garder l'incrémentation si besoin).

J'ai bien essayé de la faire moi-même mais je ne trouve pas comment y arriver ... Un vrai noob !

Je t'ai remis ce que j'aimerais dans le fichier joint

Merci pour ton aide !

5maj.xlsm (19.07 Ko)

Bonjour,

macro adaptée.

9maj.xlsm (19.18 Ko)
Rechercher des sujets similaires à "macro remplacer caractere nombre variable"