Résolu VBA - Excel, Macros et Conditions...

  • Auteur de la discussion Guillaume831
  • Date de début

Guillaume831

Nouveau membre
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
 

zeb

Modérateur
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.
 

Guillaume831

Nouveau membre
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...

Code:
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
If Not Application.Intersect(Target, Range("B6:B20000")) Is Nothing Then
Call NomEntreprises
End If

If Not Application.Intersect(Target, Range("C6:C20000")) Is Nothing Then
If Target.Value = "CP" Then
Call ObtenirInfosRéférence
Else Target.Value <> "CP" Then
Call NuméroContrat
End If
End Sub

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

Cordialement,

Guillaume
 

zeb

Modérateur
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.
 

Guillaume831

Nouveau membre
Ok j'accepte le défi, je tente de corriger mes erreurs, et te remercie des conseils ;)

A tout à l'heure!
 

Guillaume831

Nouveau membre
Meilleure réponse
Ca a l'air de marcher... Tu confirmes?

Code:
 Private Sub Worksheet_SelectionChange(ByVal Target As Range)
If Not Application.Intersect(Target, Range("B6:B20000")) Is Nothing Then
Call NomEntreprises
End If

If Not Application.Intersect(Target, Range("C6:C20000")) Is Nothing Then
    If ActiveCell.Offset(0, -1).Value = "CP" Then
        Call ObtenirInfosRéférence
        Else: Call NuméroContrat
    End If
End If
End Sub

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

Bonne journée!
 

zeb

Modérateur
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é :
Code:
Dim zone_de_donnees As Range

Set zone_de_donnees = Range(Rows(6), Rows(Rows.Count))
If Intersect(Target, zone_de_donnees) Is Nothing Then Exit Sub

Select Case Target.Column
    Case 2 ' // Colonne B
        NomEntreprises
    Case 3 ' // Colonne C
        If Target.Offset(, -1).Text = "CP" Then
            ObtenirInfosRéférence
        Else
            NuméroContrat
        End If
End Select
 
Vous devez vous inscrire ou vous connecter pour répondre ici.
Derniers messages publiés
Statistiques globales
Discussions
730 134
Messages
6 718 064
Membres
1 586 394
Dernier membre
Manoushk
Partager cette page
Haut