Changements automatiques dans une macro

chouchen_lolo Messages postés 34 Statut Membre -  
chouchen_lolo Messages postés 34 Statut Membre -
Bonjour,

Tout d'abord, desole pour ce titre pas tres explicite mais je ne voyais vraiment rien pour resumer mon probleme. J'ai donc essaye de rester le plus large possible.

Alors voila...

J'ai cree une macro qui cache ou montre certaines lignes dans plusieurs feuilles de mon fichier excel, en fonction de la valeur choisie dans une ComboBox.

Exemple:

Private Sub ComboBox111_Click()

If ActiveSheet.ComboBox111.Value = "1" Then
Sheets("Glasgow").Rows("27:35").Hidden = False
Sheets("Glasgow").Rows("36:116").Hidden = True

Sheets("Ailleur").Rows("25:33").Hidden = False
Sheets("Ailleur").Rows("34:114").Hidden = True
.
.
End If
End Sub


Jusque la rien de bien complique mais ca se corse qd je veux que les numeros des lignes que je cache/montre tiennent compte des lignes eventuellement ajoutee apres la creation de la macro.

Pour donner un exemple, si dans la feuille Glasgow j'insere une ligne entre la 29 et la 30, je veux que la macro en tienne compte et qd je selectionne la valeur "1" dans ma ComboBox, ca montre les lignes 27 a 36 (au lieu de 27 a 35) et cache les lignes 37 a 116 (au lieu de 36 a 116).

Pour cela, j'ai essaye de mettre un compteur de ligne dans la feuille excel Excel.
Dans la cellule C20, je rentre la formule =row(C27), ca retourne la valeur 27
Dans la cellule C21, je rentre la formule =row(C35), ca retourne la valeur 35
Dans la cellule C22, je rentre la formule =row(C116), ca retourne la valeur 116

Et ainsi, si j'insere une ligne n'importe ou entre la 27 et la 35, elle sera tenue en compte et j'aurais la valeur 36 en C21 et 117 en C22.

Ensuite dans VBA, je remplace
Sheets("Glasgow").Rows("27:35").Hidden = False
Sheets("Glasgow").Rows("36:116").Hidden = True
Par
Sheets("Glasgow").Rows("C20.Value:C21.Value").Hidden = False
Sheets("Glasgow").Rows("C21.Value:C22.Value").Hidden = True

Et la ca ne marche pas, le debugger me donne une erreur "type mismatch".
Apparement VBA n'accepte que des chiffres dans la commande Rows().

Ce que je ne comprends pas c'est que ce genre de technique marche tres bien avec la commande Cells():
Si j'ai la valeur 5 dans la cellule D9 et que je code Cells([D9].Value, 4).Value = 7, la macro me ressortira bien la valeur 7 dans la cellule (5, 4), c'est a dire la cellule D5.

Pourquoi ca marche avec Cells() et pas avec Rows() ? Est-ce une erreur de syntaxe ?
Quelqu'un a-t-il une autre methode ?

En vous remerciant d'avance pour votre aide sur ce probleme epineux

Precision: J'utilise une version anglaise d'Excel. Dites moi ce que vous feriez avec la version francaise et je chercherai de mon cote pour les correspondances
A voir également:

3 réponses

le père
 
Bonjour

La différence entre rows et cells, c'est que à rows tu passes une chaîne de caractères ( entre "") et à cells tu passes 2 nombres
Pour faire ce que tu veux avec rows il faut Rows (Cells[C20].value & ":" & Cells[C21].value)
0
chouchen_lolo Messages postés 34 Statut Membre 3
 
Simple, precis, efficace.
Merci

Je testerai ca Lundi.

Ciao ciao
0
chouchen_lolo Messages postés 34 Statut Membre 3
 
Desole le pere mais ta solution ne marche qu'a moitie.

En fait ca ne marche que qd je n'ajoute pas de ligne.

Ce que je veut dire, c'est qu'avec cette syntaxe, j'arrive bien en effet a dire a la macro de montrer/cacher des lignes dont le numero est donne dans une cellule particuliere.
Par contre qd j'insere un ligne (comme je l'ai explique dans le text du topic), le numero de ligne change bien dans les cellules particulieres mais la macro ne marche plus. J'ai une erreur : type mismatch.

Pourtant, la seule chose qui change entre le moment ou ca marche et le moment ou ca marche pas, c'est la valeur contenue dans la case que lit la macro.
0