Dans un cas "For i = 1 To" ça marche ... Mais pas avec For Each
Résolu/Fermé
Iama
Messages postés
319
Date d'inscription
mercredi 13 janvier 2010
Statut
Membre
Dernière intervention
27 mars 2020
-
18 sept. 2014 à 10:36
pijaku Messages postés 12263 Date d'inscription jeudi 15 mai 2008 Statut Modérateur Dernière intervention 4 janvier 2024 - 18 sept. 2014 à 13:47
pijaku Messages postés 12263 Date d'inscription jeudi 15 mai 2008 Statut Modérateur Dernière intervention 4 janvier 2024 - 18 sept. 2014 à 13:47
A voir également:
- Dans un cas "For i = 1 To" ça marche ... Mais pas avec For Each
- Downloader for pc - Télécharger - Téléchargement & Transfert
- Download instagram for pc - Télécharger - Divers Communication
- Idm for mac - Télécharger - Téléchargement & Transfert
- Whatsapp for pc - Télécharger - Messagerie
- Saveaspdf.exe for office 2007 - Télécharger - Bureautique
2 réponses
pijaku
Messages postés
12263
Date d'inscription
jeudi 15 mai 2008
Statut
Modérateur
Dernière intervention
4 janvier 2024
2 752
18 sept. 2014 à 10:39
18 sept. 2014 à 10:39
Bonjour,
Manque des bouts...
Comment sont déclarées toutes tes variables?
Comment sont-elles "remplies"?
Manque des bouts...
Comment sont déclarées toutes tes variables?
Comment sont-elles "remplies"?
Iama
Messages postés
319
Date d'inscription
mercredi 13 janvier 2010
Statut
Membre
Dernière intervention
27 mars 2020
14
18 sept. 2014 à 11:36
18 sept. 2014 à 11:36
pijaku
Merci pour ces conseils
Mon code d'origine est:
Je ne peux donc pas déclarer chaiNe en string
Tu me conseil de déclarer Itemps en string. Il faut donc que j'ajoute une variable.
Cela me parait plus clair dans le code dans avoir qu'une. (Un préjugé certainement)
C'est un problème de rapidité? D'éthique? De fiabilité ?
Est-il préférable de boucler sur les cellules au lieu de passer par objet range ?
Cordialement
Merci pour ces conseils
Mon code d'origine est:
Set ITems = Range(Cells(LigTi, 1), Cells(LigTi, 1).End(xlToRight)) ITems = ITems.Value 'Suppression des vides For i = 1 To UBound(ITems, 2) ITems(1, i) = SansVide(ITems(1, i)) Next i Private Function SansVide(chaiNe) As String
Je ne peux donc pas déclarer chaiNe en string
Tu me conseil de déclarer Itemps en string. Il faut donc que j'ajoute une variable.
Cela me parait plus clair dans le code dans avoir qu'une. (Un préjugé certainement)
C'est un problème de rapidité? D'éthique? De fiabilité ?
Est-il préférable de boucler sur les cellules au lieu de passer par objet range ?
Cordialement
pijaku
Messages postés
12263
Date d'inscription
jeudi 15 mai 2008
Statut
Modérateur
Dernière intervention
4 janvier 2024
2 752
18 sept. 2014 à 11:52
18 sept. 2014 à 11:52
Tu passes par une variable de type Range => très "lourde" et inutile.
Tu peux extrêmement rapidement remplir une variable tableau avec le contenu d'une plage de cellules. La boucle, dans ce cas est très rapide.
Essaye ceci :
Tu peux extrêmement rapidement remplir une variable tableau avec le contenu d'une plage de cellules. La boucle, dans ce cas est très rapide.
Essaye ceci :
Dim Items() As String, i As Long, LigTi As Long, Col As Integer For Col = 1 To Cells(LigTi, 1).End(xlToRight).Column ReDim Preserve Items(Col) Items(Col) = Cells(LigTi, Col).Value Next Col 'Suppression des vides For i = 1 To UBound(Items) Items(1) = SansVide(Items(1)) Next i '------------------------------ Private Function SansVide(chaiNe As String) As String
Iama
Messages postés
319
Date d'inscription
mercredi 13 janvier 2010
Statut
Membre
Dernière intervention
27 mars 2020
14
18 sept. 2014 à 12:03
18 sept. 2014 à 12:03
pijaku
Un grand merci pour tes conseils et tes explications
Alain
Un grand merci pour tes conseils et tes explications
Alain
pijaku
Messages postés
12263
Date d'inscription
jeudi 15 mai 2008
Statut
Modérateur
Dernière intervention
4 janvier 2024
2 752
18 sept. 2014 à 12:07
18 sept. 2014 à 12:07
De rien.
N'hésite pas.
A+
Franck
N'hésite pas.
A+
Franck
Iama
Messages postés
319
Date d'inscription
mercredi 13 janvier 2010
Statut
Membre
Dernière intervention
27 mars 2020
14
18 sept. 2014 à 12:23
18 sept. 2014 à 12:23
Encore une dernière pijaku
Serais-plus rapide de mettre,
Items(Col) = SansVide((Cells(LigTi, Col).Value)
Bien qu'un peu mois lisible?
Cordialement
Serais-plus rapide de mettre,
Items(Col) = SansVide((Cells(LigTi, Col).Value)
Bien qu'un peu mois lisible?
Cordialement
pijaku
Messages postés
12263
Date d'inscription
jeudi 15 mai 2008
Statut
Modérateur
Dernière intervention
4 janvier 2024
2 752
18 sept. 2014 à 12:31
18 sept. 2014 à 12:31
Quel est le code de ta fonction SansVide?
18 sept. 2014 à 10:51
Les variables sont remplies, j'ai commencé par coder en "for each", comme cela ne fonctionnait pas je l'ai remplacé par "for to".
IT , Items et tE sont en variant, i en single.
ITems est issu d'un set (Range)
ITems = ITems.Value
cordialement
Modifié par pijaku le 18/09/2014 à 11:00
De toutes façons, For Each est beaucoup plus lente que For To et à n'utiliser que sur des collections.
Si ITems avait été déclarée comme Collection , tu aurais pu utiliser une boucle For Each et modifier les valeurs comme ceci :
Mais bon, au vu de la complexité du bazar + la lenteur occasionnée par For Each + les valeurs que tu prends en compte dans ta boucle (String je suppose), le type de boucle à utiliser est For ... To... Next
Par contre, pour le coup, il faudrait revoir si tes valeurs sont des string, les déclarations :