Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

Suivre Pas à Pas impossible complétement

3 réponses
Avatar
Fredo P.
Bonjour,
Sur le code qui suit de la feuille "Init" j'ai indiqué la ligne ou
l'exécution est interrompue, la création de l'objet "Combobox" s'est bien
réalisé sur la feuille "Commandes" mais pas le reste du code. En remplaçant
on error resume next par un on error Goto l'objet n'est plus créé j'ai une
erreur 9 sur la ligne suivante.

Private Sub Worksheet_Change(ByVal Target As Range)
Dim Lg%, Cl%, Rep As Byte
Dim Nbcomb As Byte, PosL&, PosC&, Ole As OLEObject
Dim Code$
On Error Resume Next
Lg = Target.Row
Cl = Target.Column
Nbcomb = Sheets("commandes").OLEObjects.Count
If Lg > 2 And Target <> "" Then
MacInit
ElseIf Lg = 2 And (Cl = ClAnt Or Cl - 1 > Nbcomb - 3) And Target <> ""
Then
Rep = MsgBox("Confirmez (" & Cells(Lg, Cl) & ") ajouté en catégorie
supplémentaire.", vbYesNo)
If Rep = 6 Then
enaF

With ActiveWorkbook.Sheets("commandes")
PosL = .OLEObjects(Nbcomb).Left
PosC = .OLEObjects(Nbcomb).Top + .OLEObjects(Nbcomb).Height

Lg = .[C100].End(3).Row
.Row(Lg + 1).Format = .Row(Lg).Format
Set Ole = .OLEObjects.Add(ClassType:="Forms.Combobox.1", _
Link:=False, DisplayAsIcon:=False,
Left:=PosL, Top:=PosC, _
Width:=.OLEObjects(Nbcomb).Width,
Height:=.OLEObjects(Nbcomb).Height)
'à partir d'ici le code n'est plus exécuté.
Code = "Private Sub ComboBobox" & Nbcomb + 1 & "_Change()" &
vbCrLf
Code = Code & " Enreg " & Nbcomb & vbCrLf
Code = Code & "End Sub"
With
ActiveWorkbook.VBProject.VBComponents(Sheets("Commandes")).CodeModule
.insertlines .CountOfLines + 1, Code
End With
.Range("C" & Lg & ":T" & Lg).Copy
.Range("C" & Lg + 1).PasteSpecial Paste:=xlPasteFormats,
Operation:=xlNone, _
SkipBlanks:=False,
Transpose:=False
.Range("D19").Select
.Cells(Lg + 1, 3) = Target

End With

enaT
End If
End If
End Sub

3 réponses

Avatar
Michd
Bonjour,
Dans cette section de ton code :
Code = "Private Sub ComboBobox" & Nbcomb + 1 & "_Change()" & vbCrLf
Code = Code & " Enreg " & Nbcomb & vbCrLf
Code = Code & "End Sub"
With ThisWorkbook.VBProject.VBComponents("Feuil1").CodeModule
.insertlines .CountOfLines + 1, Code
End with
En VBA, les objets "Feuilles" sont listés de cette manière : Exemple :
Feuil1(Commandes)
A ) Feuil1 représente la propriété "Name" de l'objet Worksheet
B ) Commandes représente le nom de l'onglet de la feuille de calcul.
Observe, dans cette ligne de code, tu dois utiliser la propriété "Name" de
l'objet Worksheet, comme ceci :
With ThisWorkbook.VBProject.VBComponents("Feuil1").CodeModule
J'ai supposé que le reste de ton code était bon...je n'ai pas testé!
MichD
Avatar
Michd
Non lié à cette question,
De façon générale, je te suggère d'utiliser la propriété d'un objet VBA comme "Feuil1" ou une
variable objet dont tu as pris le soin de définir le type.
Exemple : dim Rg As Range, Wk As Workbook, MaFeuille As Worksheet...
Cela te donne aux moins 3 avantages :
A ) L'exécution du code est plus rapide. Comme la puissance des ordinateurs s'est améliorée et que
généralement nos procédures sont courtes et "simples", ce n'est pas réellement perceptible!
B ) Lorsque tu utilises ce que j'ai spécifié, dès que tu tapes le "point" après le nom de la
variable objet, tu as une liste déroulante des propriétés et méthodes associées à cet objet. Nul
besoin de les apprendre par coeur ou de chercher.
C ) L'usage des listes déroulantes évite les erreurs d'orthographe dans le code.
Exemple :
Liste déroulante absente des propriétés lors de la saisie du code
'-------------------------------
With Worksheets("Feuil1")
.Range("A1").
End With
'-------------------------------
Avec liste déroulante :
'-------------------------------
Dim Sh as worksheet
Set sh = Worksheets("Feuil1")
With sh
.range("A1").
End With
'-------------------------------
MichD
Avatar
Michd
Autre avantage dans le cas de la feuille de calcul, l'utilisation de la propriété "Name" de l'objet
permet à l'usager de modifier le nom de l'onglet de la feuille sans aucun impact au niveau de
l'exécution du code.
MichD