Extraction de carractaire cellule excel vers textbox

gislain99 - 21 mai 2013 à 17:27
 Utilisateur anonyme - 24 mai 2013 à 03:18
Bonjour,


dans la cellule A de ma feuille j'ai un code du type AAAA666666-1 il me faut extraire les 4 premiere letres vers la textbox4 les 6chiffres vers la text box5 et le dernier chiffre dans la textbox6.

40 réponses

Utilisateur anonyme
23 mai 2013 à 15:56
Bonjour,
MSDN dit (en gros):
"La fonction 'Mid' est similaire à la fonction Mid$ à l'exception du premier 'index' qui est à zéro."

gislain99, d'après ce que j'ai compris tu interdis les doublons dans tes textbox, ça n'a aucun rapport avec la suppression de la ligne qui contient le fameux AAAA666666-1.

Je pense que la structure même de ton code est à revoir...
Que doit-il faire s'il y a des doublons?
Doit-il supprimer la cellule AAAA666666-1 ?
etc. etc.

Cordialement


CF2i - Guadeloupe
Ingénierie Informatique
0
cs_cheyenne
Messages postés
693
Date d'inscription
samedi 18 mai 2002
Statut
Membre
Dernière intervention
17 avril 2017
2
23 mai 2013 à 16:18
Bonjour et merci acive, il n'empêche que l'instruction s'exécute plus vite avec le $ !

Cheyenne
0
Utilisateur anonyme
23 mai 2013 à 16:32
Bonjour cheyenne,
L'as-tu testé? (mesuré la vitesse)
Je n'ai rien vu qui parle de ça, mais si c'est le cas c'est bon à savoir...

J'ai un vague souvenir que dans les (très) anciennes versions de VB il fallait déclarer les variables avec un $ pour lui dire que c'est une chaîne de caractères, mais bon... ça remonte.

Cordialement


CF2i - Guadeloupe
Ingénierie Informatique
0
Bonjour,
Pour reprendre depuis le debut j'ai une multipage avec une page qui me ser a remplir une feuille excel ou j'interdis la saisie des doublons dans la colonne "A" qui est renseigné avec mes trois textbox.
le code que vous venez de m'aider a rehaliser me ser a recuperer les info dans mes text box mais comme la saisie des doublon dans celles ci sont interdit il me suprime l'info dans mes textbox et sur ma feuille excel moi je voudrais supprimer l'info uniquement sur ma feuille excel.

j'espaire avoir etais clair et precis.lol
0

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

Posez votre question
cs_cheyenne
Messages postés
693
Date d'inscription
samedi 18 mai 2002
Statut
Membre
Dernière intervention
17 avril 2017
2
23 mai 2013 à 17:14
Ben oui, j'ai testé avec QueryPerformanceCounter
Moyenne pour 5 tests, la boucle étant exécutée 1 million de fois par test. (mode compilé)

Sans typage : 0.199076
avec typage : 0.063247 soit x 3.14
Valable pour Left$, Mid$ et Right$

J'ai fait plein de test de la sorte, ainsi :
a = Asc("Z") :  0.033473
a = AscW("Z") : 0.004533 soit x 7.3894

a = "" : 0.070629
a = vbNullString : 0.0003797 soit x 18.6

a = x ^ 2 : 0.160286
a = x * x : 0.000376 soit x 236.986

etc... etc...

Cheyenne
0
cs_cheyenne
Messages postés
693
Date d'inscription
samedi 18 mai 2002
Statut
Membre
Dernière intervention
17 avril 2017
2
23 mai 2013 à 17:27
Re acive,

A noter que dans mes test l'appel d'une fonction avec ou sans Call est pratiquement identique (léger avantage avec Call 1.017)

L'utilisation de With ralentit légèrement :
0.974, négligeable par rapport à l'avantage d'avoir un code mieux structuré)

LenB est 1.289 fois plus rapide que Len

Test logique :
b (a 5 And c = 5)
If (a 5 And c 5) Then b = True Else b = False  
1.357 x fois plus rapide avec If

a IIf(j 5, 1, 2)
If j 5 Then a 1 Else a = 2
65 x fois plus rapide avec If

Cheyenne
0
Utilisateur anonyme
23 mai 2013 à 17:46
Cheyenne:

Oui... intéressant...
Je vais tester tout ça la prochaine fois que l'occasion se présentera.

Merci


Cordialement


CF2i - Guadeloupe
Ingénierie Informatique
0
ucfoutu
Messages postés
18038
Date d'inscription
lundi 7 décembre 2009
Statut
Modérateur
Dernière intervention
11 avril 2018
236
23 mai 2013 à 17:56
A cheyenne :
Recommence ton test, mais avec Mid et Mid$ et avec ce qui est typé en String (une chaîne de caractères l'est).
Puis (pour être "sûr") montre le test fait, tel qu'écrit

________________________
Réponse exacte ? => "REPONSE ACCEPTEE" facilitera les recherches.
Pas d'aide en ligne installée ? => ne comptez pas sur moi pour simplement répéter son contenu. Je n'interviendrai que si nécessité de la compléter.
0
ucfoutu
Messages postés
18038
Date d'inscription
lundi 7 décembre 2009
Statut
Modérateur
Dernière intervention
11 avril 2018
236
23 mai 2013 à 18:10
Et ne pas confondre la fonction Mid et l'instruction (d'assignation, pour être précis) Mid (qui, elle, peut avantageusement bénéficier du suffixe dans certains cas).
Ce n'est pas la même chose.


________________________
Réponse exacte ? => "REPONSE ACCEPTEE" facilitera les recherches.
Pas d'aide en ligne installée ? => ne comptez pas sur moi pour simplement répéter son contenu. Je n'interviendrai que si nécessité de la compléter.
0
cs_cheyenne
Messages postés
693
Date d'inscription
samedi 18 mai 2002
Statut
Membre
Dernière intervention
17 avril 2017
2
23 mai 2013 à 19:04
> ucfoutu

Voici le code utilisé dans mon test.
Private Sub testTYPE()
   Dim a As String

   lblINFO(1).Caption "a Left(""Test de type"", 5)"
   For i = 1 To nTESTS
      Call QueryPerformanceCounter(ticDEB)
      For j = 1 To nFOIS
         a = Left("Test de type", 5)
      Next j
      Call QueryPerformanceCounter(ticFIN)
      temps(1, i) = (ticFIN - ticDEB) / ticFRQ
   Next i

   lblINFO(2).Caption "a Left$(""Test de type"", 5)"
   For i = 1 To nTESTS
      Call QueryPerformanceCounter(ticDEB)
      For j = 1 To nFOIS
        a = Left$("Test de type", 5)
      Next j
      Call QueryPerformanceCounter(ticFIN)
      temps(2, i) = (ticFIN - ticDEB) / ticFRQ
   Next i
End Sub

Cheyenne
0
cs_cheyenne
Messages postés
693
Date d'inscription
samedi 18 mai 2002
Statut
Membre
Dernière intervention
17 avril 2017
2
23 mai 2013 à 19:19
> ucfoutu

Oui, j'ai bien compris la différence.
a = "TEST"
MsgBox Mid$("TEST", 2, 2)  '  = ES

Mid$(a, 2, 2) = "XX"
MsgBox a                   ' = TXXT


Cheyenne
0
ucfoutu
Messages postés
18038
Date d'inscription
lundi 7 décembre 2009
Statut
Modérateur
Dernière intervention
11 avril 2018
236
23 mai 2013 à 19:28
Ouais...
Je viens de vérifier autrement ===>> du simple au double sans le suffixe !
TU AS RAISON


________________________
Réponse exacte ? => "REPONSE ACCEPTEE" facilitera les recherches.
Pas d'aide en ligne installée ? => ne comptez pas sur moi pour simplement répéter son contenu. Je n'interviendrai que si nécessité de la compléter.
0
ucfoutu
Messages postés
18038
Date d'inscription
lundi 7 décembre 2009
Statut
Modérateur
Dernière intervention
11 avril 2018
236
23 mai 2013 à 19:34
Il faut absolument que je trouve pourquoi.
Je vais essayer de trouver avant cette nuit (je vais ensuite être absent pour 4 jours !)
J'ai cependant une petite idée derrière la tête sur la cause réelle (qui serait légèrement ailleurs) et vais faire un autre test après dîner.
A +


________________________
Réponse exacte ? => "REPONSE ACCEPTEE" facilitera les recherches.
Pas d'aide en ligne installée ? => ne comptez pas sur moi pour simplement répéter son contenu. Je n'interviendrai que si nécessité de la compléter.
0
Utilisateur anonyme
23 mai 2013 à 19:46
Hé bah... on va tous retourner au $ alors...

Essayons maintenant avec un €...

D'accord, d"accord, elle est "moyenne" cette blague...


Cordialement


CF2i - Guadeloupe
Ingénierie Informatique
0
cs_cheyenne
Messages postés
693
Date d'inscription
samedi 18 mai 2002
Statut
Membre
Dernière intervention
17 avril 2017
2
23 mai 2013 à 20:22
A noter, j'ai volontairement codé :
a = Left$("Test de type", 5)
au lieu de :
a Left$(b, 5) ' ou b "Test de type" bien sûr
Dans le 2ème cas on gagne encore 50% de temps

Allez encore un test (extraction de texte entre 2 balises)
TEST 1
For j = 1 To nFOIS
   t() = Split(a, "<test>")
   b = Split(t(1), "</test")(0)
Next j

TEST 2
For j = 1 To nFOIS
   strDEB = "<test>"
   strFIN = "</test"
   nDEB = InStr(1, a, strDEB)
   nFIN = InStr(nDEB, a, strFIN)
   b = Mid$(a, nDEB + Len(strDEB), nFIN - nDEB - Len(strDEB))
Next j

Le TEST 2 est 6.5 x plus rapide que le TEST 1

C'est tout pour ce soir...

> acive, non pas avec € mais avec £ car on code en anglais, bof

Cheyenne
0
ucfoutu
Messages postés
18038
Date d'inscription
lundi 7 décembre 2009
Statut
Modérateur
Dernière intervention
11 avril 2018
236
23 mai 2013 à 20:54
Je viens de faire la même observation, cheyenne , et c'est ce à quoi je faisais allusion par :
J'ai cependant une petite idée derrière la tête sur la cause réelle (qui serait légèrement ailleurs) et vais faire un autre test après dîner.


si, au lieu de passer une chaîne, on passe la variable la contenant, le différence de vitesse entre Mid et Mid$ devient insignifiante, y compris sur un nombre extrêmement important de tours de boucle.
On dirait que Mid transforme d'abord la chaine en variable pour ensuite traiter la variable. Si en boucle ===>> plus lent. Si déjà fait une fois pour toutes ===>> plus de problèmes.
Bon... on va en rester là.


________________________
Réponse exacte ? => "REPONSE ACCEPTEE" facilitera les recherches.
Pas d'aide en ligne installée ? => ne comptez pas sur moi pour simplement répéter son contenu. Je n'interviendrai que si nécessité de la compléter.
0
cs_cheyenne
Messages postés
693
Date d'inscription
samedi 18 mai 2002
Statut
Membre
Dernière intervention
17 avril 2017
2
23 mai 2013 à 22:51
> ucfoutu

J'en étais arrivé au même raisonnement. Bon ben une bonne chose de faite.
Allez profites bien de tes 4 jours....

Cheyenne
0
Utilisateur anonyme
24 mai 2013 à 02:57
Bonjour,

J'avais lu à quelque part, je pense que c'est dans l'aide de VBA Office 2002, ou peut-être même Office 97, que les fonctions sans le suffixe $ utilisent fondamentalement le type de données Variant alors que depuis l'origine du BASIC le suffixe $ indique le type String, comme le suffixe % indique le type Integer, (ou du moins un entier) et 2 ou 3 autres que j'oublie. Ils ont même été maintenus depuis toujours, bien que l'instruction dim machin as quelque chose à été introduite il y a quand même longtemps.

Donc, pour compléter la conclusion finale de ucfoutu, une fois que la variable a été définie comme du type string, la conversion n'a lieu qu'une seule fois. Mais dans le cas de l'utilisation de la donnée elle-même en string avec la fonction "moderne" qui interprète une donnée variant, il doit y avoir à quelque part un transtypage du type de donnée string vers le type variant; alors que la fonction "antique" n'a qu'à s'organiser avec un texte.
0
Utilisateur anonyme
24 mai 2013 à 03:08
Bonjour,

Le pire, c'est que dans l'aide VBA de mon Excel 2010, le lien hypertexte de Mid$ renvoie vers l'aide de Mid. Dans l'écran d'aide, ils disent que Mid retourne un Variant(String)
0
Utilisateur anonyme
24 mai 2013 à 03:18
Merci Cmarcotte,
J'avais un doute de ce que j'avançais en disant (plus haut):
J'ai un vague souvenir que dans les (très) anciennes versions de VB il fallait déclarer les variables avec un $ pour lui dire que c'est une chaîne de caractères, mais bon... ça remonte.


Et:
pour compléter la conclusion finale de ucfoutu, une fois que la variable a été définie comme du type string, la conversion n'a lieu qu'une seule fois.

Ce qui est logique, et correspond à ce que je pensais également, sauf que je suis arrivé chez moi il n'y a pas long-temps et je n'ai pas eu le temps de m'y pencher.


Cordialement


CF2i - Guadeloupe
Ingénierie Informatique
0