Vous utilisez un navigateur obsolète. Il se peut que ce site ou d'autres sites Web ne s'affichent pas correctement. Vous devez le mettre à jour ou utiliser un navigateur alternatif.
Boostez vos compétences Excel avec notre communauté !
Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force.
Apprenez, échangez, progressez – et tout ça gratuitement !
👉 Inscrivez-vous maintenant !
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
Bonjour le fil 🙂,
Glisser une formule sur 100 000 lignes, vous êtes hards, mes très cher Victor et Jean-Claude 😛...
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
Re 🙂,
tu es "un peu farce" comme on dit chez nous 🙄...
Tu n'est plus dans ton exemple de départ 😡...
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
Tu parles d'affiner, mais c'est pas tes explications qui s'affinent... 🙄
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 😛...
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 🙄...
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 😛
Bon courage 😎
- Navigue sans publicité - Accède à Cléa, notre assistante IA experte Excel... et pas que... - Profite de fonctionnalités exclusives Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel. Je deviens Supporter XLD