Etendre le range (plage) tant que la cellule est non vide ou jusqu'à ce que la 1

gondrule1 Messages postés 33 Date d'inscription lundi 29 septembre 2008 Statut Membre Dernière intervention 29 février 2012 - 18 nov. 2011 à 14:40
gondrule1 Messages postés 33 Date d'inscription lundi 29 septembre 2008 Statut Membre Dernière intervention 29 février 2012 - 28 nov. 2011 à 12:46
Bonjour,

<html>

<style type= "text/css">
table.tableizer-table {border: 1px solid #CCC; font-family: Arial, Helvetica, sans-serif; font-size: 12px;} .tableizer-table td {padding: 4px; margin: 3px; border: 1px solid #ccc;}
.tableizer-table th {background-color: #104E8B; color: #FFF; font-weight: bold;}
</style>

Type |Name | ----
BIDULE, , ----
MACHIN, , ----
, RESTONS, ----
, COURTOIS, ----
, COURTOIS, ----
TRUC, , ----
, SVP, ----
, SVP, ----
, SVP, ----
, SVP, ----
, SVP


</html>


J'aimerais que ma macro, pour chaque "BIDULE" de la colonne A(qui sont en Interior.font =15, pas les mêmes cellules ni la même couleur que le tableau fait avec "tableizer", je ne l'avais pas précisé), se déplace de 2 lignes vers le bas, puis sélectionne toutes les cellules vides après "MACHIN" et avant "TRUC", ensuite que cette sélection de cellules se déplace vers "RESTONS COURTOIS COURTOIS", pour que je puisse concaténer ces cellules et que la macro m'alerte lorsque RESTONS >3 et idem pour courtois puisque pas plus de courtois sont acceptés.

Je sais bien que je vous demande beaucoup mais j'ai passé plusieurs heures sur le problème et j'ai beaucoup de mal à étendre le range sur toutes les cellules non-vides avant machin. J'ai essayé çà en me déplaçant d'une colonne et sélectionner les cellules non vides :
Sub detectecouleurtest3()

Dim rng As Range, cell As Range
For Each cell In Columns(1).Cells
If cell.Interior.ColorIndex = 15 Then
If rng Is Nothing Then
Set rng = cell
rng.Select
rng.Offset(2, 1).Select
Do While rng(IsEmpty(ActiveCell.End(xlDown).Column)) = False
rng(IsEmpty(ActiveCell.End(xlDown).Column)).Range.Resize
Loop
End If
End If
Next cell

End Sub


après avoir essayé ça sur les cellules vides :
Sub detectecouleurtest2()

Dim rng As Range, cell As Range
For Each cell In Columns(1).Cells
If cell.Interior.ColorIndex = 15 Then
If rng Is Nothing Then
Set rng = cell
rng.Select
rng.Offset(2, 0).Select

Do While (IsEmpty(ActiveCell)) = True
rng.Cells(ActiveCell.End(xlDown).Column).Select
Loop
Selection.Offset(, 1).Select
End If
End If


Next cell

End Sub
mais le range (dans un cas comme dans l'autre) ne se remplit pas comme je le voudrais

D'avance, merci pour vos réponses

Bon week-end !

39 réponses

Utilisateur anonyme
18 nov. 2011 à 14:48
Salut,

Regarde le message de ucfoutu dans:
http://www.vbfrance.com/forum/sujet-COMMENT-COMPTER-MANIERE-CORRECTE-NOMBRE-COLONNE-UTILISE-DANS_1556606.aspx

Je pense que ça te donnera des indications.



CF2i - Guadeloupe
Ingénierie Informatique
0
gondrule1 Messages postés 33 Date d'inscription lundi 29 septembre 2008 Statut Membre Dernière intervention 29 février 2012
18 nov. 2011 à 14:54
Salut, merci pour cette réponse si rapide !

Je vais jeter un oeil !!
0
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 228
18 nov. 2011 à 14:55
Bonjour, acive,

Oui, en effet ... mais :
- uniquement pour avoir des idées.
- ce sera un peu différent dans son cas, du fait des deux lignes intercalées
- il aura, dans un tel cas, intérêt à commencer depuis le bas et à remonter

J'attends en ce qui me concerne qu'il ait commencé à y travailler. Je n'y viendrai qu'ensuite, après avoir vu ses propres efforts (pas avant).

____________________
Réponse exacte ? => "REPONSE ACCEPTEE" pour faciliter les recherches d'autres forumeurs.
Pas d'aide en ligne installée ? ==> ne comptez pas sur moi pour simplement vous dire ce qu'elle contient
0
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 228
18 nov. 2011 à 14:57
Ah ben non !
Je croyais que tu te référais à une toute autre discussion, bien plus complexe ... à la suite d'une demande de SERIEUXETCOOL



____________________
Réponse exacte ? => "REPONSE ACCEPTEE" pour faciliter les recherches d'autres forumeurs.
Pas d'aide en ligne installée ? ==> ne comptez pas sur moi pour simplement vous dire ce qu'elle contient
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 228
18 nov. 2011 à 15:02
La voilà, la discussion à lire.
Une partie du code concerné a précisément pour vocation d'établir des plages de groupe.


____________________
Réponse exacte ? => "REPONSE ACCEPTEE" pour faciliter les recherches d'autres forumeurs.
Pas d'aide en ligne installée ? ==> ne comptez pas sur moi pour simplement vous dire ce qu'elle contient
0
Utilisateur anonyme
18 nov. 2011 à 15:03
Re:

Oui, il dit:
étendre le range sur toutes les cellules non-vides avant machin.

Et j'ai pensé à ce que t'avais dit à propos du UsedRange

Cordialement



CF2i - Guadeloupe
Ingénierie Informatique
0
Utilisateur anonyme
18 nov. 2011 à 15:09
A propos Gondrule,

A l'avenir utilise les balises VB [code] quand tu mets du code (troisième icône à partir de la droite)
Ça fait un peu "graphiti" ton code en texte brut comme ça, et on comprendrait mieux.




CF2i - Guadeloupe
Ingénierie Informatique
0
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 228
18 nov. 2011 à 15:09
Non, non,
Je pense qu'il a exprimé (assez maladroitement, mais ...) qu'il a des groupes, séparés par deux lignes, et qu'il veut déterminer la plage de chacun de ces groupes (pour y effectuer un traitement ?).
Mais j'ai peut-être mal compris.
A lui de revenir s'expliquer, en oubliant (cela ne nous regarde pas) toute la première partie hml !


____________________
Réponse exacte ? => "REPONSE ACCEPTEE" pour faciliter les recherches d'autres forumeurs.
Pas d'aide en ligne installée ? ==> ne comptez pas sur moi pour simplement vous dire ce qu'elle contient
0
gondrule1 Messages postés 33 Date d'inscription lundi 29 septembre 2008 Statut Membre Dernière intervention 29 février 2012
18 nov. 2011 à 15:11
Salut à tous !!

Dites-donc les gars, vous êtes des rapides !!
Ca fait plaisir de se sentir soutenu !!

Merci pour vos suggestions, je jetterai un oeil dans les prochains jours et si la solution m'apparaît, je ne manquerais pas de vous tenir au courant (en félicitant (en me prosternant devant...) celui qui aura su m'aiguiller vers la meilleure solution :!)

Bon week-end à tous !
0
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 228
18 nov. 2011 à 15:16
en me prosternant devant...

Nul ne te demandera cela.
Par contre :
Il sera bon que tu commences enfin à observer la discipline en vigueur ici (et c'est la seconde fois que je t'en fais la remarque) :
1) Tu ne développes pas sous VB6, mais sous VBA (et tu aurais donc du ouvrir cette discussion dans la section appropriée : VBA)
2) l'indentation et la mise entre balises CODE des codes présentés n'est pas un luxe, mais une NECESSITE.
Une chose doit demeurer claire et établie dans ton esprit : mon aide sera proportionnelle à tes efforts, notamment en matière de discipline à observer.

____________________
Réponse exacte ? => "REPONSE ACCEPTEE" pour faciliter les recherches d'autres forumeurs.
Pas d'aide en ligne installée ? ==> ne comptez pas sur moi pour simplement vous dire ce qu'elle contient
0
gondrule1 Messages postés 33 Date d'inscription lundi 29 septembre 2008 Statut Membre Dernière intervention 29 février 2012
18 nov. 2011 à 15:17
Resalut !!
La partie HTML, c'est pour coller dans un fichier bloc-notes pour que vous puissiez sauver en HTML et ouvrir afin d'avoir une idée de comment se présente en vrai, le tableau.
Pour ce qui est des balises VB, pardon, j'ignorais, je n'ai pas trop l'habitude d'utiliser le site, je ne connais pas les usages ...

Re-Bon week-end !!
0
gondrule1 Messages postés 33 Date d'inscription lundi 29 septembre 2008 Statut Membre Dernière intervention 29 février 2012
22 nov. 2011 à 08:20
Bonjour,

Voila le code que j'ai pour le moment, mais il est truffé de faute, il fonctionne jusqu'au dernier Offset, ensuite j'ai un message d'erreur "Objet recquis ou with block not set", j'ai voulu mettre un compteur "x" pour qu'il compte les cellules non vides dans la colonne mais je pense que j'ai déjà un problème avec la recherche de la 1ère cellule vide dans la colonne... Si vous pouviez m'aider à identifier les erreurs, ce serait sympa, merci
Sub detectecouleurtest3()

Dim rng As Range, cell As Range
Dim x As Integer
x = 1


For Each cell In Columns(1).Cells
If cell.Interior.ColorIndex = 15 Then
If rng Is Nothing Then
Set rng = cell

rng.Offset(2, 1).Select

With ActiveCell.Value.Find(What:="", LookIn:=xlValues, SearchOrder:=xlByColumns, SearchDirection:=xlDown, MatchCase:=False, SearchFormat:=False).Select

Do Until ActiveCell.Value.Found(IsEmpty(ActiveCell)) = True

x = x + 1

Loop

Set rng = Range("rng").Resize(RowSize:=x)

End With
End If
End If


Next cell

End Sub
0
Utilisateur anonyme
22 nov. 2011 à 11:35
Salut,

"Objet recquis ou with block not set"

Tu veux dire " with block not set" quand tu mets le bloc with et "Objet recquis" quand tu l'enlèves?



CF2i - Guadeloupe
Ingénierie Informatique
0
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 228
22 nov. 2011 à 11:41
Bonjour,

je ne voulais au départ pas intervenir dans cette discussion ouverte dans la section VB6 et non VBA et où le demandeur présente des codes non indentés et entre balises code.
Mais bon ...
j'ai voulu mettre un compteur "x" pour qu'il compte les cellules non vides dans la colonne

et tout ce "travail" ...
Qu'il ouvre donc son aide VBA sur SpecialCells et sur xlCellTypeConstants, ainnsi que sur Rows.count
Ce sera ma seule intervention ici.

____________________
Réponse exacte ? => "REPONSE ACCEPTEE" pour faciliter les recherches d'autres forumeurs.
Pas d'aide en ligne installée ? ==> ne comptez pas sur moi pour simplement vous dire ce qu'elle contient
0
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 228
22 nov. 2011 à 11:45
et qu'il s'intéresse également à ce qu'est :
WorksheetFunction.CountA



____________________
Réponse exacte ? => "REPONSE ACCEPTEE" pour faciliter les recherches d'autres forumeurs.
Pas d'aide en ligne installée ? ==> ne comptez pas sur moi pour simplement vous dire ce qu'elle contient
0
gondrule1 Messages postés 33 Date d'inscription lundi 29 septembre 2008 Statut Membre Dernière intervention 29 février 2012
22 nov. 2011 à 13:35
Rebonjour,
Et merci de votre patience
<code>
Sub detectecouleurtest3()

Dim rng As Range, cell As Range, maplage As Range, maplagersus As Range
Dim x As Integer
x = 1

For Each cell In Columns(1).Cells
If cell.Interior.ColorIndex = 15 Then
If rng Is Nothing Then
Set rng = cell
rng.Offset(2, 1).Select

Set maplage = Columns(ActiveCell.Column)


Do While Application.CountA(maplage) <> 0

x = x + 1

Loop

Set maplagersus = Range(x, 1)


End If
End If


Next cell

End Sub
<code>

Maintenant, j'ai un message d'erreur overflow, j'ai essayé de remplacer par (Do While Application.CountA(maplage) = True)mais là, ça me donne une erreur 400.
0
Utilisateur anonyme
22 nov. 2011 à 13:41
Salut,

Pourquoi tu fais un Do while?
Tu as déjà ta valeur dans .CountA(maplage).



CF2i - Guadeloupe
Ingénierie Informatique
0
gondrule1 Messages postés 33 Date d'inscription lundi 29 septembre 2008 Statut Membre Dernière intervention 29 février 2012
22 nov. 2011 à 14:13
Salut,

Merci de t'intéresser à mon problème...
Je sais pas trop , peut-être que j'utilise mal ".CountA(maplage)", je pensais que cela servait à compter le nombre de cellules remplies de la colonne, mais comme je ne dois compter que le nombre de cellules remplies de la colonne avant la 1ère cellule vide (vu que je dois répéter l'opération sur un millier de "cell.Interior.ColorIndex = 15"), voilà comment je pensais sélectionner le nombre de ligne à mettre dans le range final...
J'en suis loin, mais je ne désespère, j'y arriverais, j'y arriverais !!Un jour !


Bonne journée !
0
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 228
22 nov. 2011 à 14:15
surtout que
Do While Application.CountA(maplage) <> 0

  x =  x + 1

Loop 

est une boucle sans fin si même une seule cellule de la plage maplage est remplie !
JOn a ici une fort désagréable impression : absence totale des connaissances de base, doublée d'une propension à ne pas tester (il s'en serait sinon rendu compte, de cette boucle sans fin) ou, s'il a testé, à ne pas dire ce qu'il a constaté.
Et ce : sans, toujours pas , utiliser les balises code pour présenter son code.
____________________
Réponse exacte ? => "REPONSE ACCEPTEE" pour faciliter les recherches d'autres forumeurs.
Pas d'aide en ligne installée ? ==> ne comptez pas sur moi pour simplement vous dire ce qu'elle contient
0
gondrule1 Messages postés 33 Date d'inscription lundi 29 septembre 2008 Statut Membre Dernière intervention 29 février 2012
22 nov. 2011 à 14:39
Bonjour Ucfoutu,

Désolé mais j'avais mis code code au début et à la fin, je ne m'étais pas aperçu qu'il y avait un truc spécial dans l'éditeur de message pour ce faire...
Je sais, je sais ...
D'autre part, "Maintenant, j'ai un message d'erreur overflow, j'ai essayé de remplacer par (Do While Application.CountA(maplage) = True)mais là, ça me donne une erreur 400. "
0