problème dans écriture macro avec boucles

  • Initiateur de la discussion Initiateur de la discussion elido
  • Date de début Date de début

Boostez vos compétences Excel avec notre communauté !

Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force. Apprenez, échangez, progressez – et tout ça gratuitement ! 👉 Inscrivez-vous maintenant !

elido

XLDnaute Nouveau
Bonjour,
pour contourner un problème de date, j'essaye d'écrire ma macro avec des boucles de cette façon :

Private Sub OK_modif_Click()
'Boucle sur toutes les lignes
i = ListView1.SelectedItem.Index
Cells(i + 1, 1) = ListView1.ListItems(i).Text

'Boucle sur les colonnes '1 To 27
For j = 1 To 3
If Me("Textbox" & j + 1) <> ListView1.ListItems(i).ListSubItems(j).Text Then
ListView1.ListItems(i).ListSubItems(j).Text = Me("Textbox" & j + 1)
Cells(i + 1, j + 1) = ListView1.ListItems(i).ListSubItems(j).Text
End If
Next j

For j = 4 To 4 'car problème inversion jour et mois colonne (date naissance)
If Me("Textbox" & j + 1) <> ListView1.ListItems(i).ListSubItems(j).Text Then
ListView1.ListItems(i).ListSubItems(j).Text = Me("Textbox" & j + 1)
Cells(i + 1, j + 1) = CDate(ListView1.ListItems(i).ListSubItems(j).Text)
End If
Next j

For j = 5 To 27
If Me("Textbox" & j + 1) <> ListView1.ListItems(i).ListSubItems(j).Text Then
ListView1.ListItems(i).ListSubItems(j).Text = Me("Textbox" & j + 1)
Cells(i + 1, j + 1) = ListView1.ListItems(i).ListSubItems(j).Text
End If
Next j

IniListview (InitTableau)

End Sub

les modifs sont enregistrées sur la ligne 2 (ligne 1 = entête du tableau). Que se passe t-il ? Ma macro est-elle correcte ? Y'a t-il un moyen de la raccourcir ?

Merci pour vos réponses
 
Re : problème dans écriture macro avec boucles

Oups message parti trop vite...
En fait mon tableau comporte 27 colonnes, je voudrais donner le format CDate à certaines colonnes pas forcément les contiguës (col E,J, M à W et Z) et pas aux autres.
peut on écrire plus simplement le code ?
 
Re : problème dans écriture macro avec boucles

Re,

En fait mon tableau comporte 27 colonnes, je voudrais donner le format CDate à certaines colonnes pas forcément les contiguës (col E,J, M à W et Z) et pas aux autres.
peut on écrire plus simplement le code ?

un exemple de boucle dans ce sens à adapter :
Code:
Dim t() As Variant, i As Byte, l As Long
t = Array(5, 9, 12, 23, 26)
l = 2
For i = LBound(t) To UBound(t)
    Cells(l, t(i)).Select
Next i
 
Re : problème dans écriture macro avec boucles

Re,



un exemple de boucle dans ce sens à adapter :
Code:
Dim t() As Variant, i As Byte, l As Long
t = Array(5, 9, 12, 23, 26)
l = 2
For i = LBound(t) To UBound(t)
    Cells(l, t(i)).Select
Next i

Merci de m'aider. Voici mon code complet.
Peux-tu me dire ou mettre le tien et que dois-je enlever chez moi ?

Private Sub OK_modif_Click()
'Boucle sur toutes les lignes
i = ListView1.SelectedItem.Index
Cells(i + 1, 1) = ListView1.ListItems(i).Text

'Boucle sur les colonnes
For j = 1 To 3 '1 To 27
If Me("Textbox" & j + 1) <> ListView1.ListItems(i).ListSubItems(j).Text Then
ListView1.ListItems(i).ListSubItems(j).Text = Me("Textbox" & j + 1)
Cells(i + 1, j + 1) = ListView1.ListItems(i).ListSubItems(j).Text
End If
Next j

For j = 4 To 4 'date naissance
If Me("Textbox" & j + 1) <> ListView1.ListItems(i).ListSubItems(j).Text Then
ListView1.ListItems(i).ListSubItems(j).Text = Me("Textbox" & j + 1)
Cells(i + 1, j + 1) = CDate(ListView1.ListItems(i).ListSubItems(j).Text)
End If
Next j

For j = 5 To 8
If Me("Textbox" & j + 1) <> ListView1.ListItems(i).ListSubItems(j).Text Then
ListView1.ListItems(i).ListSubItems(j).Text = Me("Textbox" & j + 1)
Cells(i + 1, j + 1) = ListView1.ListItems(i).ListSubItems(j).Text
End If
Next j

For j = 9 To 9 'date entrée
If Me("Textbox" & j + 1) <> ListView1.ListItems(i).ListSubItems(j).Text Then
ListView1.ListItems(i).ListSubItems(j).Text = Me("Textbox" & j + 1)
Cells(i + 1, j + 1) = CDate(ListView1.ListItems(i).ListSubItems(j).Text)
End If
Next j

For j = 10 To 11
If Me("Textbox" & j + 1) <> ListView1.ListItems(i).ListSubItems(j).Text Then
ListView1.ListItems(i).ListSubItems(j).Text = Me("Textbox" & j + 1)
Cells(i + 1, j + 1) = ListView1.ListItems(i).ListSubItems(j).Text
End If
Next j

For j = 12 To 22 'date sortie à date IA
If Me("Textbox" & j + 1) <> ListView1.ListItems(i).ListSubItems(j).Text Then
ListView1.ListItems(i).ListSubItems(j).Text = Me("Textbox" & j + 1)
Cells(i + 1, j + 1) = CDate(ListView1.ListItems(i).ListSubItems(j).Text)
End If
Next j

For j = 23 To 24 'DG + race père
If Me("Textbox" & j + 1) <> ListView1.ListItems(i).ListSubItems(j).Text Then
ListView1.ListItems(i).ListSubItems(j).Text = Me("Textbox" & j + 1)
Cells(i + 1, j + 1) = ListView1.ListItems(i).ListSubItems(j).Text
End If
Next j

For j = 25 To 25 'date tarissement
If Me("Textbox" & j + 1) <> ListView1.ListItems(i).ListSubItems(j).Text Then
ListView1.ListItems(i).ListSubItems(j).Text = Me("Textbox" & j + 1)
Cells(i + 1, j + 1) = CDate(ListView1.ListItems(i).ListSubItems(j).Text)
End If
Next j

For j = 26 To 27 'cocci + aimant
If Me("Textbox" & j + 1) <> ListView1.ListItems(i).ListSubItems(j).Text Then
ListView1.ListItems(i).ListSubItems(j).Text = Me("Textbox" & j + 1)
Cells(i + 1, j + 1) = ListView1.ListItems(i).ListSubItems(j).Text
End If
Next j



IniListview (InitTableau)


End Sub
 
Re : problème dans écriture macro avec boucles

Re,

pas tout compris de ton apli... et pas trop le temps de me plonger dedans... mais mettre les codes que tu veux voir exécuter sur les colonnes concernées... il y aura sans doute lieu de les adapter
 
Re : problème dans écriture macro avec boucles

Merci Pierrot de ton aide, si tu retrouves un peu de temps pour moi, voici un peu plus de détail.

En fait le code (trouvé sur le forum, c'est pas de moi) était celui ci au début :

Private Sub OK_modif_Click()
'Boucle sur toutes les lignes
i = ListView1.SelectedItem.Index
Cells(i + 1, 1) = ListView1.ListItems(i).Text

'Boucle sur les colonnes
For j = 1 To 27 'ListView1.ColumnHeaders.Count - 1
If Me("Textbox" & j + 1) <> ListView1.ListItems(i).ListSubItems(j).Text Then
ListView1.ListItems(i).ListSubItems(j).Text = Me("Textbox" & j + 1)
Cells(i + 1, j + 1) = ListView1.ListItems(i).ListSubItems(j).Text
End If
Next j

IniListview (InitTableau)[/QUOTE][/QUOTE]
End Sub

Il marchait sauf que dans les colonnes contenant des dates (col E,J, M à W et Z) les jours et mois étaient inversés d'où l'utilisation du CDate pour ces colonnes.

Comment mettre ton code dedans ?
 
- Navigue sans publicité
- Accède à Cléa, notre assistante IA experte Excel... et pas que...
- Profite de fonctionnalités exclusives
Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel.
Je deviens Supporter XLD

Discussions similaires

Réponses
8
Affichages
270
Réponses
4
Affichages
580
Réponses
5
Affichages
703
  • Question Question
Microsoft 365 Erreur UBound
Réponses
4
Affichages
217
Réponses
8
Affichages
647
Réponses
3
Affichages
265
Réponses
10
Affichages
531
Réponses
3
Affichages
213
Retour