XL 2019 l'indice n'appartient pas à la sélection

farid

XLDnaute Occasionnel
Bonsoirs à vous tous,
j'ai un petit souci avec cette macro.
Je m'explique, cette macro fonctionne vraiment si je laisse les lignes "'Unload UserForm1" et "'UserForm1.Show" fonctionnelle.
Cependant, lorsque je désactive ces 2 lignes à partir d'un bouton sur un userform , j'ai un souci sur la ligne Sheets(CStr(Cells(19 + i, 1))).Delete.
Est-ce possible que la macro puisse fonctionner sans ces deux lignes "'Unload UserForm1" et "'UserForm1.Show" sur un sheets qui se nomme "Résultat".



Private Sub CommandButton2_Click()
'Unload UserForm1
Application.DisplayAlerts = False
For i = 1 To 12
If Cells(19 + i, 4) = "a" And Not Me.Controls("CheckBox" & i) Then
' On Error Resume Next
Sheets(CStr(Cells(19 + i, 1))).Delete
' On Error GoTo 0
Cells(19 + i, 1).ClearContents
Cells(19 + i, 4).ClearContents
Cells(19 + i, 7).ClearContents
End If
Next
Application.DisplayAlerts = False
UserForm_initialize
'UserForm1.Show
End Sub

par avance , merci
 

Eric KERGRESSE

XLDnaute Occasionnel
Bonjour,

Vous ne pouvez pas fermer votre userform si vous utilisez un de ses contrôles (CheckBox) dans le code :
VB:
If Cells(19 + i, 4) = "a" And Not Me.Controls("CheckBox" & i) Then

Pour vous affranchir du userform, il vous faut mémoriser dans une matrice, via une boucle, les valeurs I pour lesquelles le code doit supprimer l'onglet.
 
Dernière édition:

job75

XLDnaute Barbatruc
Bonjour le forum,
Est-ce possible que la macro puisse fonctionner sans ces deux lignes "'Unload UserForm1" et "'UserForm1.Show"
J'ai testé et il n'y a pas de problème quel que soit le mode d'ouverture de l'UserForm.

Bien sur il faut que Cells(19 + i, 1) ne soit pas vide et que la feuille portant ce nom existe.

Que fait la macro UserForm_Initialize ?

A+
 

patricktoulon

XLDnaute Barbatruc
Bonsoir @farid
c'est Quoi ce code?
VB:
Private Sub CommandButton2_Click()
'Unload UserForm1
Application.DisplayAlerts = False
For i = 1 To 12
If Cells(19 + i, 4) = "a" And Not Me.Controls("CheckBox" & i) Then
' On Error Resume Next
Sheets(CStr(Cells(19 + i, 1))).Delete
' On Error GoTo 0
Cells(19 + i, 1).ClearContents
Cells(19 + i, 4).ClearContents
Cells(19 + i, 7).ClearContents
End If
Next
Application.DisplayAlerts = False
UserForm_initialize
'UserForm1.Show
End Sub

1° on ne unload pas avant le reste du code sinon il ne s'execute pas sur certaines version d'ecel , ou génère une erreur d'indice

2° certaines version d'excels (va savoir pour quoi) n’aiment pas l'implicite il faut tester le .value du checkbox explicitement

3° rappeler le initialise est digne d'un débutant
on place le code dans une sub et on l'appelle du initialise et du bouton

bref je suppute que tu veuille réinitialiser ton userform et tes controls vidés sans fermer le userform
c'est bien ca ?

4°et pour finir tu supprime tes feuille dans une boucle croissant
la bonne blague dès le premier délétéet en plus les cellule effacées ;) 🤣


la règle d'or massif 18 cara quand on supprime ou vide des cellules on le fait a reculons
 
Dernière édition:

farid

XLDnaute Occasionnel
bonjour Patrick
en réponse à ta question "
bref je suppute que tu veuille réinitialiser ton userform et tes controls vidés sans fermer le userform
c'est bien ca ?"" c'est bien cela .
merci de ton implication
bonne journée a toi
 

job75

XLDnaute Barbatruc
Bonjour le forum,
la règle d'or massif 18 cara quand on supprime ou vide des cellules on le fait a reculons
Des cellules sans doute mais pas forcément pour des feuilles :
VB:
Sub Spprimer()
Dim sh As Object
Application.DisplayAlerts = False
For Each sh In Sheets
    If sh.Name Like "A*" Then sh.Delete
Next
End Sub
A+
 

Pièces jointes

  • Test.xlsm
    21.2 KB · Affichages: 1

Discussions similaires

Statistiques des forums

Discussions
312 207
Messages
2 086 248
Membres
103 164
dernier inscrit
axelheili2