problème dans écriture macro avec boucles

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
 

elido

XLDnaute Nouveau
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 ?
 

Pierrot93

XLDnaute Barbatruc
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
 

elido

XLDnaute Nouveau
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
 

Pierrot93

XLDnaute Barbatruc
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
 

elido

XLDnaute Nouveau
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 ?
 

Discussions similaires

Réponses
11
Affichages
347

Statistiques des forums

Discussions
312 492
Messages
2 088 931
Membres
103 984
dernier inscrit
maliko67