Substituer

urbanito1

XLDnaute Occasionnel
Bonjour à la communauté

j'ai un tableau de 25 colonnes et 100000 lignes
je voudrais insérer une nouvelle colonne et copier des données en modifiant certaines
il y a probablement mieux et moins long que ce que je fais
merci pour les avis

urbanito1
 

Pièces jointes

  • substituer.xlsx
    13.8 KB · Affichages: 63
Dernière édition:

JNP

XLDnaute Barbatruc
Re : Substituer

Bonjour le fil :),
Glisser une formule sur 100 000 lignes, vous êtes hards, mes très cher Victor et Jean-Claude :p...
Via un RegExp, à tester :
Code:
Sub Test()
Dim I As Integer
Application.ScreenUpdating = False
With CreateObject("vbscript.regexp")
    .Global = False
    .Pattern = "(\d+/\d\d)(1)(\d*-\d*)"
    For I = 2 To Range("X" & Rows.Count).End(xlUp).Row
        If .Test(Range("X" & I)) Then
            Range("S" & I) = .Replace(Range("X" & I), "$13$3")
        Else
            Range("S" & I) = Range("X" & I)
        End If
    Next I
End With
Application.ScreenUpdating = True
End Sub
Bonne suite :cool:
 

JNP

XLDnaute Barbatruc
Re : Substituer

Re :),
tu es "un peu farce" comme on dit chez nous :rolleyes:...
Tu n'est plus dans ton exemple de départ :mad:...
A tester
Code:
Sub Test()
Dim I As Integer
Application.ScreenUpdating = False
With CreateObject("vbscript.regexp")
    .Global = False
    .Pattern = "(\d+/\d\d)(1)(\d*-.*)"
    For I = 2 To Range("D" & Rows.Count).End(xlUp).Row
        If .Test(Range("D" & I)) Then
            Range("B" & I) = .Replace(Range("D" & I), "$13$3")
        Else
            Range("B" & I) = Range("D" & I)
        End If
    Next I
End With
Application.ScreenUpdating = True
End Sub
Bonne suite :cool:
 

urbanito1

XLDnaute Occasionnel
Re : Substituer

Merci JNP et excuse moi
grâce à toi je me suis plongé dans l'initiation macro

ce que j'ai fait:
alt f11
copier
exécuter macro
voila ce que ça donne....quand j'exécute la macro

je voudrais encore affiner si possible la colonne C

Tout code de la colonne A contenant

/11310- devient /11310-21
/11320- dans /11320-21
/11330- colonne /11330-21
/11340- C /11340-21
/11350- /11350-21
/11360- /11360-21
/11370- /11370-21

Te casse pas la tête s'il faut faire trop de recherches

cordialement merci
 

Pièces jointes

  • substitue suite.xlsm
    24 KB · Affichages: 51
  • substitue suite.xlsm
    24 KB · Affichages: 56
  • substitue suite.xlsm
    24 KB · Affichages: 58
Dernière édition:

R@chid

XLDnaute Barbatruc
Re : Substituer

Salut,
en C3 c'est pas en F3 :
HTML:
=SI((STXT(A3;TROUVE("/";A3)+1;3)="113")*(STXT(A3;TROUVE("/";A3)+5;1)="0");SUBSTITUE(A3;STXT(A3;TROUVE("-";A3)+1;2);"21");A3)
@ valider en matricielle par Ctrl+Maj+Entree
@ tirer vers le bas
@ + +

Edit : Bien vu au dessus
 

Pièces jointes

  • substitue suite.xlsm
    25.4 KB · Affichages: 44
  • substitue suite.xlsm
    25.4 KB · Affichages: 50
  • substitue suite.xlsm
    25.4 KB · Affichages: 53
Dernière édition:

JNP

XLDnaute Barbatruc
Re : Substituer

Re :),
je voudrais encore affiner si possible la colonne C

Tout code de la colonne A contenant

/11310- devient /11310-21
/11320- dans /11320-21
/11330- colonne /11330-21
/11340- C /11340-21
/11350- /11350-21
/11360- /11360-21
/11370- /11370-21
Tu parles d'affiner, mais c'est pas tes explications qui s'affinent... :rolleyes:
Stricto senso, si j'ai compris, tu souhaites que tout ce qui est "/111" puis "1 à 7" puis "0-" se transforme en "/113" en gardant le "1 à 7" puis "0-21" en supprimant ce qu'il y avait derrière :p...
Code:
Sub Test()
Dim I As Integer
Application.ScreenUpdating = False
With CreateObject("vbscript.regexp")
    .Global = False
    .Pattern = "(\d+/11)(1)([1-7]0-)(.*)"
    For I = 2 To Range("D" & Rows.Count).End(xlUp).Row
        If .Test(Range("D" & I)) Then
            Range("B" & I) = .Replace(Range("D" & I), "$13$321")
        Else
            Range("B" & I) = Range("D" & I)
        End If
    Next I
End With
Application.ScreenUpdating = True
End Sub
Il faut comprendre que j'utilise un motif pour d'abord tester si la référence est valide, puis la transformer ;)...
Le premier motif était :
Code:
"(\d+/\d\d)(1)(\d*-\d*)
soit "1 ou plus de chiffre" "/" "2 chiffres", le tout entouré de parenthèse que tu récupères au remplacement avec "$1"
"1" qui sera $2
"0 ou plusieurs chiffres" "-" et ""0 ou plusieurs chiffres" qui sera "$3"
Donc je remplace "$2" au passage par "3" ce qui donne
Code:
$13$3
Après, tu ajoutes des lettres, donc je modifie la fin du motif avec
Code:
"(\d+/\d\d)(1)(\d*-.*)
".*" c'est 0 ou plusieurs caractères :rolleyes:...
Donc le dernier motif
Code:
(\d+/11)(1)([1-7]0-)(.*)
accepte "1 ou plusieurs chiffres" puis "/11" ("$1")
Toujours "1" ("$2")
"1 à 7" puis "0-" ("$3")
"0 ou plusieurs caractères" ("$4")
Et donc, je remplace par
Code:
$13$321
Si tu as tout compris, tu va pouvoir continuer à affiner :p
Bon courage :cool:
 

Discussions similaires

Statistiques des forums

Discussions
311 721
Messages
2 081 928
Membres
101 842
dernier inscrit
seb0390