Comment ecrire un code pour eviter de le repeter 30 fois

H

H@NNOUN

Guest
Bonsoir le forum
JE SOUHAITE A TOUS LE FORUM UNE BONNE ET HEUREUSE ANNEE 2005


Mon Probleme je remplis un tableau à l'aide d'un USF à partir d'un combobox je declare le numero de machine MTp
àpres chaque saisie dans l'USF JE VALIDE La machine
je voudrai pour eviter d'ecrire 30 fois le code utiliser une variable ici (col) pour remplacer col par "D" ou "E" Etc ...
si mtp = 6280 COL est = à "D" et si mtp = 6709 COL est egal à "AG"
J'ai ecris ce code mais cela ne marche pas
Si qq peus m'aider par avance merci

Private Sub Valider_Click()
Dim MonTotal As Double
Dim Col As String

If MTp = "6280" Then
Col = "D"
Range("D29").Value = Val(UserForm1.TextBox41)
Else
If MTp = "6281" Then
Col = "E"
Range("E29").Value = Val(UserForm1.TextBox41)
Else
If MTp = "6305" Then
Col = "F"
Range("F29").Value = Val(UserForm1.TextBox41)
Else
If MTp = "6709" Then
Col = "AG"
Range("AG29").Value = Val(UserForm1.TextBox41)


If Not IsNumeric(TextBox2) Then
Range(Col & "5").Offset(0, 0) = ""
Else
Range(Col & "5").Offset(0, 0) = Val(UserForm1.TextBox2)
End If
Range(Col & "5").Offset(1, 0) = Val(UserForm1.TextBox3)
Range(Col & "5").Offset(2, 0) = Val(UserForm1.TextBox4)
Range(Col & "5").Offset(3, 0) = Val(UserForm1.TextBox5)
Range(Col & "5").Offset(4, 0) = Val(UserForm1.TextBox6)
Range(Col & "5").Offset(5, 0) = Val(UserForm1.TextBox7)
Range(Col & "5").Offset(39, 0) = Val(UserForm1.TextBox40)
End If
End If
End If
End If
End Sub




VOS Reponses seront le bienvenue

H@nnoun
 
L

Lord Nelson

Guest
Salut Hannoun,

Essaie comme ceci :

Private Sub Valider_Click()
Dim MonTotal As Double
Dim Col As String

If MTp = "6280" Then
Col = "D"
Range("D29").Value = Val(UserForm1.TextBox41)
ElseIf MTp = "6281" Then
Col = "E"
Range("E29").Value = Val(UserForm1.TextBox41)
ElseIf MTp = "6305" Then
Col = "F"
Range("F29").Value = Val(UserForm1.TextBox41)
ElseIf MTp = "6709" Then
Col = "AG"
Range("AG29").Value = Val(UserForm1.TextBox41)
else
If Not IsNumeric(TextBox2) Then
Range(Col & "5").Offset(0, 0) = ""
Else
Range(Col & "5").Offset(0, 0) = Val(UserForm1.TextBox2)
End If
Range(Col & "5").Offset(1, 0) = Val(UserForm1.TextBox3)
Range(Col & "5").Offset(2, 0) = Val(UserForm1.TextBox4)
Range(Col & "5").Offset(3, 0) = Val(UserForm1.TextBox5)
Range(Col & "5").Offset(4, 0) = Val(UserForm1.TextBox6)
Range(Col & "5").Offset(5, 0) = Val(UserForm1.TextBox7)
Range(Col & "5").Offset(39, 0) = Val(UserForm1.TextBox40)
End If
End Sub

A+
Horatio
 
G

galopin01

Guest
Bonsoir,
Tu le valides comment ton numéro de machine ?
J'ai bien l'impression que ta macro ne le trouve pas :
Essaie :

Private Sub Valider_Click()
Dim MonTotal As Double
Dim Col As String

MsgBox MTp

Le reste sans changement.

J'ai bien l'impression que ton MsgBox va être vide. Alors tes If MTp =...
ils évaluent rien du tout...

A+
 
G

galopin01

Guest
Bon,
Je serais curieux de savoir comment ? Variable publique ?

Comme tu as pas l'air trop fixé sur les End If je te demanderais d'essayer celà :

(selon la correction de notre ami Horatio) le début sans changement

else
If Not IsNumeric(TextBox2) Then
Range(Col & "5") = ""
Else
Range(Col & "5") = Val(UserForm1.TextBox2)
End If
End If
Range(Col & "5").Offset(1, 0) = Val(UserForm1.TextBox3)
Range(Col & "5").Offset(2, 0) = Val(UserForm1.TextBox4)
Range(Col & "5").Offset(3, 0) = Val(UserForm1.TextBox5)
Range(Col & "5").Offset(4, 0) = Val(UserForm1.TextBox6)
Range(Col & "5").Offset(5, 0) = Val(UserForm1.TextBox7)
Range(Col & "5").Offset(39, 0) = Val(UserForm1.TextBox40)

MsgBox Col
End Sub

Si ça ne marche pas tu peux me donner la valeur de retour de MsgBox MTp
et la valeur de retour de MsgBox Col
 
H

H@NNOUN

Guest
Re bonsoir
Merci pour ton aide
j'ai teste le msgbox MTp renvoie la machine 6281 qui est en E

le msgbox col renvoie bien la colonne selectionne E

est ce que cette ligne est correct

Range(Col & "5").Offset(1, 0) = Val(UserForm1.TextBox3)
 
H

H@NNOUN

Guest
Re Bonsoir LE FORUM

SI JE METS CE CODE CA MARCHE mais comment faire pour eviter d'ecrire tous ce code en remplacent D5 en E5 et ce jusque AG5
sachant que pour chaque colonne Le MTp change 6280 pour D 6281 pour E etc.......

Private Sub Valider_Click()

Dim MTp As String

If MTp = "6280" Then

Range("d29").Value = Val(UserForm1.TextBox41)
If Not IsNumeric(TextBox2) Then
Range("D5").Offset(0, 0) = ""
Else
Range("D5").Offset(0, 0) = Val(UserForm1.TextBox2)
End If
Range("d5").Offset(1, 0) = Val(UserForm1.TextBox3)
Range("D5").Offset(2, 0) = Val(UserForm1.TextBox4)
Range("D5").Offset(3, 0) = Val(UserForm1.TextBox5)
Range("D5").Offset(4, 0) = Val(UserForm1.TextBox6)
Range("D5").Offset(5, 0) = Val(UserForm1.TextBox7)
Range("D5").Offset(6, 0) = Val(UserForm1.TextBox8)
Range("D5").Offset(7, 0) = Val(UserForm1.TextBox9)
Range("D5").Offset(8, 0) = Val(UserForm1.TextBox10)
Range("D5").Offset(9, 0) = Val(UserForm1.TextBox11)
Range("D5").Offset(10, 0) = Val(UserForm1.TextBox12)
Range("D5").Offset(11, 0) = Val(UserForm1.TextBox13)
Range("D5").Offset(12, 0) = Val(UserForm1.TextBox14)
Range("D5").Offset(13, 0) = Val(UserForm1.TextBox15)
Range("D5").Offset(14, 0) = Val(UserForm1.TextBox16)
Range("D5").Offset(15, 0) = Val(UserForm1.TextBox17)
Range("D5").Offset(16, 0) = Val(UserForm1.TextBox18)
Range("D5").Offset(17, 0) = Val(UserForm1.TextBox19)
Range("D5").Offset(18, 0) = Val(UserForm1.TextBox20)
Range("D5").Offset(19, 0) = Val(UserForm1.TextBox21)
Range("D5").Offset(20, 0) = Val(UserForm1.TextBox22)
Range("D5").Offset(25, 0) = Val(UserForm1.TextBox23)

Range("D5").Offset(29, 0) = Val(UserForm1.TextBox30)
Range("D5").Offset(30, 0) = Val(UserForm1.TextBox31)
Range("D5").Offset(31, 0) = Val(UserForm1.TextBox32)
Range("D5").Offset(32, 0) = Val(UserForm1.TextBox33)
Range("D5").Offset(33, 0) = Val(UserForm1.TextBox34)
Range("D5").Offset(34, 0) = Val(UserForm1.TextBox35)
Range("D5").Offset(35, 0) = Val(UserForm1.TextBox36)
Range("D5").Offset(36, 0) = Val(UserForm1.TextBox37)
Range("D5").Offset(37, 0) = Val(UserForm1.TextBox38)
Range("D5").Offset(38, 0) = Val(UserForm1.TextBox39)
Range("D5").Offset(39, 0) = Val(UserForm1.TextBox40)
End If




MsgBox "Opération Enregistée", vbInformation, T
Unload Me
UserForm1.Show
EndSub



Merci
H@nnoun
 
M

myDearFriend

Guest
Bonsoir H@NNOUN, Lord Nelson, galopin01, le Forum


H@NNOUN, à vrai dire, je n'ai pas tout compris dans ton code, mais dans l'hypothèse où la répartition des codes MTp s'étale de la colonne D à AG pour une valeur de 6280 à 6309 (et non "6709" comme tu le précises dans ton premier post), tu peux peut-être essayer le code ci-dessous dans lequel je me suis efforcé de traduire ce que tu souhaitais dans ton dernier post (sans pouvoir tester toutefois !) :

Private Sub Valider_Click()
Dim MTp As Integer
Dim L As Byte, C As Byte

   'Détermination de la colonne (de D à AG)
   MTp = Val(ComboBox9.Value)
   C = MTp - 6276
   With UserForm1
      'Complétude de la ligne 29
      Cells(29, C) = Val(.TextBox41)
      'Complétude de la ligne 5
      If Not IsNumeric(TextBox2) Then
         Cells(5, C) = ""
      Else
         Cells(5, C) = Val(.TextBox2)
      End If
      'Complétude des lignes de 6 à 25, 30 et de 34 à 44.
      For L = 1 To 39
         Select Case L
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Case Is < 21
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Cells(5 + L, C) = Val(.Controls("TextBox" & CStr(L + 2)).Text)
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Case 25
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Cells(5 + L, C) = Val(.Controls("TextBox" & CStr(L - 2)).Text)
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Case Is > 28
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Cells(5 + L, C) = Val(.Controls("TextBox" & CStr(L + 1)).Text)
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;End Select
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Next L
&nbsp;&nbsp;&nbsp;End With

&nbsp;&nbsp;&nbsp;MsgBox "Opération Enregistée", vbInformation, T
&nbsp;&nbsp;&nbsp;Unload Me
End Sub


Cordialement.

Didier_mDF
myDearFriend-3.gif
 
H

H@nnoun

Guest
Bonjour le forum Bonjour MyDearFriends

Merci pour ta reponse j'ai teste ton idee cela fonctionne a condition que la valeur soit de 6280 à 6309

mais mes numero de machine ne suivent pas voici un echantillon 6280
6281,6305,6310,6311,6312,6313,6317,6314,6316,6318,6321,6326,6327,
6328,6329,6330,6333,6334,6335,6336,6360,6361,6363,6370,6404,6405,
6406,6407,6756

et la liste va encore s'allonge c'est pourquoi j'ai demande de l'aide je savai qu'il y avait des cracks de VBA sur XLD

MERCI POUR TON AIDE

@++
H@nnoun
 
H

H@nnoun

Guest
Re Bonjour le forum Re Bonjour MyDearFriends

MyDearFriends
ton code fonctionne tres bien
J'ai contourné le probleme de ma liste de machine j'ai ajouté un textbox que je masque
dans lequelle je recupere le numero corespondant de 6280 à 6309 l'operateur selectionne 6317 dans le combobox9 et dans le textbox s'affiche 6287 caché
et mes donnees saisie alimentent la colonne 6317 comme prevu

une petite question dans le code tu met MTP=-6276 a quoi correspond 6276

Merci encore pour ton aide ma feuille de procedure c'est bien allegée

@@@++++

H@nnoun
 
M

myDearFriend

Guest
Bonjour H@nnoun, le Forum.


A quoi correspond 6276 ?

Tout simplement : si la série commence par 6280 et que je souhaite répartir cette série en colonnes avec comme point de départ la colonne "D" (c'est à dire la colonne 4 !), je considère donc que la première colonne du tableau correspond à 6276 + 1 unité, la deuxième à 6276 + 2 unités et ainsi de suite...
En colonne 4, on aura donc : 6276 + 4 unités, soit 6280.

Evidemment, cette façon de faire n'est valable que si, et seulement si, les nombres de la série se suivent et s'incrémentent d'une unité à chaque fois... ce qui n'est apparamment pas ton cas.


Cordialement.

Didier_mDF
myDearFriend-3.gif
 
H

H@nnoun

Guest
Bonsoir MyDearFriends le forum

Merci pour tes explications je vais pouvoir appliquer ce code pour d'autre application du meme genre

comme je te l'ai dis plus haut dans le fil j'ai contourne en ajoutant une ligne au dessus des titres que je masque et un texbox masque qui fait reference et ça marche

Si tu n'ete pas la pour m'aider il aurait fallu t'inventer
encore MERCI pour ton aide vous etes les AS de l'XLD

@@++ H@nnoun
 

Discussions similaires