Selection d'une fraction de cellule, formule ou VBA ?

YannLC

XLDnaute Junior
Hi All,

j ai des cellules qui contiennent ce type d import externe :

[5/56] ou [15/42] je vous mets ces deux exemples car le soucis vient de la je ne choisi pas si dans ces differents cellules il y aura le premier type ou le second type d'import et je veux donc extraire ce qui est compris entre [ et /

dans mes deux exemples cela sera 5 et 15.

Je sais qui il y a une fonction VBA qui permet d extraire un fraction de chaine de character en fonction de la position mais la la position de debut reste la meme (position 2) mais la position de fin change : ou position 2 ou position 3 !!! il faudrait indiquer : extraire les charactere entre [ et / .... je l ai fait avec une macro utilisant du les fonction text to column !!! mais c est un peu lourd :

Sub Macro1()
'
' Macro1 Macro
' Macro recorded 09/08/2006 by YLC
'
' Keyboard Shortcut: Ctrl+a
'
Sheets("Output MTS").Select
Columns("E:E").Select
Selection.Copy
Columns("I:I").Select
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
Application.CutCopyMode = False
Selection.TextToColumns Destination:=Range("I1"), DataType:=xlDelimited, _
TextQualifier:=xlDoubleQuote, ConsecutiveDelimiter:=False, Tab:=False, _
Semicolon:=False, Comma:=False, Space:=False, Other:=True, OtherChar _
:="[", FieldInfo:=Array(1, 1), TrailingMinusNumbers:=True
Columns("J:J").Select
Selection.TextToColumns Destination:=Range("J1"), DataType:=xlDelimited, _
TextQualifier:=xlDoubleQuote, ConsecutiveDelimiter:=False, Tab:=False, _
Semicolon:=False, Comma:=False, Space:=False, Other:=True, OtherChar _
:="/", FieldInfo:=Array(1, 1), TrailingMinusNumbers:=True
Selection.Copy
Range("J3:J35").Select
Application.CutCopyMode = False
Selection.Copy
Range("D3").Select
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
End Sub

le probleme est que lorsque je relance cela me demande si je veux remplacer les valeurs que j ai traité juste avant !!! ( un petit supress de la zone traité doit etre la solution je vais rajouter ca !!!

Mais est ce que l on peut optimiser ce code ?

voir fichier :




A Plus
 

Pièces jointes

  • XLD Weekly.xls
    41.5 KB · Affichages: 104
  • XLD Weekly.xls
    41.5 KB · Affichages: 106
  • XLD Weekly.xls
    41.5 KB · Affichages: 103

porcinet82

XLDnaute Barbatruc
Re : Selection d'une fraction de cellule, formule ou VBA ?

Salut Yann,

En supposant que tu veuilles travaillé sur la feuille Input et que tu veuilles le résultat en colonne G, tu peux utiliser la macro suivante :
PHP:
Sub test()
Dim i%
For i = 4 To Range("E65536").End(xlUp).Row
    If Not IsEmpty(Cells(i, 5).Value) Then Cells(i, 7).Value = Mid(Cells(i, 5).Value, 2, InStr(2, Cells(i, 5).Value, "/") - 2)
Next i
End Sub

En faite la fonctione a utiliser elle la fonction INstr, donc je te laisse l'adapter au reste de ta macro.

@+
 
Dernière édition:

myDearFriend!

XLDnaute Barbatruc
Re : Selection d'une fraction de cellule, formule ou VBA ?

Bonjour YannLC, porcinet82, jmps,

Sinon, par VBA, une autre façon de procéder :
Code:
[SIZE=2]Sub Traitement()
[COLOR=navy]Dim [/COLOR]Plage[COLOR=navy] As [/COLOR]Range, Cel[COLOR=navy] As [/COLOR]Range
      [COLOR=navy]Set[/COLOR] Plage = Sheets("[COLOR=navy]Output[/COLOR] MTS").Columns(5).SpecialCells(xlCell[COLOR=navy]Type[/COLOR]Formulas, 23)
      [COLOR=navy]For Each[/COLOR] Cel[COLOR=navy] In [/COLOR]Plage
            Cel.Offset(0, -1).Value = Val(Replace(Cel.Text, "[", ""))
      [COLOR=navy]Next[/COLOR] Cel
[COLOR=navy]End[/COLOR] Sub[/SIZE]
Cordialement,
 

YannLC

XLDnaute Junior
Re : Selection d'une fraction de cellule, formule ou VBA ?

My dear friends,

Mydearfriens quel est l'argument qui limite en longueur l'application de la macro ? j ai tirée sur plus de longueur d'autre [xx/y] et cela ne fonctionne pas, alors qu avec celle de porcinet je comprend pourquoi cela fonctionne ( range("E65536") )

D ailleur que signifie :

dim i%
for i = 4

for i = 4 to range ("E65536"). end(xlup).row ............ dans cette partie il n y a que le "E" de ("E65536") qui determine quelle colonne la mcro traite ?

Merci a tous
 

myDearFriend!

XLDnaute Barbatruc
Re : Selection d'une fraction de cellule, formule ou VBA ?

Re,

Code:
[SIZE=2]Set Plage = Sheets("[COLOR=navy]Output[/COLOR] MTS").Columns(5).SpecialCells(xlCell[COLOR=navy]Type[/COLOR]Formulas, 23)[/SIZE]
Dans cette instruction, "Plage" représente l'ensemble des cellules de la colonne E (la cinquième) contenant une formule de calcul. Autrement dit, dans l'exemple que tu joignais, "Plage" sera égale aux cellules "E6, E12, E15, E24, E27, E30" de la feuille "Output MTS", pas une de moins, pas une de plus... Ce qui permet donc de ne traiter que les lignes utiles...
Si tu "tires" d'autres [xx/y] (comme tu dis), si ces dernières sont des formules alors elles seront incluses dans "Plage", elle ne le seront donc pas dans le cas contraire.

Concernant le méthode utilisée par Porcinet :
"range ("E65536"). end(xlup).row" te donne le numéro de ligne de la dernière cellule remplie de la colonne E (pour info, c'est comme si tu te plaçais en cellule "E65536" tout en bas de la feuille et que tu faisais : CTRL + Flèche Haut).
"for i = 4 to range ("E65536"). end(xlup).row" te permet donc de boucler de la ligne 4 à la dernière ligne remplie de la colonne E.

Quant au % dans "dim i%" cela signifie qu'il déclare sa variable en tant qu'Integer et là, je lui laisse le soin de t'expliquer pourquoi il utilise cette manière de déclarer qui, on l'a déjà dit, n'est pas la meilleure manière d'enseigner à ceux qui débutent...

Cordialement,
 
Dernière édition:

YannLC

XLDnaute Junior
Re : Selection d'une fraction de cellule, formule ou VBA ?

Si je comprend bien "plage" va permettre de ne selectioner que jusque la ou il y a des formula ( disons la derniere cellule ou il y a une formula dans cette colonne)
quel terme on utilise afin de dire "selectionner que jusqu' a la derniere cellule remplie : text nombre etc .... ?

Set Plage = Sheets("Output MTS").Columns(5).SpecialCells(xlCellTypeFormulas, 23)

le 23 exprime quoi ?

A Plus
 

myDearFriend!

XLDnaute Barbatruc
Re : Selection d'une fraction de cellule, formule ou VBA ?

Re,
YannLC à dit:
Set Plage = Sheets("Output MTS").Columns(5).SpecialCells(xlCellTypeFormulas, 23)

le 23 exprime quoi ?
23 représente le résultat de l'addition des constantes acceptées par VBA en 2ème argument de la méthode SpecialCells : xlErrors + xlLogical + xlNumbers + xlTextValues (voir l'aide VBA sur SpecialCells).
Un conseil Yann, quand tu rencontres une instruction ou un mot clé que tu ne connait pas, tu sélectionne le mot inconnu dans l'éditeur VBE et tu fais F1.

YannLC à dit:
Si je comprend bien "plage" va permettre de ne selectioner que jusque la ou il y a des formula ( disons la derniere cellule ou il y a une formula dans cette colonne)
Mieux que ça, cette ligne ne va pas prendre en compte toutes les cellules jusqu'à la dernière contenant une formule, elle va prendre en compte UNIQUEMENT les cellules contenant une formule (les cellules vides entre les formules ne sont pas prises en compte). On obtient donc une plage discontinue de cellules ciblées.

YannLC à dit:
quel terme on utilise afin de dire "selectionner que jusqu' a la derniere cellule remplie : text nombre etc .... ?
Ben là, visiblement, tu n'as pas compris l'explication que j'ai donnée du code de Porcinet plus haut...
Range(Range("E1"), Range("E65536").End(xlUp)).Select
sélectionnera la plage "E1" à Exx (Exx étant la dernière cellule utilisée dans la colonne E)

Cordialement,
 

YannLC

XLDnaute Junior
Re : Selection d'une fraction de cellule, formule ou VBA ?

Ben là, visiblement, tu n'as pas compris l'explication que j'ai donnée du code de Porcinet plus haut...
Range(Range("E1"), Range("E65536").End(xlUp)).Select
sélectionnera la plage "E1" à Exx (Exx étant la dernière cellule utilisée dans la colonne E)

Cordialement,

Hi,

J ai compris que la formule de porcinet prend tout jusqu a Exx, en fait je me surement mal exprimé ... la question posée était est ce qu il y a une fonction qui ne traite en fin de compte que les cellules remplies, car celle de porcinet traite tout (formule ou cellule rempli par du text ou nombre) de A1 à Axx par exemple et la tienne ne traite que les cellules remplies d'une formule !!!

A plus
 

myDearFriend!

XLDnaute Barbatruc
Re : Selection d'une fraction de cellule, formule ou VBA ?

Re,
Pour ne prendre en compte que les cellules contenant des constantes :
Code:
[SIZE=2]      [COLOR=navy]Set[/COLOR] plage = Cells.SpecialCells(xlCell[COLOR=navy]TypeConst[/COLOR]ants)
OU
      [COLOR=navy]Set[/COLOR] plage = Cells.SpecialCells(xlCell[COLOR=navy]TypeConst[/COLOR]ants[COLOR=gray], 23[/COLOR])   [COLOR=SeaGreen]'2ème argument facultatif[/COLOR][/SIZE]
Pour ne prendre en compte que les cellules contenant des formules :
Code:
[SIZE=2]      [COLOR=navy]Set[/COLOR] plage = Cells.SpecialCells(xlCell[COLOR=navy]Type[/COLOR]Formulas)
OU
      [COLOR=navy]Set[/COLOR] plage = Cells.SpecialCells(xlCell[COLOR=navy]Type[/COLOR]Formulas[COLOR=gray], 23[/COLOR])[/SIZE][SIZE=2]   [COLOR=SeaGreen]'2ème argument facultatif[/COLOR][/SIZE]
Pour prendre en compte toutes les cellules non vides (constantes et formules) :
Code:
[SIZE=2]      [COLOR=navy]Set[/COLOR] plage = Application.Union(Cells.SpecialCells(xlCell[COLOR=navy]TypeConst[/COLOR]ants), _
                  Cells.SpecialCells(xlCell[COLOR=navy]Type[/COLOR]Formulas))[/SIZE]
Pour les détails, je réédite mon conseil : voir l'AIDE VBA.

Cordialement,
 

YannLC

XLDnaute Junior
Re : Selection d'une fraction de cellule, formule ou VBA ?

Hi,

J ai posté aussi sur le POST moyenne sans 0 et #valeur , je ne trouve pas de solution pour moyenner une plage en excluant les resultats "0" de cette macro ?
Avez vous une solution j ai essayé bcp de format de nombre .... et pas solution !!!

A plus
 

Statistiques des forums

Discussions
312 336
Messages
2 087 388
Membres
103 534
dernier inscrit
Kalamymustapha