Bouche For each cellules non contigues

Fermé
titeufdu89 Messages postés 375 Date d'inscription samedi 28 juillet 2012 Statut Membre Dernière intervention 1 avril 2023 - 30 juin 2017 à 14:27
titeufdu89 Messages postés 375 Date d'inscription samedi 28 juillet 2012 Statut Membre Dernière intervention 1 avril 2023 - 3 juil. 2017 à 16:15
Bonjour,

Après moulte recherche je ne trouve pas mal solution.... Est-il possible de faire une boucle For Each pour un certain nombre de cellules non contigues?
J'ai tenté de créer un macro mais elle ne fonctionne pas, lorsque je l'execute le message d'erreur suivant apparait :
ERREUR DE COMPILATION - INCOMPATIBLITE DU TYPE

Voici mon code :
Sub MajTout()
Dim B As Object
Dim R As Object

Set B = Sheets("Base de données")
Set R = Sheets("Rayon")
Dim cell As Range
Dim mycell As Range

Set mycell = ("A1, C1, E1, A8, C8, E8, A15, C15, E15, A22, C22, E22, A29, C29, E29, A36, C36, E36, A43, C43, E43, A50, C50, E50")

For Each cell In mycell
If cell.Value > 0 Then
cell.Select

Dim l As Integer

If WorksheetFunction.CountIf(B.Columns(1), cell) > 0 Then

l = ActiveCell.Offset(0, 1).Value

Else

l = Range("J3").Value

Dim code As Long
Dim pdt As String
Dim pdt2 As String
Dim px As Currency


code = ActiveCell.Value
B.Range("A" & l) = code

pdt = ActiveCell.Offset(2, 0).Value
B.Range("B" & l) = pdt

pdt2 = ActiveCell.Offset(3, 0).Value
B.Range("C" & l) = pdt2

px = ActiveCell.Offset(4, 1)
B.Range("H" & l) = px

End If
End If
Next cell

End Sub


apparemment c'est au niveau de la déclaration des cellules que ça ne joue pas, mais cela dit, il se peut tout a fait qu'il y ai d'autres anomalies ailleurs... Si quelqu'un à une idée, je prends volontiers!

Merci par avance

A voir également:

1 réponse

yg_be Messages postés 22698 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 18 avril 2024 1 471
Modifié le 30 juin 2017 à 14:48
une idée:
Option Explicit
Sub MajTout()
Dim B As Worksheet
Dim R As Worksheet

Set B = Sheets("Base de données")
Set R = Sheets("Rayon")
Dim cell As Range
Dim mycell As Range

Set mycell = Range("A1, C1, E1, A8, C8, E8, A15, C15, E15, A22, C22, E22, A29, C29, E29, A36, C36, E36, A43, C43, E43, A50, C50, E50")

' ...
0
titeufdu89 Messages postés 375 Date d'inscription samedi 28 juillet 2012 Statut Membre Dernière intervention 1 avril 2023 38
30 juin 2017 à 15:41
Bonjour et merci!
Oui c'est ça, il manquait le "range" avant la déclaration des cellules :-s
A prèsent ça fonctionne, par contre un peu plus loin j'ai une autre ligne qui semble ne pas trop lui plaire.... une idée de la raison?

l = ActiveCell.Offset(0, 1).Value
0
fred > titeufdu89 Messages postés 375 Date d'inscription samedi 28 juillet 2012 Statut Membre Dernière intervention 1 avril 2023
Modifié le 30 juin 2017 à 16:06
 
Pour l (L minuscule) :

Tu as mis Dim l as Integer

Donc la valeur lue doit être un entier entre -32768 et 32767 ;
pour des entiers plus grands, choisir Long : Dim l As Long

Notamment car tu l'utilises ensuite comme n° de ligne :

B.Range("A" & l) = code
B.Range("B" & l) = pdt
B.Range("C" & l) = pdt2
B.Range("H" & l) = px
 
0
titeufdu89 Messages postés 375 Date d'inscription samedi 28 juillet 2012 Statut Membre Dernière intervention 1 avril 2023 38
3 juil. 2017 à 16:15
Merci beaucoup!
0