Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

vba (débutant)

7 réponses
Avatar
Michel (pen ar bed)
Bonjour,

Pourquoi avec le code suivant la colonne 5 reste désespérément vide

Dim cel As Range
For Each cel In ActiveSheet.UsedRange.Columns(5)
ActiveCell = Left(ActiveCell, 3)
Next cel

Merci

7 réponses

Avatar
MichDenis
Ton code se lit comme suit :

'Déclation d'un objet de classe "Range"
Dim cel As Range

'Pour chacune (Cell-> ta variable) des cellules de la plage des cellules de la colonne 5
For Each cel In ActiveSheet.UsedRange.Columns(5).Cells
'Chacune des cellules = Gauche(chacuneDesCellules,3)
Cell.value = Left(Cell, 3)
Next cel
Avatar
MichDenis
Et c'est une excellente initiative de désactiver les procédures événementielles
le temps que dure la boucle :

Application.EnableEvents = False
For Each cel In ActiveSheet.UsedRange.Columns(5).Cells
Cell.value = Left(Cell, 3)
Next cel

Application.EnableEvents = True




"MichDenis" a écrit dans le message de news:


Ton code se lit comme suit :

'Déclation d'un objet de classe "Range"
Dim cel As Range

'Pour chacune (Cell-> ta variable) des cellules de la plage des cellules de la colonne 5
For Each cel In ActiveSheet.UsedRange.Columns(5).Cells
'Chacune des cellules = Gauche(chacuneDesCellules,3)
Cell.value = Left(Cell, 3)
Next cel
Avatar
Michel (pen ar bed)
MichDenis avait énoncé :
Et c'est une excellente initiative de désactiver les procédures
événementielles le temps que dure la boucle :

Application.EnableEvents = False
For Each cel In ActiveSheet.UsedRange.Columns(5).Cells
Cell.value = Left(Cell, 3)
Next cel

Application.EnableEvents = True




"MichDenis" a écrit dans le message de news:


Ton code se lit comme suit :

'Déclation d'un objet de classe "Range"
Dim cel As Range

'Pour chacune (Cell-> ta variable) des cellules de la plage des cellules de
la colonne 5 For Each cel In ActiveSheet.UsedRange.Columns(5).Cells
'Chacune des cellules = Gauche(chacuneDesCellules,3)
Cell.value = Left(Cell, 3)
Next cel


merci pour les réponses mais je galère toujours ..... (pas doué)

ce que je cherche à faire c'est de prendre les trois premiers
caractères
du texte contenue dans chaque cellule de la colonne A et de les
recopier dans la colonne D
(je ne connais pas à l'avance le nombres de lignes dans la colonne A)

M.

Avatar
Frédéric Sigonneau
Essaye ce genre de code :

Sub test()
Dim i&, tmp
For i = 1 To Cells(Rows.Count, 1).End(xlUp).Row
tmp = Cells(i, "a").Value
If tmp <> "" Then Cells(i, "d").Value = Left(tmp, 3)
Next i
End Sub

FS
---
Frédéric Sigonneau
http://frederic.sigonneau.free.fr

MichDenis avait énoncé :
Et c'est une excellente initiative de désactiver les procédures
événementielles le temps que dure la boucle :

Application.EnableEvents = False
For Each cel In ActiveSheet.UsedRange.Columns(5).Cells
Cell.value = Left(Cell, 3)
Next cel

Application.EnableEvents = True




"MichDenis" a écrit dans le message de news:


Ton code se lit comme suit :

'Déclation d'un objet de classe "Range"
Dim cel As Range

'Pour chacune (Cell-> ta variable) des cellules de la plage des
cellules de la colonne 5 For Each cel In
ActiveSheet.UsedRange.Columns(5).Cells
'Chacune des cellules = Gauche(chacuneDesCellules,3)
Cell.value = Left(Cell, 3)
Next cel


merci pour les réponses mais je galère toujours ..... (pas doué)

ce que je cherche à faire c'est de prendre les trois premiers caractères
du texte contenue dans chaque cellule de la colonne A et de les recopier
dans la colonne D
(je ne connais pas à l'avance le nombres de lignes dans la colonne A)

M.





Avatar
Frédéric Sigonneau
Ou, pour une lecture un poil plus claire :

Sub test()
Dim i&, tmp
For i = 1 To Cells(Rows.Count, "a").End(xlUp).Row
tmp = Cells(i, "a").Value
If tmp <> "" Then Cells(i, "d").Value = Left(tmp, 3)
Next i
End Sub

FS
---
Frédéric Sigonneau
http://frederic.sigonneau.free.fr

MichDenis avait énoncé :
Et c'est une excellente initiative de désactiver les procédures
événementielles le temps que dure la boucle :

Application.EnableEvents = False
For Each cel In ActiveSheet.UsedRange.Columns(5).Cells
Cell.value = Left(Cell, 3)
Next cel

Application.EnableEvents = True




"MichDenis" a écrit dans le message de news:


Ton code se lit comme suit :

'Déclation d'un objet de classe "Range"
Dim cel As Range

'Pour chacune (Cell-> ta variable) des cellules de la plage des
cellules de la colonne 5 For Each cel In
ActiveSheet.UsedRange.Columns(5).Cells
'Chacune des cellules = Gauche(chacuneDesCellules,3)
Cell.value = Left(Cell, 3)
Next cel


merci pour les réponses mais je galère toujours ..... (pas doué)

ce que je cherche à faire c'est de prendre les trois premiers caractères
du texte contenue dans chaque cellule de la colonne A et de les recopier
dans la colonne D
(je ne connais pas à l'avance le nombres de lignes dans la colonne A)

M.





Avatar
Frédéric Sigonneau
Autre approche, sans boucle :

Sub test2()
Dim i&
i = Cells(Rows.Count, "a").End(xlUp).Row
With Range("D1:D" & i)
.Formula = "=Left(A1, 3)"
.Value = .Value
End With
End Sub

FS
---
Frédéric Sigonneau
http://frederic.sigonneau.free.fr

MichDenis avait énoncé :
Et c'est une excellente initiative de désactiver les procédures
événementielles le temps que dure la boucle :

Application.EnableEvents = False
For Each cel In ActiveSheet.UsedRange.Columns(5).Cells
Cell.value = Left(Cell, 3)
Next cel

Application.EnableEvents = True




"MichDenis" a écrit dans le message de news:


Ton code se lit comme suit :

'Déclation d'un objet de classe "Range"
Dim cel As Range

'Pour chacune (Cell-> ta variable) des cellules de la plage des
cellules de la colonne 5 For Each cel In
ActiveSheet.UsedRange.Columns(5).Cells
'Chacune des cellules = Gauche(chacuneDesCellules,3)
Cell.value = Left(Cell, 3)
Next cel


merci pour les réponses mais je galère toujours ..... (pas doué)

ce que je cherche à faire c'est de prendre les trois premiers caractères
du texte contenue dans chaque cellule de la colonne A et de les recopier
dans la colonne D
(je ne connais pas à l'avance le nombres de lignes dans la colonne A)

M.





Avatar
Michel (pen ar bed)
Il se trouve que Frédéric Sigonneau a formulé :
Ou, pour une lecture un poil plus claire :

Sub test()
Dim i&, tmp
For i = 1 To Cells(Rows.Count, "a").End(xlUp).Row
tmp = Cells(i, "a").Value
If tmp <> "" Then Cells(i, "d").Value = Left(tmp, 3)
Next i
End Sub

FS
---
Frédéric Sigonneau
http://frederic.sigonneau.free.fr


Merci c'est impeccable