Se connecter avec
S'enregistrer | Connectez-vous

Conditionnelle et recherche feuille

Dernière réponse : dans Programmation

Bonjour,
j'ai une feuille "obs1"(active) et des feuilles bilans dont l'intitulé est nom et prénom (donc c'est très variable),
je souhaiterais créer une macro qui vérifierait si la cellule "B2" (qui est le nom de l'individu") dans chaque feuille est équivalente à celle de la colonne 1 de"obs1" (dans mon exemple de code la ligne 7, mais il me faudrait une boucle à vrai dire) :
  1. Private Sub CommandButton2_Click()
  2. For Each Sheet In ActiveWorkbook
  3. If ActiveSheet.Cells(7, 1).Text = Worksheet.Range("B2").Text Then
  4. Sheet.Range("C3").Value = ActiveSheet.Range("7,3").Text
  5. End If
  6. Next Sheet
  7. End Sub

J'ai un rapport d'erreur sur la première ligne du code... quelqu'un pourrait-il m'aider? J'ai oublié de dire mais cela doit se voir dans mon code, je suis débutant.

Merci d'avance
Lassé par la pub ? Créez un compte

Meilleure solution

Expert Programmation

Eh ben ! C'est effectivement du code de débutant. Mais c'est aussi du code que tu ne comprends pas du tout. Et tu mélanges tout.

Pour utiliser un For Each, il faut une collection d'objet dans laquelle itérer.
ActiveWorkbook, c'est le classeur actif.
La collection des onglets du classeur, c'est ActiveWorkbook.Sheets.

Il est plus intelligent de se restreindre aux seules feuilles de calcul (on ne tient pas compte des graphiques) : ActiveWorkbook.Worksheets

Ensuite, mets toi d'accord avec toi-même, utilise soit la notation Cells(Row, Col), soit la notation Range("A1").

Et puis il faut vérifier que la feuille sur laquelle on écrit n'est pas celle dont on se sert de référence. Sauf à vouloir le faire exprès.
  1. Dim ws As Worksheet
  2. For Each ws In ActiveWorkbook.Worksheets
  3. If Not ws Is ActiveSheet Then
  4. If ActiveSheet.Range("A7").Value = ws.Range("B2").Value Then
  5. ws.Range("C3").Value = ActiveSheet.Range("C7").Value
  6. End If
  7. End If
  8. Next
Lassé par la pub ? Créez un compte