Suppression selective

Bonsoir,

Je souhaites supprimer de façon sélective des caractères d' une cellules ( chaines alphanumérique).

Je m' explique, toujours dans la colonnes A, je souhaiterais supprimer :

  • Les 9 premiers caractères
  • Laisser 6 caractères suivants
  • Puis supprimer les 5 caractères suivants.

Ex :

CAdqsds123456azertya4654654erezrges

CAaze132131azeazeffg4654sdfsdfds

Qazea5646546556fghvn465462sfdsdfsd

Rfghfg12346879derytjhj11sfds23

Donnerai :

3456az4654654erezrges

31azea4654sdfsdfds

546556465462sfdsdfsd

46879dhj11sfds23

Merci de votre aide.

Bonsoir,

Une solution

Si vos données sont dans la colonne A

en B1 mettre :

=STXT($A1;10;6)&STXT($A1;21;NBCAR($A1)-20)

Formule à tirer vers le bas.

Bonsoir Fred,

Merci de votre réponse, par contre cela donnerai quoi en vba ?

euh, bah là pour le vba, je ne pourrai te dire, je suis tout novice et j'ai beaucoup de mal à m'y plonger.

Pour tenter quelque chose en vba il faudrait que tu mettes un exemple de la structure de ton fichier, ce serait un bon point de départ déjà.

Bonjour

Un truc très simple en partant de la formule de Fred35

Fonctionne sur les Excel français

Sub Formules()

  With Range("B1:B" & Range("A" & Rows.Count).End(xlUp).Row)
    .FormulaLocal = "=STXT($A1;10;6)&STXT($A1;21;NBCAR($A1)-20)"
    .Value = .Value   ' Supprime la formule
  End With
End Sub

Bonsoir Banzai,,

Toujours fidèle au poste à ce que je vois.

Merci pour ta réponse mais je ne peux l' utiliser car mon fichier sur lequel je cherche à appliquer cette commande est rempli de A1 à XXXX.... car il varie ( A1 à N 20000, ou A1 à CK15000....).

Raison pour laquelle je cherche une commande VBA tel que :

Supprime les 9 premier caracteres, puis laisse les 6 suivants et enfin supprime les 5 suivants.


Fred,

Merci pour votre aide, je continue ma recherche sur une commande vba

J'y pense jamais à remettre les formules en code VBA

BenBen

Dans le code de Banzai il y a un compteur

With Range("B1:B" & Range("A" & Rows.Count).End(xlUp).Row)

La formule sera donc appliquer autant de fois qu'il y a de ligne en A

Je mets un exemple de fichier avec les 3 premières colonnes pour illustration.

12classeur1.xls (19.50 Ko)

Et le résultat doit être où ?

Bonjour

@ Fred35

Ce n'est pas un compteur mais une zone qui commence en B1 et qui finit en colonne B au niveau de la dernière ligne de la colonne A

Mettre les formules en VBA : dans ce cas il faut utiliser FormulaLocal et ne fonctionne que sur les versions qui utilisent le même langage local

Regardes l'aide

Le résultat serait en colonne A1:A...

Ca donnerai : CAdqsds123456azertya4654654erezrges

par (après suppression) : 3456az4654654erezrges

Bah la ça dépasse largement mes compétences

@Banzai, merci pour ce recadrage, j'avais toujours considéré cette zone comme un compteur

Les miennes aussi d'où ma demande d' aide auprés des Pros

Bonjour

une formule en D1 et à tirer vers le bas

=SI(NBCAR(A1)>5;STXT($A1;10;6)&STXT($A1;21;NBCAR($A1)-20);A1)

Ensuite cette colonne un copier/collage spécial ---> Valeurs sur la colonne A

On efface la colonne D

En 20 secondes c'est fait

Bonjour Banzai,

Cela ne fonctionne pas du fait que ma colonne A est en format date.

Et si je fais un copier/collage spécial ---> Valeurs sur la colonne A, avant d' appliquer ta formule, il donne 0 comme résultat.

Bonjour

Pourquoi ?

BenBen a écrit :

un copier/collage spécial ---> Valeurs sur la colonne A, avant d' appliquer ta formule

Suis les opération comme indiqué plus haut

  • Formule
  • Copie/collage spécial valeurs
  • Effacement colonne

Je viens de le refaire et aucun souci

Banzai,

Je te dois des excuses car ta macro fonctionne mais elle affiche "#VALEUR! " sur toutes les lignes avec des dates (car ma colonne A est en format date) ".

Je vais essayer de "l'adapter " . Si tu arrives à résoudre mon, problème, je suis preneur.

Milles merci à toi et à Fred pour votre aide.

Bonjour

Mais n'utilises pas la macro

Elle n'est pas adaptée à cette configuration ni à ces données

Fais le manuellement

Vois le résultat que j'obtiens

Bonjour Banzai,

J essai ça demain.

Bonne nuit ou bonjour plutôt

Bonsoir Banzai, Fred

Banzai : j' ai finalement suivi tes conseils et ajouté une colonne puis ce code pour la formule :

For i = [A65000].End(xlUp).Row To 1 Step -1
If Left(Cells(i, 1), 9) = "Propriété" Then Cells(i, 2).FormulaR1C1 = "=IF(LEN(RC[-1])>5,MID(RC1,10,6)&MID(RC1,21,LEN(RC1)-20),RC[-1])"
Next i

Ensuite le cop-col valeur :

Columns("B:B").Select
Selection.Copy
Columns("B:B").Select
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
     :=False, Transpose:=False
ActiveSheet.Paste
Application.CutCopyMode = False

Et pour finir, je rajoute cette macro pour qu il recopie la valeur uniquement si la condition "Propriété" est respecté :

    For i = [A65000].End(xlUp).Row To 1 Step -1
    If Left(Cells(i, 1), 9) = "Propriété" Then Cells(i, 2).ActiveCell.FormulaR1C1 = "=+RC[1]"
    Next i
     

Pense tu qu'on puisse compiler ces 3 codes en un seul + rajouter la condition si il ne trouve pas "Propriété" en colonne A, il efface la valeur qui est colonne B

Merci de ton aide

Rechercher des sujets similaires à "suppression selective"