[Résolu]Identifier un entier dans excel (macro VB)

Aquadrox

Nouveau membre
Bonjour!

Voici mon problème, je voudrais pouvoir pointer une cellule (bienvenue sur excel) et dire si sont contenu est un nombre entier ou une chaine de caractere.
J'ai essayé avec ca:

[cpp]
y = x + 1
i = 0
For y = x + 1 To (x + 1) * 2
Range("C" & x + 1).Select
ActiveCell.FormulaR1C1 = "=TYPE(RC[y-x])"
i = Range("E41").Value
If i = 1 Then
Cells(z, 2).Select
Selection.Delete Shift:=xlToLeft
End If
i = 0
Next y
[/cpp]


Le truc c'est que je dois l'appliquer dans un tableau (colonne C), la variable "x" est le nombre de ligne du tableau, je me sert de la variable "y" pour pointer la cellule désirée. "i" est simplement une variable dans laquelle je met le résultat de la fonction pour le traiter ensuite.
Le principe et de supprimer la cellule à gauche de celle testée si on y trouve un entier (par exemple supprimer C21 si D21 contient un entier).
Le probleme de la fonction =TYPE(RC) est que, non seulement c'est une fonction excel alors je trouve pas ca tres propre dans mon pti programme VB mais en plus elle refuse qu'on pointe avec une variable.
Par exemple je peux faire =TYPE(RC[2]) mais pas =TYPE(RC[y]) ce qui est plutot handicapant dans un tableau.

J'esperre avoir été clair, merci d'avance pour votre aide
 

zeb

Modérateur
Bonjour!

[strike]Voici mon problème : Tu n'as pas lu les règles. Merci d'utiliser la balise
Code:
 !!!![/strike]

EDIT: Merci
 

Aquadrox

Nouveau membre
Vraiment désolé pour cet oubli pourtant j'avais lu les règles mais j'ai qu'a même oublié
 

zeb

Modérateur
Bah, c'est juste que tu ne connaissais pas la fonction IsNumeric :)
Maintenant que tu la connais tu peux faire ça :
Code:
For y = x + 1 To (x + 1) * 2
  If IsNumeric(Range("C" & x + 1)) Then
    Cells(z, 2).Select
    Selection.Delete Shift:=xlToLeft
  End If
  i = 0
Next y

J'ai viré les deux premières lignes, complètement inutiles.
L'initialisation de i se fait ligne 6, celle de y dans le For.
Je ne sais pas d'où sort z.
Il m'est avis que ligne 6, tu ne cherchais pas la valeur de E41 mais de "C" & x + 1.

Pour me faire plaisir ou par principe, voire les deux :D, vire-moi les Range(..).Select/ActiveCell (Lignes 4/5) et autres Select/Selection (Ligne 8/9).
Je sais bien que c'est un reliquat de l'enregistreur de macro que j'encourage à utiliser, mais les effets de l'activation et de la sélection de cellules quand cela n'est pas nécessaire consomme tant de ressources inutiles que cela m'exaspère (je suis un vieux ronchon [:zeb])

Ce qui nous donne :
Code:
For y = x + 1 To (x + 1) * 2
  If IsNumeric(Range("C" & x + 1)) Then Cells(z, 2).Delete Shift:=xlToLeft
Next y

En relisant ton énoncé, je me dis que tu peux même l'écrire comme ça, tout est dans la fonction Offset ;) :

Code:
Dim cell As Range

For Each cell In Range("D" & première_ligne_du_tableau & ":D" & dernière_ligne_du_tableau)
  If IsNumeric(cell.Value) Then cell.Offset(0, -1).Delete Shift:=xlToLeft
Next
 

Aquadrox

Nouveau membre
Merci!
Je vais tester ca et t'en dire des nouvelles, pour les initialisations je m'en suis rendu compte que plus tard et ai commencé a optimiser tout ca.
Je te remercie grandement pour tes conseils, comme tu as dut le remarquer je debute en VB, je trouve ca plutot sympa.
Je te tiens au courant ;)
 
Vous devez vous inscrire ou vous connecter pour répondre ici.
Derniers messages publiés
Statistiques globales
Discussions
730 079
Messages
6 716 703
Membres
1 586 247
Dernier membre
MrAzgarIII
Partager cette page
Haut