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 :

Incomptabilité de type 13 [XL-2003]


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
    Menuisier
    Inscrit en
    Octobre 2015
    Messages
    38
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Menuisier
    Secteur : Bâtiment

    Informations forums :
    Inscription : Octobre 2015
    Messages : 38
    Par défaut Incomptabilité de type 13
    Bonjour,

    Je viens vers vous car je ne trouve pas la réponse à mon problème.

    J'ai créer de code et pour moi il n'y a aucune raison pour que 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
    Private Sub Worksheet_Activate()
        Dim cel As Range
        Application.ScreenUpdating = False
        For Each cel In Range("P2:AUH2")
        If cel = "" Then
        cel.EntireColumn.Hidden = True
        Else: cel.EntireColumn.Hidden = False
        End If
        Next
        Application.ScreenUpdating = True
     
    End Sub

    l'idée est d'analyser toutes les cellules de l'entête (P2 à AUH2), et lorsque la cellule est égale à "" => De cacher la colonne complète.

    Les cellules de l'entête ont cette formule ci: =SI(Service!A7="";"";Service!A7)


    la marco marche mais à la fin de son exécution, j'ai l'erreur 2029 qui apparait...

    Pourquoi ???

  2. #2
    Expert confirmé
    Homme Profil pro
    aucune
    Inscrit en
    Avril 2016
    Messages
    7 563
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 84
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : aucune

    Informations forums :
    Inscription : Avril 2016
    Messages : 7 563
    Par défaut
    Bonjour
    Je lis :
    Dim cel As Range
    et
    If cel = "" Then
    un objet ne saurait être = ""
    Sa proriété Value, oui

  3. #3
    Membre averti
    Homme Profil pro
    Menuisier
    Inscrit en
    Octobre 2015
    Messages
    38
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Menuisier
    Secteur : Bâtiment

    Informations forums :
    Inscription : Octobre 2015
    Messages : 38
    Par défaut
    Bonjour,

    merci de ta reponse, je comprends le probleme, mais comment dois-je declarer ma variable alors ?

  4. #4
    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
    Ce n'est pas le type de ta variable à changer.

    Comme l'a souligné unparia, tu utilises l'objets sans mentionner la propriété adéquate

    Au passage, quelle est l'utilité de cette formule ?

    =SI(Service!A7="";"";Service!A7)
    Si la cellule vaut "", on met "", sinon on met la valeur de la cellule
    Ou comment se compliquer la vie ... un simple =Service!A7 me semble parfaitement suffisant ?

  5. #5
    Membre averti
    Homme Profil pro
    Menuisier
    Inscrit en
    Octobre 2015
    Messages
    38
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Menuisier
    Secteur : Bâtiment

    Informations forums :
    Inscription : Octobre 2015
    Messages : 38
    Par défaut
    Merci pour votre aide, j'ai donc ajoute le .Value

    mais j'ai toujours la meme erreur.

    La selection des colonnes est elle bonne ?


    Private Sub Worksheet_Activate()
    Dim cel As Range
    Application.ScreenUpdating = False
    For Each cel In Range("P2:AUH2")
    If cel.Value = "" Then
    cel.EntireColumn.Hidden = True
    Else: cel.EntireColumn.Hidden = False
    End If
    Next
    Application.ScreenUpdating = True

    End Sub

    Tu as raison Joe, le Si ne sert a rien je vais l'enlever ...

  6. #6
    Invité
    Invité(e)
    Par défaut
    Bonsoir,
    Par défaut une range retourne value, mais effectivement il vaut mieux écrire value!

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    If Trim("" & cel.value) = "" Then

  7. #7
    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
    Non !

    Souvent, Range renvois par défaut la propriété .Value ... mais pas toujours

    On a plusieurs fois noirci le forum avec ce débat

  8. #8
    Invité
    Invité(e)
    Par défaut
    Bonjour Joe,
    Je m'en remet à toi, de toute façon c'est mieux de préciser la propreté concerné.

    Sur ce forum je ne le fait pas systématiquement, mais vue que je passe de langage en langage sur certains ça ne pardonne pas!

  9. #9
    Expert confirmé
    Homme Profil pro
    aucune
    Inscrit en
    Avril 2016
    Messages
    7 563
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 84
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : aucune

    Informations forums :
    Inscription : Avril 2016
    Messages : 7 563
    Par défaut
    On ne laisse pas VBA décider "par défaut" pour "rattraper" les absences de précision.
    On écrit proprement ainsi (exemple) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    Dim cel As Range ' ---> cel est donc un objet (un objet range)
     Application.ScreenUpdating = False
     For Each cel In Range("A2:B4").Cells '--->> on précise la collection d'objets parcourus
        If cel.Value = "" Then ' --->> on précise la propriété concernée de chaque objet parcouru en boucle
          cel.EntireColumn.Hidden = True
        Else
          cel.EntireColumn.Hidden = False
        End If
     Next
    Application.ScreenUpdating = True

  10. #10
    Expert confirmé Avatar de Patrice740
    Homme Profil pro
    Retraité
    Inscrit en
    Mars 2007
    Messages
    2 478
    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 478
    Par défaut
    Bonjour,

    Citation Envoyé par unparia Voir le message
    On ne laisse pas VBA décider "par défaut" pour "rattraper" les absences de précision.
    On écrit proprement ...[/CODE]
    Entièrement d'accord avec toi, le "par défaut" est la source de trop nombreux problèmes
    et j'ajouterais même qu'il faut au minimum préciser la feuille i.e :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    Dans un module de feuille :
    '...
     For Each cel In Me.Range("A2:B4").Cells 
     '....
    
    Et dans un module standard :
    '...
     For Each cel In Worksheets("Feuil1").Range("A2:B4").Cells 
    '....

  11. #11
    Membre averti
    Homme Profil pro
    Menuisier
    Inscrit en
    Octobre 2015
    Messages
    38
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Menuisier
    Secteur : Bâtiment

    Informations forums :
    Inscription : Octobre 2015
    Messages : 38
    Par défaut
    Bonjour,


    merci à tous votre aide, j'avoue ne pas tout comprendre sur les spécificités des types de variables et les propriétés.

    J'ai toujours le même problème avec l'erreur d'incomptabilité.

    La macro marche mais l'erreur apparait toujours sur la ligne If Cel.Value = "" then

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    Private Sub Worksheet_Activate()
        Dim cel As Range
        Application.ScreenUpdating = False
        For Each cel In Me.Range("P2:AUH2").Cells
        If cel.Value = "" Then
        cel.EntireColumn.Hidden = True
        Else: cel.EntireColumn.Hidden = False
        End If
        Next
        Application.ScreenUpdating = True
    End Sub

    Comment puis-je faire ? les formats des cellules me semblent bonnes (standard)

    Peux on inclure des lignes de codes supplémentaire pour ignorer l'erreur ?

  12. #12
    Expert confirmé Avatar de Patrice740
    Homme Profil pro
    Retraité
    Inscrit en
    Mars 2007
    Messages
    2 478
    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 478
    Par défaut
    Bonjour,

    Le problème peut venir du fait que la cellule contient une formule dont le résultat produit une erreur.

    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
    Private Sub Worksheet_Activate()
    Dim cel As Range
      Application.ScreenUpdating = False
      For Each cel In Me.Range("P2:AUH2").Cells
        If IsError(cel.Value) Then
          cel.EntireColumn.Hidden = True 'ou False
        Else
          If cel.Value = "" Then
            cel.EntireColumn.Hidden = True
          Else
            cel.EntireColumn.Hidden = False
          End If
        End If
      Next
      Application.ScreenUpdating = True
    End Sub

  13. #13
    Invité
    Invité(e)
    Par défaut
    Bonjour Unparia,

    C'est ma faute,c'est ma faute, c'est ma très grande faute

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

Discussions similaires

  1. [XL-2007] VBA : remplir un tableau // incomptabilité de type
    Par jnauche dans le forum Excel
    Réponses: 3
    Dernier message: 13/03/2014, 14h19
  2. [XL-2007] Incomptabilité de type
    Par DexX39800 dans le forum Macros et VBA Excel
    Réponses: 0
    Dernier message: 21/06/2011, 10h57
  3. Réponses: 2
    Dernier message: 05/06/2002, 12h29
  4. utilisation du meta type ANY
    Par Anonymous dans le forum CORBA
    Réponses: 1
    Dernier message: 15/04/2002, 12h36

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