IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Macros et VBA Excel Discussion :

VBA Fonction If Else


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Homme Profil pro
    Étudiant
    Inscrit en
    Juillet 2016
    Messages
    109
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juillet 2016
    Messages : 109
    Par défaut VBA Fonction If Else
    Bonjour à tous,

    Depuis 7h du matin, je bloque sur une fonction.

    L'objectif de ma macro est de copier une liste de code commune insee (5 chiffres au format texte) dans une colonne précise en l'occurrence la colonne O afin de créer un filtre automatique dans un tableau annexe.

    Je souhaite bloquer la macro quand la valeur n'est renseigné n'est pas un code commune insee, donc si l'utilisateur rentre un nombre à 4 chiffres, des lettres je souhaite bloquer la macro et cette macro ne doit fonctionner que si et seulement si le critère renseigné est bel et bien une liste de code commune insee à 5 chiffres.

    J'ai ma colonne O dans excel que j'ai dimensionné comme ceci Voici mon code VBA

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    Sub Filtrer()
     
    Dim cellule As Range
     
    For Each cellule In Range("O:O")
    If WorksheetFunction.IsText(cellule.Value) = False Then
    Exit For
    End If
    Next cellule
     
    MsgBox ("veuillez corriger")
    Else
        ActiveSheet.Range("$A$1:$M$6252").AutoFilter Field:=13, Criteria1:="<>"
        End If
    End Sub

    J'ai absolument besoin de votre aide please .

    Cordialement,

    --

  2. #2
    Expert confirmé Avatar de Patrice740
    Homme Profil pro
    Retraité
    Inscrit en
    Mars 2007
    Messages
    2 475
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 71
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Retraité
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Mars 2007
    Messages : 2 475
    Par défaut
    Bonjour,

    L'instruction End If clôture le If précédent.
    Tu écris ensuite un Else sans If préalable !

  3. #3
    Expert confirmé

    Homme Profil pro
    Curieux
    Inscrit en
    Juillet 2012
    Messages
    5 169
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Curieux
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Juillet 2012
    Messages : 5 169
    Billets dans le blog
    5
    Par défaut
    Bonjour,

    ne serait-il pas plus pertinent de mettre en place un blocage de saisie si la cellule ne comporte pas une séquence de 5 chiffres ?

    Ca évite les contrôles en aval

    En passant par une validation des données "personnalisé", la formule suivante effectue le contrôle sur la cellule D3 (à adapter de ce fait)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    =ET(ESTNUM(D3);NBCAR(D3)=5)
    Sinon, il faut tester à la fois que la valeur de la cellule est numérique, et que le nombre de caractères est de 5

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    If IsNumeric(Cell.Value) And Len(ActiveCell.Value) = 5 Then  ' Si la valeur est numérique est contient 5 caractères

  4. #4
    Membre confirmé
    Homme Profil pro
    Étudiant
    Inscrit en
    Juillet 2016
    Messages
    109
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juillet 2016
    Messages : 109
    Par défaut
    Merci à vous pour vos réponses.

    Je teste cela de suite après je souhaite avoir la valeur au format texte car il s'agit des codes communes insee, certains commence par 0 pour les départements du 01 au 09.

    Donc je peux remplacer isnumeric par istext je suppose ?

  5. #5
    Expert confirmé

    Homme Profil pro
    Curieux
    Inscrit en
    Juillet 2012
    Messages
    5 169
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Curieux
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Juillet 2012
    Messages : 5 169
    Billets dans le blog
    5
    Par défaut
    Même si le nombre est au format texte, isnumeric renverra true

    Istext n'existe pas

    Nom : Sans titre.jpg
Affichages : 228
Taille : 82,3 Ko

  6. #6
    Expert confirmé Avatar de Patrice740
    Homme Profil pro
    Retraité
    Inscrit en
    Mars 2007
    Messages
    2 475
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 71
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Retraité
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Mars 2007
    Messages : 2 475
    Par défaut
    Bonjour,

    Pour tester si le code est correct (avec les 0 préliminaires correctement saisis) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
      If Format(Val(cellule.Value), "00000") = cellule.Text And Len(cellule.Text) = 5 Then

  7. #7
    Membre confirmé
    Homme Profil pro
    Étudiant
    Inscrit en
    Juillet 2016
    Messages
    109
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juillet 2016
    Messages : 109
    Par défaut
    Messieurs,

    Je pense que je suis une quiche car j'ai essayé le code ci-dessous mais sans succès.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
     
     
    Sub FILTRE()
     
    Dim cellule As Range
    Set cellule = Range("O:O")
     
    For Each cellule In Range("O2:O")
    If cellule <> "" Then
    If Not Format(Val(cellule.Value), "00000") = cellule.Text And Len(cellule.Text) = 5 Then
    End If
    End If
    Next cellule
     
    MsgBox ("Le format n'est pas bon")
    Exit Sub
    End Sub
    Je souhaite que la formule soit active uniquement sur les cellules non vide et malheureusement cela ne fonction pas.

    De plus que je colle des valeurs bonnes ou non dans ma colonne, le message "le format n'est pas bon" s'affiche à chaque fois.

    Cordialemenent,

    --

  8. #8
    Expert confirmé Avatar de Patrice740
    Homme Profil pro
    Retraité
    Inscrit en
    Mars 2007
    Messages
    2 475
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 71
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Retraité
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Mars 2007
    Messages : 2 475
    Par défaut
    Re,

    Ça c'est inutile :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Set cellule = Range("O:O")
    et O:O c'est pas une cellule, c'est une colonne ....

    Et là
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    For Each cellule In Range("O2:O")
    il faut indiquer le numéro de la dernière ligne !

    Par exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Dim d As Long
    d = Cells(Rows.Count, "O").End(xlUp).Row
    For Each cellule In Range("O2:O" & d)
    Le message, il faut le mettre entre ta ligne 10 et ta ligne 11

    Le Exit Sub est inutile

  9. #9
    Membre confirmé
    Homme Profil pro
    Étudiant
    Inscrit en
    Juillet 2016
    Messages
    109
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juillet 2016
    Messages : 109
    Par défaut
    Bonjour Merci pour votre réponse.

    Je comprends de mieux en mieux mais maintenant j'ai le message Erreur de compilation End If sans bloc If alors que j'ai bien un If et un end If à la fin.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    Sub FILTRE()
     
    Dim cellule As Range
     
    If cellule <> "" Then
            If Not Format(Val(cellule.Value), "00000") = cellule.Text And Len(cellule.Text) = 5 Then
                    Dim d As Long
                d = Cells(Rows.Count, "O").End(xlUp).Row
            For Each cellule In Range("O2:O" & d)
        End If
    End If
    Next cellule
     
    MsgBox ("Le format n'est pas bon")
    End Sub

  10. #10
    Expert confirmé Avatar de Patrice740
    Homme Profil pro
    Retraité
    Inscrit en
    Mars 2007
    Messages
    2 475
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 71
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Retraité
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Mars 2007
    Messages : 2 475
    Par défaut
    Re,
    Citation Envoyé par Stéphane_MAN Voir le message
    Je comprends de mieux en mieux mais ...
    Tu mélanges tout, il faut faire les choses dans l'ordre, tu n'appliques pas les conseils qu'on te donnes !

    Par exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    Sub TestCP()
    Dim cellule As Range
    Dim d As Long
    Dim e As Integer
        d = Cells(Rows.Count, "O").End(xlUp).Row
        For Each cellule In Range("O2:O" & d)
            If cellule.Value <> "" Then
                If Not (Format(Val(cellule.Value), "00000") = cellule.Text And Len(cellule.Text) = 5) Then
                    cellule.Activate
                    MsgBox "Le format de la cellule " & cellule.Address & " n'est pas bon"
                    e = e + 1
                    If e >= 5 Then MsgBox "Il y a trop d'erreurs ": Exit Sub
                End If
            End If
        Next cellule
    End Sub

Discussions similaires

  1. [VBA]Fonction 'ajout' en vba sur une table
    Par rico63 dans le forum VBA Access
    Réponses: 15
    Dernier message: 28/03/2007, 16h56
  2. Fonction if...else
    Par Vinch006 dans le forum C
    Réponses: 5
    Dernier message: 21/03/2007, 10h18
  3. [VBA] Fonction non définie dans l'expression
    Par DREADY dans le forum VBA Access
    Réponses: 17
    Dernier message: 08/03/2007, 16h49
  4. [Excel VBA]fonction dans une cellule qui modifie une autre cellule
    Par Invité dans le forum Macros et VBA Excel
    Réponses: 6
    Dernier message: 24/01/2007, 17h43
  5. Probleme avec la fonction IF ELSE
    Par guillaumeIOB dans le forum Général JavaScript
    Réponses: 5
    Dernier message: 02/12/2005, 11h52

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo