Se connecter avec
S'enregistrer | Connectez-vous

VBA - Excel, Macros et Conditions...

Dernière réponse : dans Programmation

Bonjour,

Voici mon problème, et j'espère que vous pourrez m'aider.
Sur Excel, j'ai un tableau de B5 à C15. La ligne 5 correspond à mes en-têtes.

En B:B, j'ai une macro que lorsqu'on clique sur une cellule, une MacroA InputBox apparaît demandant de remplir soit par "CP" soit par du texte libre.
En C:C, j'aimerais que si la cellule de gauche, en B:B, affiche CP, déclencher la MacroB, sinon la MacroC.

Est-ce que vous pourriez m'éclairer sur ce point?

Cordialement,
Guillaume

Autres pages sur : vba excel macros conditions

Lassé par la pub ? Créez un compte

Meilleure solution

Ca a l'air de marcher... Tu confirmes?

  1. Private Sub Worksheet_SelectionChange(ByVal Target As Range)
  2. If Not Application.Intersect(Target, Range("B6:B20000")) Is Nothing Then
  3. Call NomEntreprises
  4. End If
  5.  
  6. If Not Application.Intersect(Target, Range("C6:C20000")) Is Nothing Then
  7. If ActiveCell.Offset(0, -1).Value = "CP" Then
  8. Call ObtenirInfosRéférence
  9. Else: Call NuméroContrat
  10. End If
  11. End If
  12. End Sub


En tout cas merci, ultra pédagogique comme méthode! :) 

Bonne journée!
Expert Programmation

Salut,

Oui, bien sûr. Je suppose que ta MacroA s'appelle en fait Worksheet_Change(). C'est dans cette macro qu'il te faudra faire le tri. J'entends par là détecter la colonne courante (aide-toi du paramètre Target), pour exécuter le code correspondant.

Bonjour Zeb!

En effet c'est du Worksheet_Change(). Cependant, je suis pas encore un as du VBA. Je te propose ici le code sur lequel je travaille...

  1. Private Sub Worksheet_SelectionChange(ByVal Target As Range)
  2. If Not Application.Intersect(Target, Range("B6:B20000")) Is Nothing Then
  3. Call NomEntreprises
  4. End If
  5.  
  6. If Not Application.Intersect(Target, Range("C6:C20000")) Is Nothing Then
  7. If Target.Value = "CP" Then
  8. Call ObtenirInfosRéférence
  9. Else Target.Value <> "CP" Then
  10. Call NuméroContrat
  11. End If
  12. End Sub


Si nécessaire, je peux te filer une copie du fichier en question.

Cordialement,

Guillaume
Expert Programmation

Ah non pas de copie de fichier. Imagine qu'un salaud se déguise en pauv' programmeur malheureux, et qu'il mette ici un lien vers un fichier plein de macro-virus !!! Pour décourager ces gens-là, pas de lien, pas de filage de copie ;) 

Ben il est vraiment pas mal ton code. Maintenant, il faut que tu découvres la méthode Offset() et tu auras ta solution. Je te laisse regarder, puis nous proposer ta soluce. Si tu as un peu de mal, je te montre.

EDIT: Sauf que ton code est mal indenté. Et donc il manque un If, un End If, etc. A revoir.
EDIT2: Rholala... Par principe, évite les lettres accentuées dans tes noms de macro.
Expert Programmation

Que ça marche ? Non. C'est à toi de vérifier ;) 
Que c'est comme ça qu'il fallait faire ? Oui.

Regarde et étudie ce que je t'avais préparé :
  1. Dim zone_de_donnees As Range
  2.  
  3. Set zone_de_donnees = Range(Rows(6), Rows(Rows.Count))
  4. If Intersect(Target, zone_de_donnees) Is Nothing Then Exit Sub
  5.  
  6. Select Case Target.Column
  7. Case 2 ' // Colonne B
  8. NomEntreprises
  9. Case 3 ' // Colonne C
  10. If Target.Offset(, -1).Text = "CP" Then
  11. ObtenirInfosRéférence
  12. Else
  13. NuméroContrat
  14. End If
  15. End Select
Lassé par la pub ? Créez un compte