Précédent   Forum des professionnels en informatique > Logiciels > Microsoft Office > Excel > Macros et VBA Excel
Macros et VBA Excel Vos questions relatives aux macros Excel, à l'utilisation de VBA et à l'automatisation de vos classeurs Excel.
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 24/11/2011, 21h57   #1
Candidat au titre de Membre du Club
 
Inscription : juin 2011
Messages : 122
Détails du profil
Informations forums :
Inscription : juin 2011
Messages : 122
Points : 13
Points : 13
Par défaut Initialisation à l'ouverture de l'userform

Bonsoir.
J'utilise un Userform composé de 13 Textbox. Je souhaite que ma première Texbox soit alimentée à l'ouverture de l'userform par une des cellules de la colonne "c".
Mon code commence toujours à la "A" même si je change la valeur de i. Comment puis je faire svp pour commencer à la colonne "c"?

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
Private Sub UserForm_Initialize()
Dim hWnd As Long
Dim lig As String
hWnd = FindWindowA("Thunder" & IIf(Application.Version Like "8*", _
"X", "D") & "Frame", Me.Caption)
SetWindowLongA hWnd, -16, GetWindowLongA(hWnd, -16) And &HFFF7FFFF
' Chargement des valeurs de la Feuil1 dans les TextBox et les ComboBox
With Sheets("BASE")
lig = ActiveCell.Row
    For i = 1 To 13 ' boucle sur les contrôles
        If (i = 1 Or i = 2 Or i = 3 Or i = 4 Or i = 5 Or i = 6 Or i = 7 Or i = 8 Or i = 9 Or i = 10 Or i = 11 Or i = 12 Or i = 13) And .Cells(lig, i) <> "" Then
        Me.Controls("TextBox" & i) = .Cells(lig, i)
        End If
    Next i
End With
End Sub
Fred4345 est déconnecté   Envoyer un message privé Réponse avec citation 01
Vieux 24/11/2011, 22h06   #2
Expert Confirmé Sénior
 
Avatar de jfontaine
 
Homme Jérôme FONTAINE
Contrôleur de Gestion
Inscription : juin 2006
Messages : 3 912
Détails du profil
Informations personnelles :
Nom : Homme Jérôme FONTAINE
Âge : 38
Localisation : France, Sarthe (Pays de la Loire)

Informations professionnelles :
Activité : Contrôleur de Gestion

Informations forums :
Inscription : juin 2006
Messages : 3 912
Points : 7 214
Points : 7 214
Bonjour,

J'ai du mal a comprendre pourquoi tu mets un test pour vérifier que i est bien entre 1 et 13 étant donné que tu te trouves dans une boucle for qui boucle entre 1 et 13!!

Si tu veux démarrer sur la colonne C, démarre ta boucle à 3 jusqu'a 16.
Code :
1
2
3
4
5
6
7
8
With Sheets("BASE")
lig = ActiveCell.Row
    For i = 3 To 16 ' boucle sur les contrôles
        If .Cells(lig, i) <> "" Then
        Me.Controls("TextBox" & i - 2) = .Cells(lig, i)
        End If
    Next i
End With
__________________
Jérôme

Citation:
"Ils ne savaient pas que c'était impossible, alors ils l'ont fait" - Marc Twain
Si la réponse répond à votre besoin, votre vote nous encouragera.
Dans le cas ou la réponse mérite, à vos yeux, un , nous faire partager la raison de ce vote, pourrait nous permettre de nous améliorer.
jfontaine est actuellement connecté   Envoyer un message privé Réponse avec citation 10
Vieux 24/11/2011, 22h19   #3
Candidat au titre de Membre du Club
 
Inscription : juin 2011
Messages : 122
Détails du profil
Informations forums :
Inscription : juin 2011
Messages : 122
Points : 13
Points : 13
J'utilise un autre userform pour lancer celui ci. Voici le code. J'ai mis ton code et maintenant il bug sur la ligne pour ouvrir l'userform à la ligne 14?

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
Private Sub CommandButton2_Click()
Dim mot As String
Dim trouvé1
mot = TextBox2.Value
Worksheets("base").Activate
On Error GoTo 0
Set trouvé1 = Worksheets("BASE").Range("C2:C400").Find(what:=mot)
If trouvé1 Is Nothing Then
MsgBox "Produit inconnu !": Exit Sub
End If
If Not trouvé1 Is Nothing Then
trouvé1.Activate
Unload Me
modifbase.Show
End If
End Sub
Et pour répondre à ta question, je débute depuis 1 mois et quand je commence à penser que j'ai compris et bien en faite c'est l'inverse. J'ai toujours rien compris!
Fred4345 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 24/11/2011, 22h21   #4
Expert Confirmé Sénior
 
Avatar de jfontaine
 
Homme Jérôme FONTAINE
Contrôleur de Gestion
Inscription : juin 2006
Messages : 3 912
Détails du profil
Informations personnelles :
Nom : Homme Jérôme FONTAINE
Âge : 38
Localisation : France, Sarthe (Pays de la Loire)

Informations professionnelles :
Activité : Contrôleur de Gestion

Informations forums :
Inscription : juin 2006
Messages : 3 912
Points : 7 214
Points : 7 214
Quel message d'erreur?
__________________
Jérôme

Citation:
"Ils ne savaient pas que c'était impossible, alors ils l'ont fait" - Marc Twain
Si la réponse répond à votre besoin, votre vote nous encouragera.
Dans le cas ou la réponse mérite, à vos yeux, un , nous faire partager la raison de ce vote, pourrait nous permettre de nous améliorer.
jfontaine est actuellement connecté   Envoyer un message privé Réponse avec citation 00
Vieux 24/11/2011, 22h28   #5
Candidat au titre de Membre du Club
 
Inscription : juin 2011
Messages : 122
Détails du profil
Informations forums :
Inscription : juin 2011
Messages : 122
Points : 13
Points : 13
Erreur d'exécution
Objet spécifié introuvable
Fred4345 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 24/11/2011, 22h35   #6
Expert Confirmé Sénior
 
Avatar de Qwazerty
 
Homme Stéphane
La très haute tension :D
Inscription : avril 2002
Messages : 2 446
Détails du profil
Informations personnelles :
Nom : Homme Stéphane
Âge : 32
Localisation : France

Informations professionnelles :
Activité : La très haute tension :D
Secteur : Service public

Informations forums :
Inscription : avril 2002
Messages : 2 446
Points : 4 620
Points : 4 620
Envoyer un message via MSN à Qwazerty
Citation:
Envoyé par Fred4345 Voir le message
Et pour répondre à ta question, je débute depuis 1 mois et quand je commence à penser que j'ai compris et bien en faite c'est l'inverse. J'ai toujours rien compris!
Salut

L'idéal serait peut-être de commencer par les bases, en regardant par exemple les structure If ElseIf Else End If...

La déclaration des variables également
Tu devrais éviter de mettre des accents, essai également de toujours mettre au moins une majuscule pour pouvoir contrôler ce que tu tapes.

Regarde du coté des tutoriels mis à disposition, ils sont là pour t'aider à débuter.

++
Qwaz
__________________

MagicQwaz := Harry Potter la baguette en moins
Le monde dans lequel on vit
HammerFest
Ma page perso DVP - Dernier Tutoriel : VBA & Internet Explorer
Qwazerty est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 24/11/2011, 22h36   #7
Expert Confirmé Sénior
 
Avatar de jfontaine
 
Homme Jérôme FONTAINE
Contrôleur de Gestion
Inscription : juin 2006
Messages : 3 912
Détails du profil
Informations personnelles :
Nom : Homme Jérôme FONTAINE
Âge : 38
Localisation : France, Sarthe (Pays de la Loire)

Informations professionnelles :
Activité : Contrôleur de Gestion

Informations forums :
Inscription : juin 2006
Messages : 3 912
Points : 7 214
Points : 7 214
J'ai du mal a comprendre le lien entre ma proposition de code et ce plantage.

est ce que
lance
Code :
Private Sub UserForm_Initialize()
__________________
Jérôme

Citation:
"Ils ne savaient pas que c'était impossible, alors ils l'ont fait" - Marc Twain
Si la réponse répond à votre besoin, votre vote nous encouragera.
Dans le cas ou la réponse mérite, à vos yeux, un , nous faire partager la raison de ce vote, pourrait nous permettre de nous améliorer.
jfontaine est actuellement connecté   Envoyer un message privé Réponse avec citation 00
Vieux 24/11/2011, 23h06   #8
Candidat au titre de Membre du Club
 
Inscription : juin 2011
Messages : 122
Détails du profil
Informations forums :
Inscription : juin 2011
Messages : 122
Points : 13
Points : 13
Oui normalement ça le lance.

Bonsoir Qwazerty. C'est bien là le problème. Je les ai même imprimé les tutos. J'ai bien compris que cela vient de la boucle. Mais j'ai vraiment du mal à piger le système des boucles!

Voici tout le code utilisé dans mon userform. i est déclaré dans la partie public. Cet userform doit me servir pour modifier une base. J'ai modifié l'initialisation en adaptant le code de jérôme au mien. Les Textbox sont maintenant bien chargé à l'ouverture.
Par contre lorsque je fais une modification et que je valide avec le CommandButton4_Click ça bug à la ligne N°36?
Je souhaite que les valeurs des Textbox remplissent les cellules avec les modifications.
Le CommandButton5 sert à supprimer les valeurs dans les cellules.


Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
Private Declare Function GetWindowLongA Lib "User32" _
(ByVal hWnd As Long, ByVal nIndex As Long) As Long
 
Private Declare Function SetWindowLongA Lib "User32" _
(ByVal hWnd As Long, ByVal nIndex As Long, _
ByVal dwNewLong As Long) As Long
 
Private Declare Function FindWindowA Lib "User32" _
(ByVal lpClassName As String, ByVal lpWindowName As String) As Long
Option Compare Text
Option Explicit
Dim i As Byte
Private Sub CommandButton3_Click()
Unload Me
' ActiveSheet.Protect "*69*", UserInterfaceOnly:=True
Sheets("Gestion bobine").Select
End Sub
 
Private Sub CommandButton4_Click()
Dim lig
If TextBox1.Value = "" Then MsgBox "Format invalide !": Exit Sub
If TextBox2.Value = "" Then MsgBox "Format invalide !": Exit Sub
If TextBox3.Value = "" Then MsgBox "Format invalide !": Exit Sub
If TextBox4.Value = "" Then MsgBox "Format invalide !": Exit Sub
If TextBox5.Value = "" Then MsgBox "Format invalide !": Exit Sub
If TextBox6.Value = "" Then MsgBox "Format invalide !": Exit Sub
If TextBox7.Value = "" Then MsgBox "Format invalide !": Exit Sub
If TextBox8.Value = "" Then MsgBox "Format invalide !": Exit Sub
If TextBox9.Value = "" Then MsgBox "Format invalide !": Exit Sub
If TextBox10.Value = "" Then MsgBox "Format invalide !": Exit Sub
If TextBox11.Value = "" Then MsgBox "Format invalide !": Exit Sub
 
With Sheets("BASE")
For i = 3 To 16 ' boucle sur les contrôles
    If i = 1 Or i = 2 Or i = 3 Or i = 4 Or i = 5 Or i = 6 Or i = 7 Or i = 8 Or i = 9 Or i = 10 Or i = 11 Then
    .Cells(lig, i) = Me.Controls("TextBox" & i - 2).Value
    End If
Next i
End With
Unload Me
'ActiveSheet.Protect "*69*", UserInterfaceOnly:=True
Sheets("Gestion bobine").Select
'ActiveWorkbook.Save
End Sub
 
 
Private Sub CommandButton5_Click()
Dim lig
TextBox1.Value = ""
TextBox2.Value = ""
TextBox3.Value = ""
TextBox4.Value = ""
TextBox5.Value = ""
TextBox6.Value = ""
TextBox7.Value = ""
TextBox8.Value = ""
TextBox9.Value = ""
TextBox10.Value = ""
TextBox11.Value = ""
 
With Sheets("BASE")
For i = 3 To 16 ' boucle sur les contrôles
    If i = 1 Or i = 2 Or i = 3 Or i = 4 Or i = 5 Or i = 6 Or i = 7 Or i = 8 Or i = 9 Or i = 10 Or i = 11 Then
    .Cells(lig, i) = Me.Controls("TextBox" & i - 2).Value
    End If
Next i
End With
Unload Me
'ActiveSheet.Protect "*69*", UserInterfaceOnly:=True
Sheets("Gestion bobine").Select
'ActiveWorkbook.Save
End Sub
 
Private Sub UserForm_Initialize()
Dim hWnd As Long
Dim lig As String
hWnd = FindWindowA("Thunder" & IIf(Application.Version Like "8*", _
"X", "D") & "Frame", Me.Caption)
SetWindowLongA hWnd, -16, GetWindowLongA(hWnd, -16) And &HFFF7FFFF
'Chargement des valeurs de la Feuil1 dans les TextBox et les ComboBox
With Sheets("BASE")
lig = ActiveCell.Row
    For i = 3 To 16 ' boucle sur les contrôles
        If (i = 1 Or i = 2 Or i = 3 Or i = 4 Or i = 5 Or i = 6 Or i = 7 Or i = 8 Or i = 9 Or i = 10 Or i = 11 Or i = 12 Or i = 13) And .Cells(lig, i) <> "" Then
        Me.Controls("TextBox" & i - 2) = .Cells(lig, i)
        End If
    Next i
End With
 
End Sub
Fred4345 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 25/11/2011, 06h05   #9
Expert Confirmé Sénior
 
Avatar de Qwazerty
 
Homme Stéphane
La très haute tension :D
Inscription : avril 2002
Messages : 2 446
Détails du profil
Informations personnelles :
Nom : Homme Stéphane
Âge : 32
Localisation : France

Informations professionnelles :
Activité : La très haute tension :D
Secteur : Service public

Informations forums :
Inscription : avril 2002
Messages : 2 446
Points : 4 620
Points : 4 620
Envoyer un message via MSN à Qwazerty
Citation:
J'ai modifié l'initialisation en adaptant le code de jérôme au mien
Salut
Désolé mais tu n'as pas adapté sont code, tu as remis ce que tu utilisais avant...

jfontaine t'a fait remarqué que
Code :
If (i = 1 Or i = 2 Or i = 3 Or i = 4 Or i = 5 Or i = 6 Or i = 7 Or i = 8 Or i = 9 Or i = 10 Or i = 11 Or i = 12 Or i = 13)
ne servait a rien, pourquoi fais tu ce teste?

Citation:
Envoyé par Fred4345 Voir le message
que je valide avec le CommandButton4_Click ça bug à la ligne N°36?
Quel message d'erreur?
Si tes textbox sont numéroté de 1 à 11 comme il semblerait que ce soit le cas
il faut alors modifier la boucle For pour faire varier i de 3 à 13
Code :
1
2
3
4
5
6
7
8
9
10
With Sheets("BASE")
lig = ActiveCell.Row
    'On fait varier i de 3 à 13
    For i = 3 To 13 
        If .Cells(lig, i) <> "" Then
        'ici le numero du textbox correspond = i-2 donc 3-2=1 à 13-2=11, on ira donc bien du textbox1 au textbox11
        Me.Controls("TextBox" & i - 2) = .Cells(lig, i)
        End If
    Next i
End With
Le contenu des textbox va correspondre à
pour i = 3
textbox1(3-2) = cellule de la ligne lig et de la colonne 3 (valeur de i)
pour i = 4
textbox2(4-2) = cellule de la ligne lig et de la colonne 4 (valeur de i)
pour i = 5
textbox3(5-2) = cellule de la ligne lig et de la colonne 5 (valeur de i)
ainsi de suite

Est ce bien le comportement attendu?

Pour cette partie du code
Code :
1
2
3
4
5
6
7
8
9
10
11
If TextBox1.Value = "" Then MsgBox "Format invalide !": Exit Sub
If TextBox2.Value = "" Then MsgBox "Format invalide !": Exit Sub
If TextBox3.Value = "" Then MsgBox "Format invalide !": Exit Sub
If TextBox4.Value = "" Then MsgBox "Format invalide !": Exit Sub
If TextBox5.Value = "" Then MsgBox "Format invalide !": Exit Sub
If TextBox6.Value = "" Then MsgBox "Format invalide !": Exit Sub
If TextBox7.Value = "" Then MsgBox "Format invalide !": Exit Sub
If TextBox8.Value = "" Then MsgBox "Format invalide !": Exit Sub
If TextBox9.Value = "" Then MsgBox "Format invalide !": Exit Sub
If TextBox10.Value = "" Then MsgBox "Format invalide !": Exit Sub
If TextBox11.Value = "" Then MsgBox "Format invalide !": Exit Sub
Tu devrais utiliser la même structure de boucle for

Code :
1
2
3
4
5
6
7
With Sheets("BASE")
lig = ActiveCell.Row
    'On fait varier i de 3 à 13
    For i = 3 To 13 
        if Me.Controls("TextBox" & i - 2) = "" then MsgBox "Format invalide !": Exit Sub
    Next i
End With
Dans CommandButton5_Click()
Je ne comprend pas, tu vides tes TextBox, puis tu renseigne tes cellules avec le contenu (vide) des TextBox, c'est pour le moins étrange non?

Ceci dit, même chose ici tu peux réutiliser une boucle avec cette fois une variation de 1 à 11, qui sera plus pratique pour nos besoin actuel (on ne fait plus référence aux cellules
Code :
1
2
3
4
5
6
7
8
With Sheets("BASE")
lig = ActiveCell.Row
    'Cette fois on fait directement varier de 1 à 11
    For i = 1 To 11 
        'on utilise donc ici directement la valeur de i pour construire le nom du TextBox
        Me.Controls("TextBox" & i) = "" 
    Next i
End With
Remet un peut d'ordre dans ton code en tenant compte de ces remarques et poste le résultat avec n° de ligne et message d'erreur si besoin stp.

++
Qwaz
__________________

MagicQwaz := Harry Potter la baguette en moins
Le monde dans lequel on vit
HammerFest
Ma page perso DVP - Dernier Tutoriel : VBA & Internet Explorer
Qwazerty est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 25/11/2011, 16h55   #10
Candidat au titre de Membre du Club
 
Inscription : juin 2011
Messages : 122
Détails du profil
Informations forums :
Inscription : juin 2011
Messages : 122
Points : 13
Points : 13
Bonjour.

Citation:
tu as remis ce que tu utilisais avant
J'ai remis ce que j'avais utilisé comme code mais en me servant de la proposition de jfontaine pour le faire fonctionner en partie.

et
Code :
Me.Controls("TextBox" & i - 2)
J'utilise finalement 7 textbox.
J'ai bien compris que i me sert à déterminer la colonne (et ton explication est très claire, merci ) ou je vais chercher les cellules. Par contre la textbox1 correspond à la colonne C, la 2è à la D, la 3è à la E, la 4è à la F, à partir de la 5è à la colonne H (je saute la G), la 6è à la N, la 7è à la U. D'ou le code :

Code :
If (i = 3 Or i = 4 Or i = 5 Or i = 6 Or i = 8 Or i = 14 Or i = 19 )
Mais ça ne fonctionne pas!

Pour le vidage de mes textbox et ensuite l'affectation au cellule, mon but est de supprimer les produits qui me sont inutiles dans la feuille. J'aurai peut être dut essayer de faire une suppression de la ligne. Mais pour l'instant je n'ai pas vraiment le niveau pour le faire.

J'espère que tu comprends ma recherche avec cette nouvelle explication.

Voici mon code modifié. Je charge bien les 4 premières textbox, mais pas les autres?

La fonction de vidage par contre fonctionne également sur mes 4 premières textbox.

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
Private Declare Function GetWindowLongA Lib "User32" _
(ByVal hWnd As Long, ByVal nIndex As Long) As Long
 
Private Declare Function SetWindowLongA Lib "User32" _
(ByVal hWnd As Long, ByVal nIndex As Long, _
ByVal dwNewLong As Long) As Long
 
Private Declare Function FindWindowA Lib "User32" _
(ByVal lpClassName As String, ByVal lpWindowName As String) As Long
Option Compare Text
Option Explicit
 
Dim i As Byte
Dim lig As String
Private Sub CommandButton3_Click()
Unload Me
' ActiveSheet.Protect "*69*", UserInterfaceOnly:=True
Sheets("Gestion bobine").Select
End Sub
 
Private Sub CommandButton4_Click()
 
lig = ActiveCell.Row
 
If TextBox1.Value = "" Then MsgBox "Format invalide !": Exit Sub
If TextBox2.Value = "" Then MsgBox "Format invalide !": Exit Sub
If TextBox3.Value = "" Then MsgBox "Format invalide !": Exit Sub
If TextBox4.Value = "" Then MsgBox "Format invalide !": Exit Sub
If TextBox5.Value = "" Then MsgBox "Format invalide !": Exit Sub
If TextBox6.Value = "" Then MsgBox "Format invalide !": Exit Sub
If TextBox7.Value = "" Then MsgBox "Format invalide !": Exit Sub
 
With Sheets("BASE")
For i = 3 To 20 ' boucle sur les contrôles
    If i = 3 Or i = 4 Or i = 5 Or i = 6 Or i = 8 Or i = 14 Or i = 19 Then
    .Cells(lig, i) = Me.Controls("TextBox" & i - 2).Value
    End If
Next i
End With
Unload Me
'ActiveSheet.Protect "*69*", UserInterfaceOnly:=True
Sheets("Gestion bobine").Select
'ActiveWorkbook.Save
End Sub
 
 
Private Sub CommandButton5_Click()
 
With Sheets("BASE")
lig = ActiveCell.Row
    'Cette fois on fait directement varier de 1 à 11
    For i = 1 To 7
        'on utilise donc ici directement la valeur de i pour construire le nom du TextBox
        Me.Controls("TextBox" & i) = ""
    Next i
End With
 
'ActiveSheet.Protect "*69*", UserInterfaceOnly:=True
Sheets("Gestion bobine").Select
'ActiveWorkbook.Save
End Sub
 
Private Sub UserForm_Initialize()
Dim hWnd As Long
hWnd = FindWindowA("Thunder" & IIf(Application.Version Like "8*", _
"X", "D") & "Frame", Me.Caption)
SetWindowLongA hWnd, -16, GetWindowLongA(hWnd, -16) And &HFFF7FFFF
'Chargement des valeurs de la Feuil1 dans les TextBox et les ComboBox
With Sheets("BASE")
lig = ActiveCell.Row
    For i = 3 To 7 ' boucle sur les contrôles
       If (i = 3 Or i = 4 Or i = 5 Or i = 6 Or i = 8 Or i = 14 Or i = 19) And .Cells(lig, i) <> "" Then
        Me.Controls("TextBox" & i - 2) = .Cells(lig, i)
        End If
    Next i
End With
 
End Sub
Fred4345 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 25/11/2011, 23h53   #11
Expert Confirmé Sénior
 
Avatar de Qwazerty
 
Homme Stéphane
La très haute tension :D
Inscription : avril 2002
Messages : 2 446
Détails du profil
Informations personnelles :
Nom : Homme Stéphane
Âge : 32
Localisation : France

Informations professionnelles :
Activité : La très haute tension :D
Secteur : Service public

Informations forums :
Inscription : avril 2002
Messages : 2 446
Points : 4 620
Points : 4 620
Envoyer un message via MSN à Qwazerty
Salut

Voila une de tes macros modifiée, désolé j'aurais du voir le coup des Or la queue leuleu.

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
Private Sub CommandButton4_Click()
Dim Lig As Long
Dim ListCellule
 
Lig = ActiveCell.Row
 
If (TextBox1.Value = "") Or (TextBox2.Value = "") Or (TextBox3.Value = "") Or (TextBox4.Value = "") Or (TextBox5.Value = "") Or (TextBox6.Value = "") Or (TextBox7.Value = "") Then
   MsgBox "Format invalide !"
   Exit Sub
End If
 
'On cré la liste des numéro de colonne qui seront utilisé pour renseigner les TextBox
ListCellule = Array(3, 4, 5, 6, 8, 14, 19)
 
With Sheets("BASE")
    'Il n'est pas possible de boucler de 3 à 20 car lorsque ton if i=19 par exemple est vrai le textebox i-2=17 n'existe pas
    'Pour chaque textbox on va donc chercher la colonne qui recoit l'info
    For i = 1 To 6
        'Par exemple quand i vaut 3, la valeur correspondante dans ListCellule est 5,
        'on modifie donc la valeur contenu dans la 5eme colonne en lui donnant la valeur contenu dans le TextBox3 (i=3)
        .Cells(Lig, ListCellule(i)) = Me.Controls("TextBox" & i).Value
    Next i
End With
 
Unload Me
++
Qwaz
__________________

MagicQwaz := Harry Potter la baguette en moins
Le monde dans lequel on vit
HammerFest
Ma page perso DVP - Dernier Tutoriel : VBA & Internet Explorer
Qwazerty est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 26/11/2011, 13h38   #12
Candidat au titre de Membre du Club
 
Inscription : juin 2011
Messages : 122
Détails du profil
Informations forums :
Inscription : juin 2011
Messages : 122
Points : 13
Points : 13
Bonjour.

Merci pour le cours. Avec les commentaires et l'aide de vba je comprends mieux le code de la macro.
Par contre je ne peux pas tester car je suis toujours occupé à chercher comment initialiser l'userform et alimenter mes textbox.
Fred4345 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 26/11/2011, 14h32   #13
Expert Confirmé Sénior
 
Avatar de Qwazerty
 
Homme Stéphane
La très haute tension :D
Inscription : avril 2002
Messages : 2 446
Détails du profil
Informations personnelles :
Nom : Homme Stéphane
Âge : 32
Localisation : France

Informations professionnelles :
Activité : La très haute tension :D
Secteur : Service public

Informations forums :
Inscription : avril 2002
Messages : 2 446
Points : 4 620
Points : 4 620
Envoyer un message via MSN à Qwazerty
Salut
Peut-être avec petit effort d'adaptation.

Code :
1
2
3
4
5
6
7
8
9
10
11
12
'On crée la liste des numéros de colonnes qui seront utilisés pour renseigner les TextBox
ListCellule = Array(3, 4, 5, 6, 8, 14, 19)
 
With Sheets("BASE")
 
    'Pour chaque textbox on va donc chercher la colonne qui recoit l'info
    For i = 1 To 6
       'on modifie donc la valeur contenu dans la 5eme colonne en lui donnant la valeur contenu dans le TextBox3 (i=3)
        '.Cells(Lig, ListCellule(i)) = Me.Controls("TextBox" & i).Value
        Me.Controls("TextBox" & i).Value = .Cells(Lig, ListCellule(i))
    Next i
End With
Pas testé.

++
Qwaz
__________________

MagicQwaz := Harry Potter la baguette en moins
Le monde dans lequel on vit
HammerFest
Ma page perso DVP - Dernier Tutoriel : VBA & Internet Explorer
Qwazerty est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 26/11/2011, 16h09   #14
Candidat au titre de Membre du Club
 
Inscription : juin 2011
Messages : 122
Détails du profil
Informations forums :
Inscription : juin 2011
Messages : 122
Points : 13
Points : 13
Les textbox ne se remplissent pas avec les bonnes colonnes.
Je pense que le problème se situe la:

Code :
.Cells(Lig, ListCellule(i))
mais je ne trouve pas comment le changer.

Je souhaite faire ceci :

Citation:
Par contre la textbox1 correspond à la colonne C, la 2è à la D, la 3è à la E, la 4è à la F, à partir de la 5è à la colonne H (je saute la G), la 6è à la N, la 7è à la U
Fred4345 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 26/11/2011, 16h30   #15
Expert Confirmé Sénior
 
Avatar de Qwazerty
 
Homme Stéphane
La très haute tension :D
Inscription : avril 2002
Messages : 2 446
Détails du profil
Informations personnelles :
Nom : Homme Stéphane
Âge : 32
Localisation : France

Informations professionnelles :
Activité : La très haute tension :D
Secteur : Service public

Informations forums :
Inscription : avril 2002
Messages : 2 446
Points : 4 620
Points : 4 620
Envoyer un message via MSN à Qwazerty
Sauf erreur de ma part c'est ce que fait le code.

Ecoute, on va pas s'agacer, met un fichier en pièce jointe on gagnera du temps.

Avant d'envoyer, essai comme ça

Code :
.Cells(Lig, ListCellule(i-1))
++
Qwaz
__________________

MagicQwaz := Harry Potter la baguette en moins
Le monde dans lequel on vit
HammerFest
Ma page perso DVP - Dernier Tutoriel : VBA & Internet Explorer
Qwazerty est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 26/11/2011, 16h42   #16
Candidat au titre de Membre du Club
 
Inscription : juin 2011
Messages : 122
Détails du profil
Informations forums :
Inscription : juin 2011
Messages : 122
Points : 13
Points : 13
Voici le lien. J'espère que tu vas comprendre mon usine à gaz. J'aurai peut être dut retirer ce qui ne fonctionne pas encore!

http://dl.free.fr/vJ8Gqt29y
Fred4345 est déconnecté   Envoyer un message privé Réponse avec citation 01
Vieux 26/11/2011, 16h56   #17
Expert Confirmé Sénior
 
Avatar de Qwazerty
 
Homme Stéphane
La très haute tension :D
Inscription : avril 2002
Messages : 2 446
Détails du profil
Informations personnelles :
Nom : Homme Stéphane
Âge : 32
Localisation : France

Informations professionnelles :
Activité : La très haute tension :D
Secteur : Service public

Informations forums :
Inscription : avril 2002
Messages : 2 446
Points : 4 620
Points : 4 620
Envoyer un message via MSN à Qwazerty
Salut
J'avais édité mon message au dessus, fais la modif et tu auras le résultat escompté.
++
Qwaz
__________________

MagicQwaz := Harry Potter la baguette en moins
Le monde dans lequel on vit
HammerFest
Ma page perso DVP - Dernier Tutoriel : VBA & Internet Explorer
Qwazerty est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 26/11/2011, 17h04   #18
Candidat au titre de Membre du Club
 
Inscription : juin 2011
Messages : 122
Détails du profil
Informations forums :
Inscription : juin 2011
Messages : 122
Points : 13
Points : 13
Excuse moi!!!
j'avais modifié la mauvaise macro. Oui ça fonctionne!!!
J'avais essayé avec - 2, mais pas avec -1.
Pourquoi ce -1 alors que nous déclarons les colonnes avec
Code :
ListCellule = Array(3, 4, 5, 6, 8, 14, 19)
?

Et toute cette partie de code que je colle bêtement à chaque fois :

Code :
1
2
3
4
5
6
7
8
9
10
Private Declare Function GetWindowLongA Lib "User32" _
(ByVal hWnd As Long, ByVal nIndex As Long) As Long
 
Private Declare Function SetWindowLongA Lib "User32" _
(ByVal hWnd As Long, ByVal nIndex As Long, _
ByVal dwNewLong As Long) As Long
 
Private Declare Function FindWindowA Lib "User32" _
(ByVal lpClassName As String, ByVal lpWindowName As String) As Long
Option Compare Text
D'après toi c'est utile?
Fred4345 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 26/11/2011, 17h11   #19
Expert Confirmé Sénior
 
Avatar de Qwazerty
 
Homme Stéphane
La très haute tension :D
Inscription : avril 2002
Messages : 2 446
Détails du profil
Informations personnelles :
Nom : Homme Stéphane
Âge : 32
Localisation : France

Informations professionnelles :
Activité : La très haute tension :D
Secteur : Service public

Informations forums :
Inscription : avril 2002
Messages : 2 446
Points : 4 620
Points : 4 620
Envoyer un message via MSN à Qwazerty
Oui, ca fonctionne.
Vu que tu utilises ActiveSheet pour déterminer la ligne devant être affichée, tu est bien sur la feuille base au moment de lancer la UserForm?

-1 par ce que le tableau ListCellule est de Base 0, c'est à dire que son premier item est l'item 0, on fait donc i-1 pour commencer à 0 et finir à 5.

Tu utilises les APi que tu sites pour mettre la Userform au 1er plan, ce qui est inutile puisque la Userform est en mode Modal (toujours devant et tu ne peux pas cliquer ailleurs.

Tu peux aussi enlever
Code :
1
2
3
4
Dim hWnd As Long
hWnd = FindWindowA("Thunder" & IIf(Application.Version Like "8*", _
"X", "D") & "Frame", Me.Caption)
SetWindowLongA hWnd, -16, GetWindowLongA(hWnd, -16) And &HFFF7FFFF
++
Qwaz
__________________

MagicQwaz := Harry Potter la baguette en moins
Le monde dans lequel on vit
HammerFest
Ma page perso DVP - Dernier Tutoriel : VBA & Internet Explorer
Qwazerty est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 26/11/2011, 18h12   #20
Candidat au titre de Membre du Club
 
Inscription : juin 2011
Messages : 122
Détails du profil
Informations forums :
Inscription : juin 2011
Messages : 122
Points : 13
Points : 13
Je lance l'userform depuis ma feuille "gestion bobine" avec le bouton1.
J'ai modifié le commandbouton4 avec le -1.
Par contre pour l'effacement des cellules avec le commandbouton5 ne fonctionne pas. Je vide bien les textbox de l'userform, par contre ce n'est pas reporté dans la feuille. Remarque, ça doit être normale car dans la macro je ne vois pas la liaison entre les cellules de ma feuille et les textbox de l'userform.
Pour tous le code en trop, j'avais un doute sur son utilité d'ou ma demande.

Voici le code pour le boutoncommand5. J'ai réussi à trouver. L'élève progresse. Mais pas assez vite à mon goût.
Par contre la textbox7 ne se charge jamais. J'ai placé des espions dans la boucle d'initialisation. Elle passe bien par la colonne 19 mais la valeur ne s'affiche pas. Ensuite on sort de la boucle et la textbox7 ne se charge pas avec la colonne U.
Désolé de t'embêter de nouveau Qwazerty.

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
Private Sub CommandButton5_Click()
 
With Sheets("BASE")
Lig = ActiveCell.Row
Dim ListCellule
ListCellule = Array(3, 4, 5, 6, 8, 14, 19)
    'Cette fois on fait directement varier de 1 à 11
    For i = 1 To 6
        'on utilise donc ici directement la valeur de i pour construire le nom du TextBox
       Me.Controls("TextBox" & i) = ""
        .Cells(Lig, ListCellule(i - 1)) = Me.Controls("TextBox" & i).Value
    Next i
End With
Unload Me
'ActiveSheet.Protect "*69*", UserInterfaceOnly:=True
Sheets("Gestion bobine").Select
'ActiveWorkbook.Save
End Sub
Fred4345 est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 17h52.


 
 
 
 
Partenaires

Hébergement Web