Coller textbox transposé décalé

Bonjour à tous,

Je cherche à coller les valeurs des textbox (les textbox sont renommés par colonne) en transposé décalé.

Je dois passer par quel code?

Merci de votre aide.

Cordialement.

Bonjour,

Affreux...

Tu mets un tag dans chaque TextBox avec leur N° de colonne après TAPUKA boucler sur chaque TextBox mais avec des noms de TextBox comme ça t'es pas dans le caca !

A+

galopin01 a écrit :

Affreux...

Comment vous savez ? On s'est déjà croisé sur Bourg en Bresse ?

Je vais essayer votre solution mais je n'ais pas tous compris....

A+

J'suis pas sur que tu auras plus de succès en ouvrant un autre fil !

Ton fichier démo est im-bu-vable !

Avec le nommage que tu as fait à tes TextBox, on ne peux même plus les traiter en lot !

Et Array ou Tag, c'est des traitements par lots. Pourtant tu sais faire des traitements par lots. :

ça suppose que tu as un radical commun et un numéro d'ordre

TextBox1,TextBox2...

txt_1, txt_2...

En prenant tous les TextBox dans l'ordre de leur N° il est facile de récupérer des contenus, des tags, des cellules, et de les transposer mais avec une salade de fruits difficile de transposer quoique ce soit... On ne peut que touiller !

Pour reformuler : avec des noms comme tu as trouvé tu vas épuiser tous les volontaires ! Pas moyen d'incrémenter quoi que ce soit...

Pour préciser un peu on peut essayer de les traiter en lots.

En p'tit nègr' ça donne :

For each TextBox in Me.Controls
blabla...

Et puis on croise les doigts en espérant que VBA va te les classer dans le bon ordre...

Comme je suppose que tu as l'intention essayer la technique sur ton tableau à 200 TextBox, TAPA fini d'épuiser les boites de Doliprane !

Me suis-je bien fait comprendre ?

A+

Pour le fil en double en fait ce n'est pas fait exprès, il y a eu un bug et le message c'est affiché deux fois et comme je ne peux pas supprimer de fil .....

Bon j'ai compris que je pars dans le flou de débutant et que je me suis compliqué la vie mais en même temps c'est une façon d'apprendre.

C'est effectivement pour mon formulaire avec 200 textbox.... je sais bien que ce n'est pas génial mais je n'ais pas le choix à défaut d'autres solutions à ma connaissance ....

Les textbox ont bien un tronc commun

TB_nbr0 A 199

TB_kv0 A 199

TB_pd0 A 199

TB_hp0 A 199

les textbox TB_NBR et TB_KV sont utilisés pour calculer deux autres tab : (post avec curulis 57)

=CZ qui vont également de 0 A 199

=CKVT qui vont également de 0 A 199

Maintenant j'essaye de remettre tous ça dans le fichier excel mais c'est un peu confus je l'admet.

Je vais nettoyer mon fichier final avant de l'envoyer.

C'est bien ce que je pensais... comme ça, ça ira mieux !

Après il faut savoir exactement ou va chaque série.

TB_nbr0 A 199 de B1 à à CZ1 par exemple

TB_kv0 A 199 de B2 à à CZ2 par exemple

TB_pd0 A 199 de B3 à ...

etc...

Avec ça on pourra peut-être en tirer quelque chose...

A+

Voici le fichier, ne tombez pas de votre chaise et prenez une grande respiration.

Si nous étions en fasse je pense que je mes oreilles deviendraient rouge.

J'arrive plus à m'en sortir dans mon fichier ....

je vais reprendre une petite citation d'Andrea

rdi2:" je me pour éviter la ou et de par la fenêtre

Pfff !

C'est normal que toutes les colonnes soient doublées ??

Colonne T = Colonne Z

Colonne U = Colonne AA

Colonne V =Colonne AB

Colonne W =Colonne AC

Colonne AF =Colonne AL

Colonne AG =Colonne AM

Et puis ton fichier ne dit pas OU VA QUOI

Je subodore que les colonnes N,O,P,Q, sont les premières ciblées c'est ça ? ensuite T,U,V,W et après, je fais quoi avec les doublons ??

A+

Bonjour,

Désolé pour les doublons j'ai du me loupé sur la recopie incrémentée.

Modification effectuée sur le fichier.

Des colonnes A à M : > correspond aux champs du useform multipage 1

Ensuite c'est répétitif en boucle en fonction des données rentrées en multipage2

Colonne N A Q > correspond aux 4 premiers champs textbox du multipage 2

colonne R A S > correspond aux calculs par rapport à la deuxième colonne de champs du multipage 2

En suite ça répète les champs suivants selon le même principe jusqu'à 199.

J'ai beaucoup de pb avec ce fichier car je n'ai pas 2016, cependant tu devrais pouvoir t'y retrouver.

J'ai ajouté 1 bouton ("Ok") et la macro qui va avec ce bouton.

Moi je ne peux pas me servir de ton UserForm via tes lanceurs habituels :

Je ne peux que lancer le Userform à partir de VBA (en activant le Userform (page3) ) puis avec F5...

Donc c'est "la bonne page" qui s'affiche

Le bouton Ok remplit d'abord le UserForm,

...puis il transfert TOUSSA ligne 3

... TAPUKA fermer.

ça c'est pour la démo...

Dans la pratique tu n'auras pas besoin que la macro charge les boutons donc tu pourras supprimer les 4 lignes "charge le contrôle"

puisque tes contrôles seront remplis autrement...

Attention ! Les transferts se font en mode Texte :

Au moment du transfert dans a tu devras modifier avec des CInt, CLong, Val et/ou autres joyeusetés que je ne maîtrise pas...

Puis ajuster la macro pour transférer sur "la bonne ligne". Au lieu de Range("N3") tu mettras :

Range("N" & TaLignePréférée)...

Ok ?

Merci je vais tester ce soir chez moi.

C'est bizarre, le fichier ne fonctionne plus sur le pc du bureau.

il me fait des erreurs avec loe format date et la commande right.

Pourtant j'ai 2016 dernière version sur ce poste. je vais me tirer les cheveux.

Oui moi aussi... Problèmes de compatibilité entre différentes versions :

Va dans VBA Outils >Références Notes les références manquantes, décoche les et recoche celle qui te sont nécessaires en général c'est exactement le même nom avec un N° de version plus récent...

A+

ça marche. merci Monsieur Galopin 01

Prochaine étape ... coller les tab calculées des colonnes restantes.

Par contre ,

Pouvez vous m'expliquez le code,

J'ai beau le mettre sur papier pour comprendre je suis dans le flou. Dès qu'il y a des i partout je ne comprends plus rien. Je comprend quand il y a "TB_nbr" & i mais pas les ii=ii+1, a(ii)...

Dim a(1200), i, ii, iii
With Me.MultiPage1.Pages("Page3").Controls
For i = 0 To 199
a(ii) = Me.Controls("TB_nbr" & i): ii = ii + 1 'vide le contrôle dans a
a(ii) = Me.Controls("TB_kv" & i): ii = ii + 1   'vide le contrôle dans a
a(ii) = Me.Controls("TB_pd" & i): ii = ii + 1   'vide le contrôle dans a
a(ii) = Me.Controls("TB_hp" & i): ii = ii + 3   'vide le contrôle dans a
Next
End With

C'est écrit dessus :

On vide les contrôles dans a !

a est une variable Tablo (Array) en ligne. C'est 20 fois plus rapide à charger que d'inscrire à chaque fois dans Excel...

On a 200 contrôles * 4 donc on va les vider dans 4 * 200 = 800 cellules.

Comme entre chaque lots de quatre il y a 2 cellules vides RS... XY... il va falloir 2*200 = 400 cellules de plus pour recevoir TOUSSA !

C'est pour ça que a est dimensionné pour 800+400 =1200 cellules. ( de A(0) à a(1199)...)

Donc le premier TB est vidé dans a(ii)

et le deuxième dans a(ii+1)

Ce qu'on peux écrire :

a(ii) = Me.Controls("TB_nbr" & i) 'vide le contrôle dans a
ii = ii + 1 'incrémente un compteur différent pour l'Array 

ou :

a(ii) = Me.Controls("TB_nbr" & i): ii = ii + 1 'vide le contrôle dans a

Moi je préfère la 2°syntaxe... Je trouve que ça représente mieux le cycle de vidage...

à la fin du cycle de 4 j'incrémente le tableau de + 3 pour sauter les 2 colonnes vides en chaque lots...

A la fin je vide a dans N...

Ce qui devrais répondre à ta question.

Ce qui m'amène à la remarque suivante :

Comme on vide a dans Nx et colonnes suivantes, tout ce qui figure dans les colonnes suivantes va être écrasé. En particulier les formules car les Array ne contiennent que des valeurs : Pas de formules.

Donc si tu comptes mettre quelques chose dans toutes ces colonnes intermédiaires il faudra le mettre aussitôt après...

Ou alors faire les calculs pour y mettre les valeurs en lieu et place du cycle :

ii = ii + 3

Tout dépend si tes colonnes Z0 etKVT0 sont des constantes ou des champs calculés...

Si ce sont des champs calculés, (je suppose...) il faudra te faire des minis Private Function qui vont te calculer les cellules intermédiaires,

On va les appeler FFFZ() et FKVT() et ça pourrait te donner quelque chose comme :

Private Sub cmdOk_Click()
Dim a(1200), i, ii
With Me.MultiPage1.Pages("Page3").Controls
For i = 0 To 199
a(ii) = Me.Controls("TB_nbr" & i): ii = ii + 1 'vide le contrôle dans a
a(ii) = Me.Controls("TB_kv" & i): ii = ii + 1 'vide le contrôle dans a
a(ii) = Me.Controls("TB_pd" & i): ii = ii + 1 'vide le contrôle dans a
a(ii) = Me.Controls("TB_hp" & i): ii = ii + i 'vide le contrôle dans a
a(ii) = FFFZ(TesParamètres): ii = ii + 1  'La function FFFZ complète le tableau
a(ii) = FKVT(TesAutresParam): ii = ii + 1 'La function FKVT complète le tableau
Next
End With
Range("N3").Resize(1, 1200) = a 'transfert
End Sub

Hum ! c'est là que tu as intérêt à pas te louper dans le passage des paramètres...

Rozumiesz ?

A+

OK je comprends un peu mieux. j'ai fais quelque chose mais ça na pas l'air de marcher ....

pour K0 et KVTO la valeur est de zéro alors

.Range("n" & MaLigneAttribution).Value = 0 'TB_nbr0 = 0
     .Range("o" & MaLigneAttribution).Value = 0 'TB_kv0 = 0
     .Range("p" & MaLigneAttribution).Value = 0 ' TB_pd0 = 0
     .Range("q" & MaLigneAttribution).Value = 0 'TB_hp0 = 0
     .Range("r" & MaLigneAttribution).Value = 0 'TB_Z0 = 0
     .Range("s" & MaLigneAttribution).Value = 0 'TB_KVT0 = 0

Pour coller dans le tableau j'ai fais ça (l'intérieur du bouton valider)

Dim a(1194), i, ii
With Me.MultiPage1.Pages("Page3").Controls
For i = 1 To 199
a(ii) = Me.Controls("TB_nbr" & i): ii = ii + 1 'vide le contrôle dans a
a(ii) = Me.Controls("TB_kv" & i): ii = ii + 1   'vide le contrôle dans a
a(ii) = Me.Controls("TB_pd" & i): ii = ii + 1   'vide le contrôle dans a
a(ii) = Me.Controls("TB_hp" & i): ii = ii + 1   'vide le contrôle dans a
a(ii) = tTab1(): ii = ii + 1   'vide le contrôle dans a
a(ii) = tTab2(): ii = ii + 1   'vide le contrôle dans a
Next
End With
Range("T" & MaLigneAttribution).Resize(1, 1194) = a 'transfert

    MonAttribution = .Range("A" & MaLigneAttribution).Value
    .Range("A" & MaLigneAttribution).Select

Concernant le calcul des deux cellules manquantes je calcul par rapport au champs KV le Z et le KVT par ces lignes de codes :

Dim tTab1(), tTab2()
Dim CZ As Double
Dim CKV, CKVT, x, y As Integer

For x = 1 To 199
    If Me.Controls("TB_nbr" & x).Text <> "" Then
        CKV = CKV + 1
        ReDim Preserve tTab1(CKV)
       CZ = CDbl(Me.Controls("TB_kv" & x).Text)
      tTab1(CKV - 1) = 1 / (CZ ^ 2)
    Else
        Exit For
   End If
For y = 1 To 199
   If Me.Controls("TB_nbr" & x).Text <> "" Then
        CKV = CKV + 1
        ReDim Preserve tTab2(CKV)
        CKVT = CDbl(Me.Controls("TB_kv" & x).Text)
        tTab2(CKV - 1) = 1 / Sqr(1 / CKV ^ 2 + 1 / (1 * 1 * TB_Kvmax.Value ^ 2))
    Else
        Exit For
    End If
Next

J'suis un peu dubitatif... Je le sens pas bien !

La nuit porte conseil alors on verra ça demain mais je voudrais que tu me donnes les valeurs à entrer dans les TextBox (indice 1) :

TB_nbr1, TB_kv1, TB_pd1 et TB_hp1

ainsi que les valeurs à entrer dans les TextBox (indice 199) :

TB_nbr199, TB_kv199, TB_pd199 et TB_hp199

Ensuite... idéalement je veux une Private Function FFFZ() qui me retourne Z1 et une autre Private Function FKVT() qui me retourne KVT1 en fonction de TB_nbr1, TB_kv1, TB_pd1 et TB_hp1 (et TB_Kvmax)

Les mêmes Function devraient me retourner Z199 et KVT199 en fonction de TB_nbr199, TB_kv199, TB_pd199 et TB_hp199

Si tu ne sais pas traduire ça en Function à paramètres... tu me donnes juste la méthode de calcul pour Z1 et KVT1 et le résultat attendu en sortie de Function (et si différent, sous forme numérique formatée) dans les colonnes X et Y.

Je te demande pas de me faire des salamalecs avec des tableaux... redim... For... If... que sais-je !

Je veux simplement savoir quelle formule mathématique donnent Z1 et KVT1 en fonction des données sources TB_nbr1, TB_kv1, TB_pd1 et TB_hp1 )

Pour la première (FFFZ() ça pourrait donner (si j'ai bien compris ta production...)

FFFZ()  = 1 / (CDbl(Me.Controls("TB_kv" & x).Text) ^ 2)

Pour la deuxième c'est plus compliqué car tu as utilisé un CKVT et tu l'as zappé en cours de route du coup c'est incompréhensible : YAPUKE des CKV !

Je suppose que ça peut faire quelque chose comme :

FKVT() = 1 / Sqr(1 / CDbl(Me.Controls("TB_kv" & x).Text) ^ 2 + 1 / (1 * 1 * TB_Kvmax.Value ^ 2))

Mais vérifie bien avant les deux formules parce que comme tu as utilisé des Array à base zero avec des CKV décalé de +1, je ne sais plus comment me fier à cette traduction !

Accessoirement si tu peux me donner le résultat attendu pour Z199 et KVT199 ce sera très bien mais si j'ai déjà la première série, pour les résultats intermédiaires, je pense pouvoir me débrouiller avec.

A+

je voudrais que tu me donnes les valeurs à entrer dans les TextBox (indice 1) :

TB_nbr1, TB_kv1, TB_pd1 et TB_hp1

ainsi que les valeurs à entrer dans les TextBox (indice 199) :

TB_nbr199, TB_kv199, TB_pd199 et TB_hp199

J'ai mis sur le fichier un exemple de feuille avec données d'une vanne sur l'ensemble des valeurs

Function 1:

FFFZ()  = 1 / (CDbl(Me.Controls("TB_kv" & x).Text) ^ 2) ' 1/KV^2

Function 2:

FKVT() = 1 / Sqr(1 / CDbl(Me.Controls("TB_kv" & x).Text) ^ 2 + 1 / (1 * 1 * TB_Kvmax.Value ^ 2)) 

Les deux fonctions sont bonnes

Ce FFZ ne correspond pas !

Je n'ai pas fait de fonction particulière pour ça je l'ai directement intégré dans ta procédure de modification mais le résultat est faux !

Voir la : Private Sub Bouton_Valider_Click()

Le FKVT est OK

Sur le fichier joint ne tester qu'en mode modification sur la ligne 12

Pour l'instant la procédure est bloquée sur cette ligne tant que je n'aurai pas validé cette fonction.

Pfff ! ça y est j'ai compris... Une nuit la dessus pour une c... :

Ce FFZ ne correspond pas !

Ce FFZ ne correspond pas !

Ce FFZ ne correspond pas !

Ce FFZ ne correspond pas !

Ce FFZ ne correspond pas !

Ce FFZ ne correspond pas !

Ce FFZ ne correspond pas !

Ce FFZ ne correspond pas !

Ce FFZ ne correspond pas !

Ce FFZ ne correspond pas !

Ce FFZ ne correspond pas !

Ce FFZ ne correspond pas !

Ce FFZ ne correspond pas !

Heureusement que t'as bien vérifié !!!

Bon... maintenant que je suis retombé sur mes pattes on va pouvoir avancer...

Il est 4h30 il est temps que j'aille dormir un peu !

A+

Bonjour,

Bon j'ai fait un peu de ménage : J'ai modifié la procédure de transfert comme suit

Finalement je n'ai pas créé de Function puisque ça se résumait en une formule...

Mais il sera peut-être bénéfique ultérieurement de le faire si ça se complexifie ou si ça te prend de vouloir utiliser la même fonction dans une autre situation...

La Procédure du bouton OK modifiée :

Private Sub TransVal()
Dim a(1200), i, ii
With Me.MultiPage1.Pages("Page3").Controls
   On Error GoTo GESTERR:
   For i = 0 To 199
   a(ii) = Me.Controls("TB_nbr" & i): ii = ii + 1  'vide le contrôle dans a
   a(ii) = Me.Controls("TB_kv" & i): ii = ii + 1   'vide le contrôle dans a
   a(ii) = Me.Controls("TB_pd" & i): ii = ii + 1   'vide le contrôle dans a
   a(ii) = Me.Controls("TB_hp" & i): ii = ii + 1   'vide le contrôle dans a
   a(ii) = 1 / Sqr(CDbl(Me.Controls("TB_kv" & i).Text) ^ 2): ii = ii + 1 ' 1/KV^2 'FFFZ(TesParamètres)
   a(ii) = 1 / Sqr(1 / CDbl(Me.Controls("TB_kv" & i).Text) ^ 2 + 1 / (1 * 1 * TB_Kvmax.Value ^ 2)): ii = ii + 1 'FKVT
   Next
End With
Range("N" & iROW).Resize(1, 1200) = a 'transfert
Exit Sub
GESTERR:
   If Err.Number = 11 Then
      a(ii) = 0
      Resume Next
   Else
      a(ii) = 0: Debug.Print Err.Number
      Resume Next
   End If
End Sub

J'ai juste mis une gestion d'erreurs ou le Else est un peu superflue pour le moment... Mais il importe de différencier dès à présent l'Erreur 11 (absence de donnée) d'une hypothétique autre erreur : Pour l'instant il n'y en a pas... Eventuellement on pourrait remplacer le Debug.Print par un MsgBox.... Mébon, C'est secondaire.

J'en ai profité pour faire un peu de ménage parce que ton truc était un peu incompréhensible... J'ai donc élagué, simplifié...

Tu verras tu en feras ce que tu veux, mébon... si tu veux continuer sur ce projet. Tu ferais peut-être bien d'adopter cette ébauche.

C'est un peu plus conventionnel et nettement plus compréhensible si quelqu'un doit mettre son nez dedans pour te donner un coup de main...

Ah si... J'ai créé 2 ou 3 plages nommées...

Du coup j'ai viré le boutonOk, le vidage se fait avec la validation...

Tu verras. Je me suis demandé quand même si c'était bien la peine de s'amuser à faire un Multipage et une BD comme ça :

Moi j'aurai fait juste un BD d'une douzaine de 12 colonnes avec vidage Direct dans une feuille du type de la TA STAD 20...

Même pas besoin de la sauvegarder... Tu considères cette feuille comme une SPREADSHEET et tu vides directement tes données en mode Modif > Validation Directe dans cette feuille cible. Y doit y avoir juste une ou deux petites macros à faire pour remplir la précison et la hauteur de passage... et basta !

Mébon, je vois ça de l'extérieur : J'ai pas toutes les cartes en main ! T'es surement plus au jus...

Bonne lecture et bonne continuation.

A+

Merci M.Galopin01,

Il va me falloir un peu de temps pour assimiler toutes ces modifications.

Je vais essayer de conserver la charte d'écriture, pas facile pour moi. Je viens de prendre une formation VBA de deux semaines pour apprendre les bases et essayer de faire au plus clair possible parcequ 'après il va falloir que je fasse fonctionner AUTOCAD avec excel et je pense que je vais me retrouver tout seul sur ces paramètres spécifiques....

Je digère le tout et je te dis quoi.

Merci pour ce temps passé.

Rechercher des sujets similaires à "coller textbox transpose decale"