[Catégorie modifiée VB6 -> VBA] formule excel to vba

pinem Messages postés 2 Date d'inscription lundi 20 juin 2011 Statut Membre Dernière intervention 20 juin 2011 - 20 juin 2011 à 18:16
cs_Jack Messages postés 14006 Date d'inscription samedi 29 décembre 2001 Statut Modérateur Dernière intervention 28 août 2015 - 20 juin 2011 à 21:24
Salut à tous.
Je me galère depuis un petit moment à transformer une formule excel pour l'adapter à une macro. (Et mon boss commence à me mettre la pression !!)

Ma formule est la suivante :
"=SI(ESTNUM(B23);"""";CONCATENER(SUPPRESPACE(STXT(B23;1;TROUVE(""."";B23;1)-1));"","";STXT(B23;TROUVE(""."";B23;1)+1;2)))"

Je souhaite intégrer cette formule dans une boucle For de telle sorte qu'au lieu que ce soit la cellule B23, ce soit la cellule (i, 2) , avec i la ligne en cours dans ma boucle.

En gros si quelqu'un peut m'aider à trouver la prog qui fasse exactement la meme chose que ma formule mais pour des cellules variables.
J'espère m'être fait compris...

Merci d'avance à ceux qui vont m'aider

5 réponses

cs_Jack Messages postés 14006 Date d'inscription samedi 29 décembre 2001 Statut Modérateur Dernière intervention 28 août 2015 79
20 juin 2011 à 20:31
Salut

Le VB de Excel est du VBA, pas du VB6 - Catégorie de la question modifiée

Il aurait été plus pratique d'expliquer ce que tu souhaites faire | à quoi sert cet enchevêtrement de fonctions.
Il faut séparer chaque fonction :
SI(
  ESTNUM(B23);
  """";
  CONCATENER(
    SUPPRESPACE(
      STXT(B23;
           1;
           TROUVE(""."";
                  B23;
                  1)
           -1)
      );
      "","";
      STXT(B23;
           TROUVE(""."";
                  B23;
                  1)
           +1;
           2)
    )
  )

On dirait que cette 'fonction' sert à reprendre un chiffre qui possède des espaces de milliers, un point à la place d'une virgule, qu'elle supprime ces espaces, qu'elle ajoute les décimales
Donc, elle doit servir à transformer
123 456.789
en
123456,789
Exact ?

Dans ce cas, jette tout et regarde|compare le contenu de .Value, .Value2 et .Text : Tu verras qu'il y a un format purement chiffre dans le lot.

Vala
Jack, MVP VB
NB : Je ne répondrai pas aux messages privés

Le savoir est la seule matière qui s'accroit quand on la partage (Socrate)
0
cs_Jack Messages postés 14006 Date d'inscription samedi 29 décembre 2001 Statut Modérateur Dernière intervention 28 août 2015 79
20 juin 2011 à 20:36
Sinon, ce serait une usine à gaz du genre :
    Dim lPointPosition As Long
    Dim sCellule As String
    
    sCellule = "123 456.789"    ' exemple
    
    If IsNumeric(sCellule) Then
        ' Apparemment, on ne fait rien
    Else
        ' Sinon, opération découpage :
        ' Nettoyage des espaces
        sCellule = Replace(sCellule, " ", "")
        ' Position du point dans la chaine
        lPointPosition = InStr(1, sCellule, ".", vbTextCompare)
        sCellule = Left$(sCellule, lPointPosition - 1) & _
                   "," & _
                   Mid$(sCellule, lPointPosition + 1)
    End If
    MsgBox sCellule
0
cs_Jack Messages postés 14006 Date d'inscription samedi 29 décembre 2001 Statut Modérateur Dernière intervention 28 août 2015 79
20 juin 2011 à 20:38
lol, même plus simple (pour la partie découpage) : Suffit de remplacer les espaces par rien et les points par une virgule :
    sCellule = Replace(sCellule, " ", "")
    sCellule = Replace(sCellule, ".", ",")
0
pinem Messages postés 2 Date d'inscription lundi 20 juin 2011 Statut Membre Dernière intervention 20 juin 2011
20 juin 2011 à 21:05
En effet, je reconnais que c'est un peu une usine à gaz. Mais quand ça me prend la tête je suis du genre à toucher le fond et creuser encore ! lol

En reprenant mon pb à la base, j'ai une extraction qui est faite d'un prologiciel. La plupart du temps il me sort des quantités sous format nombre, mais parfois ce n'est pas un nombre, c'est un texte du type : " 3.00-". Or j'ai une opération qui s'effectue sur cette quantité par la suite, donc il bug.

Donc ce que je veux faire, c'est prendre ligne après ligne et si c'est nombre, on le laisse comme il est (autrement dit on ne fait rien), si c'est du texte, on le transforme en nombre (le dernier code "Replace" devrait fonctionner j'imagine).

Ca donnerait un truc du style :
For i = 1 To 300
cells(i, 2) = Replace(cells(i, 2), " ", "")
cells(i, 2) = Replace(cells(i, 2), ".", ",")
'Mon calcul à suivre'
Next i

C'est ça?
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
cs_Jack Messages postés 14006 Date d'inscription samedi 29 décembre 2001 Statut Modérateur Dernière intervention 28 août 2015 79
20 juin 2011 à 21:24
Oui, sauf que " 3.00-", il ne saura pas le traiter (le transformer en chiffre).
Il faut ajouter un test supplémentaire sur le dernier caractère (Voir Right)
0
Rejoignez-nous