missdedicaces
Messages postés3Date d'inscriptionjeudi 27 janvier 2011StatutMembreDernière intervention17 février 2011
-
27 janv. 2011 à 16:36
missdedicaces
Messages postés3Date d'inscriptionjeudi 27 janvier 2011StatutMembreDernière intervention17 février 2011
-
17 févr. 2011 à 17:50
Bonjour,
Suite à un projet, je souhaite obtenir une macro qui parcours un tableau et qui filtre suivant la valeur dans les colonnes. Ensuite les valeurs trouvées devront etre afficher dans une autre feuille.
Le tableau est constitué de la manière suivante :
colonne 1 : etat
colonne 2 : numero site A
colonne 3 : numero site B
colonne 4 : debit
On filtre suivant une valeur de A donné et on obtient le numero des sites B attaché eainsi que le debit entre chaque liaison. Ceci pour environ 1000 sites. Donc je cherchais une macro pour faire ça automatiquement :
j'ai commencé à élaborer un code :
Sub parcourir()
ActiveSheet.Range("$A$1:$G$34426").AutoFilter Field:=1, Criteria1:="Réel" 'filtre pour un reel
Dim A As Integer
For Each c In Range("B1:B34290") ' parcours le tableau
Merci d'avance pour vos réponses
If c.Value() = "10000" Then
' A Sheets("Nom de l'autre onglet").Range("B6") "Je suis dans un autre onglet" 'ecrire dans une autre cellule d'un autre onglet
End If
Next
End Sub
mais je ne sais pas comment recuperer la valeur des cellules de la colonne B et C et les renvoyer dans un fichier final ne contenant que le site A et tous ces liens.
cs_Jack
Messages postés14006Date d'inscriptionsamedi 29 décembre 2001StatutModérateurDernière intervention28 août 201579 27 janv. 2011 à 17:19
Salut
Bien embrouillé, tout ça.
Et plein de questions différentes ou pas ...
Le filtre que tu as utilisé est une bonne solution (Filtre automatique).
En réalité, ce filtre rend invisible les lignes ne correspondant pas au critère.
invisible hauteur de ligne 0
Quand tu scannes les cellules, toutes les cellules sont toujours là, même celles qui sont masquées : il faut donc vérifier la hauteur de ligne pour savoir si c'est une donnée à prendre en compte :
For Each c In Range("B1:B34290")
If c.Height <> 0 Then
' Ligne visible
If c.Value = "10000" Then
' La cellule Bx vaut 10.000
MsgBox "La valeur de la colonne ""D"" est " & c.Offset(0, 2).Value
End If
End If
Next
Pour écrire dans une autre feuille, il te suffit de la désigner par Sheets("le nom") puis de désigner la cellule où tu veux coller la donnée.
Si tu veux mettre les données les unes sous les autres, il te faudra créer un compteur et l'incrémenter à chaque insertion.
Voir Offset, encore une fois
Exemple
Sheets("ma feuille").Range("A1").Offset(maLigneIncrémentée, 0).Value
pour écrire X lignes en dessous de A1
Vala
Jack, MVP VB NB : Je ne répondrai pas aux messages privés
Le savoir est la seule matière qui s'accroit quand on la partage (Socrate)