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 :

Union : Pb de syntaxe [XL-2016]


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Homme Profil pro
    Responsable des études
    Inscrit en
    Février 2019
    Messages
    13
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Responsable des études
    Secteur : Conseil

    Informations forums :
    Inscription : Février 2019
    Messages : 13
    Par défaut Union : Pb de syntaxe
    Bonjour

    Avec le code suivant je souhaite juste ajouter une cellule a une plage nommée après m'être assurée que cette plage n'est pas vide.

    Rien à faire cela ne marche pas
    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
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
     
    Dim Sc1 As Integer
    Dim Sc2 As Integer
    Dim Sc3 As Integer
    Dim Sc4 As Integer
    Dim Sc5 As Integer
     
    Dim oCellule As Object
    Dim maplage As Range
     
    '******Scenario 1
     Set oZOneatestersc1 = Sheets("calculs").Range("f4:f25")
     
    For Each oCellule In oZOneatestersc1
     
    If oCellule = "OUI" Then Sc1 = Sc1 + 1
     
    Next oCellule
     
    '******Scenario 2
    Set oZOneatestersc2 = Sheets("calculs").Range("g4:g25")
     
    For Each oCellule In oZOneatestersc2
     
    If oCellule = "OUI" Then Sc2 = Sc2 + 1
     
    Next oCellule
     
    '******Scenario 3
    Set oZOneatestersc3 = Sheets("calculs").Range("h4:h25")
     
    For Each oCellule In oZOneatestersc3
     
    If oCellule = "OUI" Then Sc3 = Sc3 + 1
     
    Next oCellule
     
    '******Scenario 4
     
    Set oZOneatestersc4 = Sheets("calculs").Range("i4:i25")
     
    For Each oCellule In oZOneatestersc4
     
    If oCellule = "OUI" Then Sc4 = Sc4 + 1
     
    Next oCellule
     
    '******Scenario 5
     
    Set oZOneatestersc5 = Sheets("calculs").Range("j4:j25")
     
    For Each oCellule In oZOneatestersc5
     
    If oCellule = "OUI" Then Sc5 = Sc5 + 1
     
    Next oCellule
     
     
     
    If Sc1 > 0 Then Set maplage = Sheets("calculs").Range("f3")
     
    If Sc2 > 0 Then
        If maplage Is Nothing Then Set maplage = Sheets("calculs").Range("g3") Else Set maplage = Union(maplage, Sheets("calculs").Range("g3"))
        End If
     
    If Sc3 > 0 Then
        If maplage  Is Nothing Then Set maplage = Sheets("calculs").Range("h3") Else Set maplage = Union(maplage, Sheets("calculs").Range("h3"))
        End If
     
    If Sc4 > 0 Then
        If maplage  Is Nothing Then Set maplage = Sheets("calculs").Range("i3") Else Set maplage = Application.Union(maplage, Sheets("calculs").Range("i3"))
        End If
     
    If Sc5 > 0 Then
        If maplage  Is Nothing Then Set maplage = Sheets("calculs").Range("j3") Else Set maplage = Union(maplage, Sheets("calculs").Range("j3"))
        End If
     
    ActiveWorkbook.Names("Liste_scenario").Delete
    ActiveWorkbook.Names.Add Name:="Liste_scenario", RefersTo:=maplage

  2. #2
    Expert confirmé
    Homme Profil pro
    Responsable des études
    Inscrit en
    Juillet 2014
    Messages
    2 681
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Aude (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Responsable des études
    Secteur : Santé

    Informations forums :
    Inscription : Juillet 2014
    Messages : 2 681
    Par défaut
    Citation Envoyé par VB-b-a-ba Voir le message
    Rien à faire cela ne marche pas
    Peux tu être un peu plus précis ?
    Un message d'erreur ? si oui lequel ? et a quel ligne ? Quels sont les valeurs de tes variables au moment de l'erreur
    Si non que se passe-t-il ?

  3. #3
    Membre chevronné
    Profil pro
    Inscrit en
    Avril 2009
    Messages
    242
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2009
    Messages : 242
    Par défaut
    Bonjour,
    Probablement que Sc1, Sc2, Sc3, Sc4 et Sc5 valent 0 en sortie de tes 5 boucles et que donc maPlage vaut Nothing.

    Es-tu sûr d'avoir au moins 1 "OUI" (en majuscules et sans espaces) là où tu cherches ?
    Essaie peut-être en remplaçant toutes les occurrences de
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    If oCellule = "OUI" Then
    par
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    If UCase(Trim(oCellule.Value)) = "OUI" Then
    Et rajoute pourquoi pas un test avant de créer le nom, du style :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    If maplage Is Nothing Then
        MsgBox "Pas de OUI"
    Else
        ActiveWorkbook.Names("Liste_scenario").Delete
        ActiveWorkbook.Names.Add Name:="Liste_scenario", RefersTo:=maplage
    End If

  4. #4
    Expert éminent Avatar de mercatog
    Homme Profil pro
    Inscrit en
    Juillet 2008
    Messages
    9 435
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Autre

    Informations forums :
    Inscription : Juillet 2008
    Messages : 9 435
    Par défaut
    Bonjour
    Ou autrement en utilisant la fonction NB.SI d'Excel

    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 Test()
    Dim MaPlage As Range, c As Range
     
    With Worksheets("Calculs")
        For Each c In .Range("F3:J3")
            If Application.CountIf(c.Offset(1).Resize(22), "Oui") > 0 Then
                If MaPlage Is Nothing Then
                    Set MaPlage = c
                Else
                    Set MaPlage = Union(MaPlage, c)
                End If
            End If
        Next c
    End With
     
    If Not MaPlage Is Nothing Then MsgBox MaPlage.Address
    End Sub

  5. #5
    Membre averti
    Homme Profil pro
    Responsable des études
    Inscrit en
    Février 2019
    Messages
    13
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Responsable des études
    Secteur : Conseil

    Informations forums :
    Inscription : Février 2019
    Messages : 13
    Par défaut
    Citation Envoyé par halaster08 Voir le message
    Peux tu être un peu plus précis ?
    Un message d'erreur ? si oui lequel ? et a quel ligne ? Quels sont les valeurs de tes variables au moment de l'erreur
    Si non que se passe-t-il ?
    Bonjour
    Et bien
    Les variables Sc1 Sc2 etc sont par exemple de 0, 2,0, 7, 5,

    Il ajoute bien la valeur pour sc2 c'est à dire la cellule "g3" mais ensuite pour sc4 il n'ajoute pas la valeur, la variable maplage n'est pas actualisée est reste sur la première cellule ajoutée : L'union ne se fait pas.
    Pas de message d'erreur donc.

    Merci

  6. #6
    Expert confirmé
    Homme Profil pro
    Responsable des études
    Inscrit en
    Juillet 2014
    Messages
    2 681
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Aude (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Responsable des études
    Secteur : Santé

    Informations forums :
    Inscription : Juillet 2014
    Messages : 2 681
    Par défaut
    Pas de problème chez moi avec le code ci dessous:
    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
    18
    19
    20
    21
    22
    23
    24
    25
    26
    Sub aa()
    Dim maplage As Range
     sc1 = 0
     sc2 = 2
     sc3 = 0
     sc4 = 7
     sc5 = 5
    If sc1 > 0 Then Set maplage = Sheets("calculs").Range("f3")
     
    If sc2 > 0 Then
        If maplage Is Nothing Then Set maplage = Sheets("calculs").Range("g3") Else Set maplage = Union(maplage, Sheets("calculs").Range("g3"))
        End If
     
    If sc3 > 0 Then
        If maplage Is Nothing Then Set maplage = Sheets("calculs").Range("h3") Else Set maplage = Union(maplage, Sheets("calculs").Range("h3"))
        End If
     
    If sc4 > 0 Then
        If maplage Is Nothing Then Set maplage = Sheets("calculs").Range("i3") Else Set maplage = Application.Union(maplage, Sheets("calculs").Range("i3"))
        End If
     
    If sc5 > 0 Then
        If maplage Is Nothing Then Set maplage = Sheets("calculs").Range("j3") Else Set maplage = Union(maplage, Sheets("calculs").Range("j3"))
        End If
    Debug.Print maplage.Address '$G$3,$I$3:$J$3
    End Sub
    Tu es sur que tes variables SC* ont les valeurs que tu attends ?

  7. #7
    Membre averti
    Homme Profil pro
    Responsable des études
    Inscrit en
    Février 2019
    Messages
    13
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Responsable des études
    Secteur : Conseil

    Informations forums :
    Inscription : Février 2019
    Messages : 13
    Par défaut
    oui c'est ça
    si c'est = 0 je n'ajoute rien mais si il y a au moins 1 oui donc >0 alors j'ajoute la cellule à la plage.

  8. #8
    Expert confirmé
    Homme Profil pro
    Responsable des études
    Inscrit en
    Juillet 2014
    Messages
    2 681
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Aude (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Responsable des études
    Secteur : Santé

    Informations forums :
    Inscription : Juillet 2014
    Messages : 2 681
    Par défaut
    oui c'est ça
    si c'est = 0 je n'ajoute rien mais si il ya au moins 1 oui donc >0 alors j'ajoute la cellule à la plage
    Donc en fixant les valeurs des variables sc* le code est fonctionnel, l'erreur doit se trouver dans ta manière de les calculer
    Lance donc ta macro en mode pas à pas (touche F8) et vérifie si le calcul se passe comme tu l'attends

    As-tu essayé le code proposé par Mercatog quelques posts plus bas?

  9. #9
    Membre averti
    Homme Profil pro
    Responsable des études
    Inscrit en
    Février 2019
    Messages
    13
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Responsable des études
    Secteur : Conseil

    Informations forums :
    Inscription : Février 2019
    Messages : 13
    Par défaut
    Citation Envoyé par halaster08 Voir le message
    Pas de problème chez moi avec le code ci dessous:
    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
    18
    19
    20
    21
    22
    23
    24
    25
    26
    Sub aa()
    Dim maplage As Range
     sc1 = 0
     sc2 = 2
     sc3 = 0
     sc4 = 7
     sc5 = 5
    If sc1 > 0 Then Set maplage = Sheets("calculs").Range("f3")
     
    If sc2 > 0 Then
        If maplage Is Nothing Then Set maplage = Sheets("calculs").Range("g3") Else Set maplage = Union(maplage, Sheets("calculs").Range("g3"))
        End If
     
    If sc3 > 0 Then
        If maplage Is Nothing Then Set maplage = Sheets("calculs").Range("h3") Else Set maplage = Union(maplage, Sheets("calculs").Range("h3"))
        End If
     
    If sc4 > 0 Then
        If maplage Is Nothing Then Set maplage = Sheets("calculs").Range("i3") Else Set maplage = Application.Union(maplage, Sheets("calculs").Range("i3"))
        End If
     
    If sc5 > 0 Then
        If maplage Is Nothing Then Set maplage = Sheets("calculs").Range("j3") Else Set maplage = Union(maplage, Sheets("calculs").Range("j3"))
        End If
    Debug.Print maplage.Address '$G$3,$I$3:$J$3
    End Sub
    Tu es sur que tes variables SC* ont les valeurs que tu attends ?
    l'erreur doit être en amont avec les noms ou autre chose alors, je vais reconstruire par morceau et voir quand ca ne marche plus

  10. #10
    Membre averti
    Homme Profil pro
    Responsable des études
    Inscrit en
    Février 2019
    Messages
    13
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Responsable des études
    Secteur : Conseil

    Informations forums :
    Inscription : Février 2019
    Messages : 13
    Par défaut Conclusion
    Bonjour,

    En fait le boulot n'était pas terminé, je regardais la valeur de la variable au lieu de regarder la référence ce qui me donnait l'impression que cela ne marchait pas....
    Bref j'avais juste mais je ne le savais pas.....

    Mais vos bouts de code vont me permettre de faire mieux
    Merci

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Requête d'union: problème de syntaxe ?
    Par smilm dans le forum Langage SQL
    Réponses: 5
    Dernier message: 02/01/2011, 18h16
  2. Syntaxe d'un recordset par union
    Par Kalvin_20 dans le forum VBA Access
    Réponses: 8
    Dernier message: 02/06/2008, 10h31
  3. Erreur de syntaxe requête union
    Par Nessie37 dans le forum Requêtes et SQL.
    Réponses: 9
    Dernier message: 19/02/2008, 21h22
  4. Syntaxe Select Union
    Par Oncle_Pete dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 12/01/2007, 13h20
  5. union de structure syntaxe
    Par al974 dans le forum C
    Réponses: 6
    Dernier message: 29/07/2006, 13h56

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