Afficher un résultat en fonction de la valeur de 2 colonnes
Résolu
simon7339
Messages postés
68
Date d'inscription
Statut
Membre
Dernière intervention
-
pijaku Messages postés 12263 Date d'inscription Statut Modérateur Dernière intervention -
pijaku Messages postés 12263 Date d'inscription Statut Modérateur Dernière intervention -
Bonjour à tous,
Je bloque sur un problème depuis plusieurs heures. J'ai réussi à le résoudre avec une fonction SI(ET) et l'enregistreur de Macro mais je souhaiterais comprendre le fonctionnement de VBA pour progresser et ne plus me contenter de l'enregistreur...
En gros imaginons une colonne A avec soit des IN soit des OUT
Une colonne B avec soit des chiffres (1,2 ou 3) ; soit rien ou soit un texte ("Autres").
Je souhaiteras développer une macro qui va vérifier la valeur dans la colonne A et dans la colonne B pour me donner :
Si en cellule A = "OUT" et dans la colonne B <>"" (différent de rien) alors
=>Msg Box (pour la MsgBox votre forum m'a donné la réponse se matin) pour les intéressés allez voir mes conversations.
Je suis parti sur qqch comme ça
Ensuite je comprends qu'il faut que j'aille faire vérifier mes cellules les unes après les autres avec une boucle Loop Until ou quelque chose comme ça et qu'ensuite quand x<>"" et y = "OUT" lancement de la Msgbox.
Voilà j'espère que certains d'entre vous pourront m'aider afin de progresser.
Merci pour ce forum.
EDIT: Spécification du langage dans la coloration syntaxique.
Je bloque sur un problème depuis plusieurs heures. J'ai réussi à le résoudre avec une fonction SI(ET) et l'enregistreur de Macro mais je souhaiterais comprendre le fonctionnement de VBA pour progresser et ne plus me contenter de l'enregistreur...
En gros imaginons une colonne A avec soit des IN soit des OUT
Une colonne B avec soit des chiffres (1,2 ou 3) ; soit rien ou soit un texte ("Autres").
Je souhaiteras développer une macro qui va vérifier la valeur dans la colonne A et dans la colonne B pour me donner :
Si en cellule A = "OUT" et dans la colonne B <>"" (différent de rien) alors
=>Msg Box (pour la MsgBox votre forum m'a donné la réponse se matin) pour les intéressés allez voir mes conversations.
Je suis parti sur qqch comme ça
Dim x As Integer "Pour la colonne B" Dim y As String "Pour la colonne A" x = ActiveCell.Value y = ActiveCell.Value
Ensuite je comprends qu'il faut que j'aille faire vérifier mes cellules les unes après les autres avec une boucle Loop Until ou quelque chose comme ça et qu'ensuite quand x<>"" et y = "OUT" lancement de la Msgbox.
Voilà j'espère que certains d'entre vous pourront m'aider afin de progresser.
Merci pour ce forum.
EDIT: Spécification du langage dans la coloration syntaxique.
A voir également:
- Afficher un résultat en fonction de la valeur de 2 colonnes
- Fonction si et - Guide
- Faire 2 colonnes sur word - Guide
- Supercopier 2 - Télécharger - Gestion de fichiers
- Formule moyenne excel plusieurs colonnes - Guide
- Classer par ordre alphabétique excel plusieurs colonnes - Guide
1 réponse
Bonjour,
Tu n'es pas très bien parti.
Tu dis :
Puis
Or ActiveCell ne peut pas être à la fois en colonne A ET en colonne B, ActiveCell étant LA (et l'unique) cellule active.
Il te faut, pour rester simple, boucler, en effet, sur toutes les cellules de ta colonne A.
Pour cela, il te faut, au préalable, déterminer qu'elle est la première cellule et qu'elle est la dernière.
La première cellule, ce n'est pas difficile, c'est toi qui la fixe. Par exemple Range("A2") (qui s'écrit également Cells(2, 1)). Pour la dernière cellule, il te faut la déterminer. Pour cela il existe plusieurs méthodes (voir cette fiche pratique). En voici une :
Donc, après cela, tu peux boucler sur toutes les cellules entre A-2 et A-DernLign.
Voici deux façons de procéder, simples, mais il y en a d'autres...
Avec la syntaxe Range
Avec la syntaxe Cells
Nota : Dans les syntaxes :
Nota 2 : Il peux s'avérer nécessaire, dans certains cas, de référencer également la feuille.
Pour cela, remplacer :
EDIT : j'ai ajouté les .Value pour te montrer que cela ne change rien...
🎼 Cordialement,
Franck 🎶
Tu n'es pas très bien parti.
Tu dis :
Dim x As Integer "Pour la colonne B" Dim y As String "Pour la colonne A"
Puis
x = ActiveCell.Value y = ActiveCell.Value
Or ActiveCell ne peut pas être à la fois en colonne A ET en colonne B, ActiveCell étant LA (et l'unique) cellule active.
Il te faut, pour rester simple, boucler, en effet, sur toutes les cellules de ta colonne A.
Pour cela, il te faut, au préalable, déterminer qu'elle est la première cellule et qu'elle est la dernière.
La première cellule, ce n'est pas difficile, c'est toi qui la fixe. Par exemple Range("A2") (qui s'écrit également Cells(2, 1)). Pour la dernière cellule, il te faut la déterminer. Pour cela il existe plusieurs méthodes (voir cette fiche pratique). En voici une :
Dim DernLign As Long DernLign = Columns(1).Find("*", , , , xlByColumns, xlPrevious).Row
Donc, après cela, tu peux boucler sur toutes les cellules entre A-2 et A-DernLign.
Voici deux façons de procéder, simples, mais il y en a d'autres...
Avec la syntaxe Range
Dim Lign As Long, DernLign As Long 'on détermine la dernière ligne DernLign = Columns(1).Find("*", , , , xlByColumns, xlPrevious).Row 'boucle de la ligne 2 à la dernière For Lign = 2 To DernLign 'si la cellule A-Lign = OUT Alors If Range("A" & Lign) = "OUT" Then 'ICI ton traitement si A = OUT Else 'ICI ton traitement si A <> OUT 'en gros on ne fait rien, donc le Else est inutile End If 'Ligne suivante Next Lign
Avec la syntaxe Cells
Dim Lign As Long, DernLign As Long 'on détermine la dernière ligne DernLign = Columns(1).Find("*", , , , xlByColumns, xlPrevious).Row 'boucle de la ligne 2 à la dernière For Lign = 2 To DernLign 'si la cellule A-Lign = OUT Alors If Cells(Lign, 1) = "OUT" Then 'ICI ton traitement si A = OUT Else 'ICI ton traitement si A <> OUT 'en gros on ne fait rien, donc le Else est inutile End If 'Ligne suivante Next Lign
Nota : Dans les syntaxes :
Range("A" & Lign) = "OUT"et
Cells(Lign, 1) = "OUT"je n'ai pas ajouté le
.Value. En effet, en VBA, Value est la propriété par défaut. Tu peux l'ajouter pour une meilleure compréhension du code.
Nota 2 : Il peux s'avérer nécessaire, dans certains cas, de référencer également la feuille.
Pour cela, remplacer :
Range("A" & Lign) = "OUT"et
Cells(Lign, 1) = "OUT"par :
Sheets("Feuil189").Range("A" & Lign).Value = "OUT"et
Sheets("Feuil189").Cells(Lign, 1).Value = "OUT"s'il s'agit de la feuille nommée : Feuil189...
EDIT : j'ai ajouté les .Value pour te montrer que cela ne change rien...
🎼 Cordialement,
Franck 🎶