• Initiateur de la discussion Initiateur de la discussion cibleo
  • 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 !

cibleo

XLDnaute Impliqué
Bonjour le forum, 🙂

Feuil1 colonne C à partir de la ligne 2, je souhaite parcourir les cellules non vides.
Je boucle comme ceci :

For Each c In Feuil1.Range("C2:C" & Feuil1.Range("C" & Rows.Count).End(xlUp).Row).SpecialCells(xlCellTypeConstants, 23)

Un problème se pose lorsque seule la cellule C2 est pleine----> incompatiblité de type
J'ai placé un espion sur :
Feuil1.Range("C" & Rows.Count).End(xlUp).Row).SpecialCells(xlCellTypeConstants, 23).address
et je m'aperçois que la plage englobe A1; B1 etc...😕

par contre si plus d'une cellule de la colonne C est remplie, la plage englobe bien les cellules de la colonnes C.
idem si seule C3 est remplie (pour l'exemple)
Le code allégé :
VB:
For Each c In Feuil1.Range("C2:C" & Feuil1.Range("C" & Rows.Count).End(xlUp).Row).SpecialCells(xlCellTypeConstants, 23)
temp = c.Offset(, 1).Value & "_" & CLng(c.Offset(, 2).Value)
Dico(temp) = Dico(temp) & c.Value & ";"
dico1(temp) = dico1(temp) & CLng(CDate(c.Offset(, -1))) & ";"
dico2(temp) = dico2(temp) & c.Offset(, -2) & ";"
dico3(temp) = dico3(temp) + 1
dico4(temp) = dico4(temp) & CLng(CDate(c.Offset(, 2))) & ";"
Next c
Y' a quelque chose qui m'échappe !

Cibleo
 

Pièces jointes

Re : SpecialCells

Bonjour Staple1600, eriiiic, néné06

Staple1600 : je ne comprends pas bien d'autant que je n'utilise jamais le filtre automatique 😕
René : oui, on enlève SpecialCells et on va parcourir toutes les cellules si j'ai bien compris.

eriiiic : Cette syntaxe, je ne l'aurais pas trouvée : pas mal, pas mal 😀
J'opte pour celle-ci.

Merci à tous
Cibleo
 
Re : SpecialCells

ReBonsoir

cibleo:
Voila à quoi je pensais quand je parlais d'utiliser le filtre automatique en VBA
A TESTER sur un CLASSEUR VIERGE
VB:
Sub b()
Dim pf As Range, pfse As Range, msg$, t$, tt$, ttt$, tArr, i%
' pour créer données de test
ActiveSheet.AutoFilterMode = False
[C1:E15] = Empty: [C1] = "ENTETE": [C2] = "1": [C4] = "2"
Range("C2:C4").AutoFill Destination:=Range("C2:C15"), Type:=xlFillDefault
[D2:D15].FormulaLocal = "=ENT(ALEA()*MAINTENANT())": [E2:E15].FormulaR1C1 = "=INT((RC[-1]*ROW())/2013)"
'/// fin création données test
'Visualiser les données
MsgBox "Appliquer le filtre automatique?", vbInformation + vbOKOnly, "Voir les données de test"
'Ci-dessous utilisation de filtre automatique en VBA
Range("C1:C15").AutoFilter Field:=1, Criteria1:="<>"
Set pf = [_FILTERDATABASE]
Set pfse = pf.Offset(1).Resize(pf.Rows.Count - 1).SpecialCells(xlCellTypeVisible)
t = Replace(pfse.Offset(, 1).Address(0, 0), ":", ","): tt = Replace(pfse.Offset(, 2).Address(0, 0), ":", ",")
ttt = t & "," & tt
MsgBox ttt, vbExclamation, "Voici les adresses des non vides en colonne D et E" 'pour test
tArr = Split(ttt, ",")
For i = LBound(tArr) To UBound(tArr)
msg = msg & "Addresse Cellule: " & tArr(i) & vbTab & "Valeur Cellule: " & Range(tArr(i)) & vbCrLf
Next i
MsgBox msg, vbInformation, "Voici les valeurs des données des cellules non vides en colonne D et E"
ActiveSheet.AutoFilterMode = False
End Sub
 
Re : SpecialCells

Bonsoir Cibleo, René, Eric, JM,

Pour ma part, je modifierais tout simplement la boucle comme ceci :

Code:
For Each c In Feuil1.Range("C2:C" & Rows.Count).SpecialCells(xlCellTypeConstants, 23)
Avec l'utilisation de SpecialCells, il n'est nul besoin de cibler la dernière cellule remplie de la colonne.

Cordialement.

Edit : bonsoir à toi aussi, Efgé.
 
Re : SpecialCells

Bonjour à tous,

Pour bien visualiser l'erreur de syntaxe, test dans la fenêtre exécution :
Syntaxe Papou-net :
?Feuil1.Range("C2:C" & Rows.Count).SpecialCells(xlCellTypeConstants, 23).Address
$C$2
$C$3
$C$2:$C$3,$C$5

Syntaxe cibleo :
?Feuil1.Range("C2:C" & Feuil1.Range("C" & Rows.Count).End(xlUp).Row).SpecialCells(xlCellTypeConstants, 23).Address
$A$1:$B$1,$D$1:$E$1,$C$1:$C$2
$C$3
$C$2:$C$3,$C$5
Papou-net : je retiens bien ceci :
Avec l'utilisation de SpecialCells, il n'est nul besoin de cibler la dernière cellule remplie de la colonne
Staple1600, le ciel et mon esprit sont assez nébuleux ce matin, c'est pas la peine d'en rajouter 🙄
je vais quand même tester quand j'aurais un petit moment.

On pense bien souvent maitriser ce qui peut paraître basique, mais on est toujours très loin de maitriser l'essentiel.

Merci à tous
Cibleo
 
Dernière édition:
- 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
15
Affichages
775
Réponses
3
Affichages
922
Réponses
5
Affichages
906
Réponses
10
Affichages
790
Retour