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 :

Contrôle des erreurs [XL-2003]


Sujet :

Macros et VBA Excel

  1. #1
    Membre à l'essai
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Novembre 2014
    Messages
    19
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Technicien maintenance
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Novembre 2014
    Messages : 19
    Points : 11
    Points
    11
    Par défaut Contrôle des erreurs
    Bonjour à tous.

    J'ai un petit problème à vous soumettre

    Contexte :

    Un gros tableau d'une quarantaine de colonne et qui à terme contiendra environ 9000 lignes.

    Le problème :

    J'aimerais que dans une colonne (on va dire la 41ème), je puisse voir le nom des colonnes vides, en sachant que parmi les 40 colonnes quelques une ne font pas partis du problème (elles sont facultative).

    Le petit dessin

    Nom : tableau.JPG
Affichages : 128
Taille : 18,4 Ko


    Sur la capture, je n'ai pas mis de colonne facultative, mais je vais avoir une colonne FAX qui ne devra pas être prise en compte dans le "résultat"
    D'avance merci pour votre aide.

    PS : C'est pour le boulot, sous Excel 2003

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


    Avec une fonction NbVal. Par exemple : où vous ajoutez les groupes de cellules non facultatives.


    Cordialement.

  3. #3
    Membre émérite Avatar de Thautheme
    Homme Profil pro
    salarié
    Inscrit en
    Août 2014
    Messages
    1 373
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : salarié

    Informations forums :
    Inscription : Août 2014
    Messages : 1 373
    Points : 2 594
    Points
    2 594
    Par défaut
    Bonjour le fil, bonjour le forum,

    Une autre proposition par 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
    16
    17
    18
    19
    Sub Macro1()
    Dim O As Object 'déclare la variable O (Onglet)
    Dim TC As Variant 'déclare la variable TC (Tableau de Cellules)
    Dim DC As Byte 'déclare la variable DC (Dernière Colonne)
    Dim I As Integer 'déclare la variable I (Incrément)
    Dim J As Byte 'déclare la variable J (incrément)
    Dim Info As String 'déclare la variable Info
     
    Set O = Sheets("Feuil1") 'définit l'onglet O (à adapter)
    TC = O.Range("A1").CurrentRegion 'définit le tableau de cellules TC
    DC = UBound(TC, 2) 'définit la dernière colonne DC du tableau TC
    For I = 2 To UBound(TC, 1) 'boucle 1 : sur toutes les lignes I du tableau TC (en partant de la seconde)
        For J = 1 To DC - 1 'boucle 2 : sur toutes les colonnes J du tableau TC (sauf la dernière)
            'si la valeur ligne I / colonne J du tableau TC est vide, définit la variable Info
            If TC(I, J) = "" Then Info = IIf(Info = "", TC(1, J), Info & ", " & TC(1, J))
        Next J 'prochaine colonne de la boucle 2
        O.Cells(I, DC).Value = Info 'place info dans la dernière colonne de la ligne I du tableau TC
    Next I 'prochaine ligne de la boucle 1
    End Sub
    À plus,

    Thauthème

    Je suis Charlie

  4. #4
    Membre à l'essai
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Novembre 2014
    Messages
    19
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Technicien maintenance
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Novembre 2014
    Messages : 19
    Points : 11
    Points
    11
    Par défaut
    Bonjour.

    Merci pour vos réponses.

    Je ne sais pas trop adapté votre code.

    J'ai joint le tableau, j'ai enlevé tous le code VBA et les macros (formulaire de saisie et modification) pour que ce soit plus clair.


    Tableau Morgan Developpez.xls

    Encore merci.


    PS : je débute en VBA, je viens de recevoir le livre Excel et VBA 2010-2013 pour les nuls, pour vous dire le niveau

  5. #5
    Membre émérite Avatar de Thautheme
    Homme Profil pro
    salarié
    Inscrit en
    Août 2014
    Messages
    1 373
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : salarié

    Informations forums :
    Inscription : Août 2014
    Messages : 1 373
    Points : 2 594
    Points
    2 594
    Par défaut
    Bonjour le fil, bonjour le forum,

    Ton fichier modifié en pièce jointe. J'ai rajouté un CommandButton et une colonne Infos manquantes à la fin...
    Fichiers attachés Fichiers attachés
    À plus,

    Thauthème

    Je suis Charlie

  6. #6
    Membre éprouvé
    Avatar de eric4459
    Homme Profil pro
    Ingénieur Gestion de Projets
    Inscrit en
    Avril 2014
    Messages
    605
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes de Haute Provence (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Ingénieur Gestion de Projets
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2014
    Messages : 605
    Points : 1 124
    Points
    1 124
    Par défaut
    Bonjour Thautheme, morgan, le forum
    J'ai testé ton code et remplacé
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    If TC(I, J) = "" Then Info = IIf(Info = "", TC(1, J), Info & ", " & TC(1, J))
    par
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    If TC(I, J) = "" Then Info = IIf(Info = "", TC(3, J), Info & ", " & TC(3, J))
    sinon cela ne donnait rien.
    Autre souci, en pas à pas, tout se passe bien, j'ai testé en remplissant deux lignes, par contre comme je n'ai que deux lignes le code va chercher un max d'infos et fini par planter si je lance la macro en auto(c'est ce qui s'est passé sur mon poste).
    Il faudrait faire une boucle sur une colonne dont les données sont obligatoires, ou sont toujours renseignées.
    Morgan, y-a-t-il une colonne qui sera toujours renseignée à chaque saisi d'une nouvelle ligne?
    Eric
    "Vous n’avez cessé d’essayer ? Vous n’avez cessé d’échouer ? Aucune importance !
    Réessayez, échouez encore, échouez mieux." Samuel Beckett
    Pensez aux balises et
    Visitez les FAQ Excel et allez faire un tour ici
    Tutoriels de SilkyRoad

  7. #7
    Membre émérite Avatar de Thautheme
    Homme Profil pro
    salarié
    Inscrit en
    Août 2014
    Messages
    1 373
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : salarié

    Informations forums :
    Inscription : Août 2014
    Messages : 1 373
    Points : 2 594
    Points
    2 594
    Par défaut
    Bonjour le fil, bonjour le forum,

    Merci Éric ! Tu as tout à fait raison je navet (dans ce cas on peut...) pas fais l'adaptation au tableau de Morgan. Heureusement que tu veilles au grain...
    Pour la seconde remarque, comme dans son fichier Range("A1").CurrentRegion prenait en compte tout le tableau j'ai laissé comme ça mais tu as, encore une fois, raison de signalé cette anomalie.
    À plus,

    Thauthème

    Je suis Charlie

  8. #8
    Membre à l'essai
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Novembre 2014
    Messages
    19
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Technicien maintenance
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Novembre 2014
    Messages : 19
    Points : 11
    Points
    11
    Par défaut
    Re Bonjour.

    Effectivement, ça fait planter Excel !!

    Les trois premiers colonnes sont toujours remplis.

    Merci encore.

  9. #9
    Membre émérite Avatar de Thautheme
    Homme Profil pro
    salarié
    Inscrit en
    Août 2014
    Messages
    1 373
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : salarié

    Informations forums :
    Inscription : Août 2014
    Messages : 1 373
    Points : 2 594
    Points
    2 594
    Par défaut
    Bonsoir le fil, bonsoir le forum,

    Un code testé qui devrait convenir :

    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
    Private Sub CommandButton1_Click()
    Dim O As Object 'déclare la variable O (Onglet)
    Dim DL As Integer 'déclare la variable DL (Dernière Ligne)
    Dim DC As Byte 'déclare la variable DC (Dernière Colonne)
    Dim TC As Variant 'déclare la variable TC (Tableau de Cellules)
    Dim I As Integer 'déclare la variable I (Incrément)
    Dim J As Byte 'déclare la variable J (incrément)
    Dim Info As String 'déclare la variable Info
     
    ActiveCell.Select 'enlève le focus au bouton
    Application.ScreenUpdating = False 'masque les rafraîchissements d'écran
    Application.Calculation = xlManual 'empêche le recalcul des formules
    Set O = Sheets("Suivi Participants AIJ IEJ") 'définit l'onglet O
    DL = O.Cells(Application.Rows.Count, 1).End(xlUp).Row 'définit la dernière ligne éditée DL de la colonne 1 (=A) de l'onglet O
    DC = O.Cells(3, Application.Columns.Count).End(xlToLeft).Column 'définit la dernière colonne éditée DC de la lignbe 3 de l'onglet O
    TC = O.Range(O.Cells(1, 1), O.Cells(DL, DC)) 'définit le tableau de cellules TC
    For I = 4 To UBound(TC, 1) 'boucle 1 : sur toutes les lignes I du tableau TC (en partant de la quatrième)
        Info = "" 'initialise la variable info
        For J = 1 To DC - 1 'boucle 2 : sur toutes les colonnes J du tableau TC (sauf la dernière)
            'si la valeur ligne I / colonne J du tableau TC est vide, définit la variable Info
            If TC(I, J) = "" Then Info = IIf(Info = "", TC(3, J), Info & ", " & TC(3, J))
        Next J 'prochaine colonne de la boucle 2
        O.Cells(I, DC).Value = Info 'place info dans la dernière colonne de la ligne I du tableau TC
    Next I 'prochaine ligne de la boucle 1
    Application.ScreenUpdating = True 'affiche les rafraîchissements d'écran
    Application.Calculation = xlCalculationAutomatic 'permet le recalcul des formules
    End Sub
    Avec toutes mes excuses pour les nombreuses erreurs...
    À plus,

    Thauthème

    Je suis Charlie

  10. #10
    Membre éprouvé
    Avatar de eric4459
    Homme Profil pro
    Ingénieur Gestion de Projets
    Inscrit en
    Avril 2014
    Messages
    605
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes de Haute Provence (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Ingénieur Gestion de Projets
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2014
    Messages : 605
    Points : 1 124
    Points
    1 124
    Par défaut
    Bonjour Thautheme, le forum
    Thautheme j'ai testé ton code, il ne génère plus de plantage d'Excel.
    Cependant, lors de mon test, la valeur de la dernière colonne ne prend pas en compte la valeur de la variable "info", qui évolue correctement si plusieurs colonnes sont vide (espion en place).
    Voici la valeur affichée par mon espion:
    Watch : : Info : "Prénom, Genre HOM/FEM, Commune de naissance (libellé), Commune (libellé), Téléphone 1 , Téléphone 2, Email, Date de début période, AGE (calcul automatique), Modalité, Q1, Q1b,
    La ligne de code suivante:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     O.Cells(I, DC).Value = Info
    me donne le résultat suivant:
    Prénom, Genre
    Y-aurait-il un autre paramètre à spécifier pour que la cellule "O.Cells(I, DC).Value " prenne bien la valeur de la variable "info"?
    "Vous n’avez cessé d’essayer ? Vous n’avez cessé d’échouer ? Aucune importance !
    Réessayez, échouez encore, échouez mieux." Samuel Beckett
    Pensez aux balises et
    Visitez les FAQ Excel et allez faire un tour ici
    Tutoriels de SilkyRoad

  11. #11
    Membre éprouvé
    Avatar de eric4459
    Homme Profil pro
    Ingénieur Gestion de Projets
    Inscrit en
    Avril 2014
    Messages
    605
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes de Haute Provence (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Ingénieur Gestion de Projets
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2014
    Messages : 605
    Points : 1 124
    Points
    1 124
    Par défaut
    Bonjour à tous,
    La valeur de la variable est correctement reportée dans la cellule "O.Cells(I, DC)", le problème est en fait du au format utilisé dans l'intitulé des colonnes pour lequel la mise à la ligne dans la cellule a été utilisée (Alt + Enter) à plusieurs reprises.
    Nom : Format Intitulé Colonne.jpg
Affichages : 125
Taille : 35,9 Ko

    Donc sans augmenter la hauteur de ligne on ne voyait qu'une seule entrée

    Eric
    "Vous n’avez cessé d’essayer ? Vous n’avez cessé d’échouer ? Aucune importance !
    Réessayez, échouez encore, échouez mieux." Samuel Beckett
    Pensez aux balises et
    Visitez les FAQ Excel et allez faire un tour ici
    Tutoriels de SilkyRoad

  12. #12
    Membre émérite Avatar de Thautheme
    Homme Profil pro
    salarié
    Inscrit en
    Août 2014
    Messages
    1 373
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : salarié

    Informations forums :
    Inscription : Août 2014
    Messages : 1 373
    Points : 2 594
    Points
    2 594
    Par défaut
    Bonjour le fil, bonjour le forum,

    Encore merci Éric pour tes tests. Sur un tableau aussi grand (fourni sans aucune données) j'ai fait des tests rapides sur une centaine de lignes avec au maximum 3 colonnes vides par ligne et je n'avais pas remarqué ces anomalies. De toutes manière il semblerait que Morgan ait disparu de ce post...
    À plus,

    Thauthème

    Je suis Charlie

  13. #13
    Membre à l'essai
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Novembre 2014
    Messages
    19
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Technicien maintenance
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Novembre 2014
    Messages : 19
    Points : 11
    Points
    11
    Par défaut
    Non, non, je n'ai pas disparu.

    Simplement une grosse fin de semaine et quelques soucis avec mon pc.

    Je viens d'essayer, ça fonctionne parfaitement, j'ai viré les sauts de ligne dans les intitulés de colonne.

    Un grand merci à vous, ça va me faire gagner un temps fou au boulot, il ne me reste plus qu'a comprendre votre code.

    Lundi, je teste en condition réelle (excel 2003 et tableau avec 4500 lignes pour le moment).

    Encore un grand merci.

    PS : Comment exclure une colonne de la vérification, par exemple "téléphone 2" est facultatif.

  14. #14
    Membre éprouvé
    Avatar de eric4459
    Homme Profil pro
    Ingénieur Gestion de Projets
    Inscrit en
    Avril 2014
    Messages
    605
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes de Haute Provence (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Ingénieur Gestion de Projets
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2014
    Messages : 605
    Points : 1 124
    Points
    1 124
    Par défaut
    Bonjour Morgan,
    Peut-être comme ceci:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    If TC(I, J) = "" Then Info = IIf(Info = "" and (TC(3,J)<>"téléphone2" or TC(3,J)<> "autre critère"), TC(3, J), Info & ", " & TC(3, J))
    Eric
    "Vous n’avez cessé d’essayer ? Vous n’avez cessé d’échouer ? Aucune importance !
    Réessayez, échouez encore, échouez mieux." Samuel Beckett
    Pensez aux balises et
    Visitez les FAQ Excel et allez faire un tour ici
    Tutoriels de SilkyRoad

  15. #15
    Rédacteur
    Avatar de Philippe Tulliez
    Homme Profil pro
    Formateur, développeur et consultant Excel, Access, Word et VBA
    Inscrit en
    Janvier 2010
    Messages
    12 729
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur, développeur et consultant Excel, Access, Word et VBA

    Informations forums :
    Inscription : Janvier 2010
    Messages : 12 729
    Points : 28 555
    Points
    28 555
    Billets dans le blog
    53
    Par défaut
    Bonjour Robert,
    Sans avoir regardé en détail la procédure que tu proposes, je me demande pourquoi tu déclares la variable O comme Object et pas comme Worksheet.
    Comme ceci
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Dim O As Worksheet 'déclare la variable O (Onglet)
    En la déclarant comme objet, tu perds tout l'avantage de la fonctionnalité IntelliSense.
    Philippe Tulliez
    Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément. (Nicolas Boileau)
    Lorsque vous avez la réponse à votre question, n'oubliez pas de cliquer sur et si celle-ci est pertinente pensez à voter
    Mes tutoriels : Utilisation de l'assistant « Insertion de fonction », Les filtres avancés ou élaborés dans Excel
    Mon dernier billet : Utilisation de la fonction Dir en VBA pour vérifier l'existence d'un fichier

  16. #16
    Membre émérite Avatar de Thautheme
    Homme Profil pro
    salarié
    Inscrit en
    Août 2014
    Messages
    1 373
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : salarié

    Informations forums :
    Inscription : Août 2014
    Messages : 1 373
    Points : 2 594
    Points
    2 594
    Par défaut
    Bonjour le fil, bonjour le forum,

    @Philippe,
    Dans un autre forum j'avais lu une longue discussion entre experts et j'avais décidé, comme le préconisaient certains d'entre eux, d'utiliser de type Object pour déclarer mes onglets. Je serais incapable de te préciser ce qui m'avait fait opter pour ce choix car mon niveau de VBA était ridicule par rapport au leur... Toutefois, tu es le second à me faire cette remarque et par conséquent je me pose la question sur ma décision. Outre le fait de la perte de la fonction Intellisense, qui à mes yeux ne paraissait pas si importante, aurais-tu la gentillesse de m'expliquer un peu plus. Et surtout, la différence entre Sheets et Worksheets que je n'ai toujours pas assimilée...


    [Edition]
    Pardon, je n'avais pas vu ta demande Morgan... La proposition d'Éric est correcte mais je te propose d'utiliser un Select Case qui te permettra d'ajouter simplement de nouvelles colonnes que tu voudrais exclure :

    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
    Private Sub CommandButton1_Click()
    Dim O As Object 'déclare la variable O (Onglet)
    Dim DL As Integer 'déclare la variable DL (Dernière Ligne)
    Dim DC As Byte 'déclare la variable DC (Dernière Colonne)
    Dim TC As Variant 'déclare la variable TC (Tableau de Cellules)
    Dim I As Integer 'déclare la variable I (Incrément)
    Dim J As Byte 'déclare la variable J (incrément)
    Dim Info As String 'déclare la variable Info
     
    ActiveCell.Select 'enlève le focus au bouton
    Application.ScreenUpdating = False 'masque les rafraîchissements d'écran
    Application.Calculation = xlManual 'empêche le recalcul des formules
    Set O = Sheets("Suivi Participants AIJ IEJ") 'définit l'onglet O
    DL = O.Cells(Application.Rows.Count, 1).End(xlUp).Row 'définit la dernière ligne éditée DL de la colonne 1 (=A) de l'onglet O
    DC = O.Cells(3, Application.Columns.Count).End(xlToLeft).Column 'définit la dernière colonne éditée DC de la lignbe 3 de l'onglet O
    TC = O.Range(O.Cells(1, 1), O.Cells(DL, DC)) 'définit le tableau de cellules TC
    For I = 4 To UBound(TC, 1) 'boucle 1 : sur toutes les lignes I du tableau TC (en partant de la quatrième)
        Info = "" 'initialise la variable info
        For J = 1 To DC - 1 'boucle 2 : sur toutes les colonnes J du tableau TC (sauf la dernière)
            Select Case J 'agit en fonction de la colonne J
                Case 14 'cas où J vaut 14 (= colonne N)
                    'rien ne se passe
                Case Else 'tous les autres autre cas
                    'si la valeur ligne I / colonne J du tableau TC est vide, définit la variable Info
                    If TC(I, J) = "" Then Info = IIf(Info = "", TC(3, J), Info & ", " & TC(3, J))
            End Select 'fin de l'action en fonction de la colonne J
        Next J 'prochaine colonne de la boucle 2
        O.Cells(I, DC).Value = Info 'place info dans la dernière colonne de la ligne I du tableau TC
    Next I 'prochaine ligne de la boucle 1
    Application.ScreenUpdating = True 'affiche les rafraîchissements d'écran
    Application.Calculation = xlCalculationAutomatic 'permet le recalcul des formules
    End Sub
    Regarde les lignes 20 à 26 du nouveau code ci-dessus. Si tu veux exclure une ou plusieurs autres colonnes, il te suffit, à la ligne 21, de mettre une virgule pour séparer et de rajouter le numéro de la colonne. Par exemple tu voudrais exclure les colonnes Prénom, Q1b et Q4, la ligne 21 du code deviendrait :
    À plus,

    Thauthème

    Je suis Charlie

  17. #17
    Rédacteur
    Avatar de Philippe Tulliez
    Homme Profil pro
    Formateur, développeur et consultant Excel, Access, Word et VBA
    Inscrit en
    Janvier 2010
    Messages
    12 729
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur, développeur et consultant Excel, Access, Word et VBA

    Informations forums :
    Inscription : Janvier 2010
    Messages : 12 729
    Points : 28 555
    Points
    28 555
    Billets dans le blog
    53
    Par défaut
    Bonjour Robert,
    Sheets représente la collection de toutes les feuilles du classeur et Worksheets la collection des feuilles de calcul du classeur.
    Quand on déclare une variable comme Object, c'est trop général. Tout est objet, un classeur, une feuille, une cellule, un formulaire, etc. donc il est préférable de le préciser par Workbook, Woorksheet, Cells, UserForm, etc.
    En plus de profiter de l'IntelliSense et grâce à cette précision, la variable hérite de toutes les méthodes et propriétés de cet objet.
    Philippe Tulliez
    Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément. (Nicolas Boileau)
    Lorsque vous avez la réponse à votre question, n'oubliez pas de cliquer sur et si celle-ci est pertinente pensez à voter
    Mes tutoriels : Utilisation de l'assistant « Insertion de fonction », Les filtres avancés ou élaborés dans Excel
    Mon dernier billet : Utilisation de la fonction Dir en VBA pour vérifier l'existence d'un fichier

  18. #18
    Membre émérite Avatar de Thautheme
    Homme Profil pro
    salarié
    Inscrit en
    Août 2014
    Messages
    1 373
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : salarié

    Informations forums :
    Inscription : Août 2014
    Messages : 1 373
    Points : 2 594
    Points
    2 594
    Par défaut
    Bonjour le fil, bonjour le forum,

    Merci Philippe c'est plus clair et je vais écouter tes conseils mais j'ai juste une dernière question : pourquoi VBA lui même utilise-t-il Objet pour un onglet au lieu de Sheet dans le cas ci-dessous, par exemple, ainsi que dans tous les cas relatifs aux onglets dans le composant ThisWorkBook :


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Private Sub Workbook_SheetActivate(ByVal Sh As Object)
    À plus,

    Thauthème

    Je suis Charlie

  19. #19
    Rédacteur
    Avatar de Philippe Tulliez
    Homme Profil pro
    Formateur, développeur et consultant Excel, Access, Word et VBA
    Inscrit en
    Janvier 2010
    Messages
    12 729
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur, développeur et consultant Excel, Access, Word et VBA

    Informations forums :
    Inscription : Janvier 2010
    Messages : 12 729
    Points : 28 555
    Points
    28 555
    Billets dans le blog
    53
    Par défaut
    Bonjour,
    Parce-que sh qui représente la feuille peut être un objet Worksheet ou Chart (feuille graphique). Il y a aussi les feuilles Macro qui curieusement avec la fonction TypeName sont affichées comme Worksheet mais si l'on boucle sur la collection Worksheets ces feuilles ne sont pas reprises.
    Philippe Tulliez
    Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément. (Nicolas Boileau)
    Lorsque vous avez la réponse à votre question, n'oubliez pas de cliquer sur et si celle-ci est pertinente pensez à voter
    Mes tutoriels : Utilisation de l'assistant « Insertion de fonction », Les filtres avancés ou élaborés dans Excel
    Mon dernier billet : Utilisation de la fonction Dir en VBA pour vérifier l'existence d'un fichier

  20. #20
    Membre à l'essai
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Novembre 2014
    Messages
    19
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Technicien maintenance
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Novembre 2014
    Messages : 19
    Points : 11
    Points
    11
    Par défaut
    Merci, merci!!


    Comme je le disais, il ne me reste plus qu'a comprendre votre code !!

    Pour le moment, j'ai l'impression d'entendre Sheldon parler en Klingon

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 2 12 DernièreDernière

Discussions similaires

  1. Réponses: 5
    Dernier message: 11/04/2012, 13h57
  2. Zend Form contrôle des erreurs
    Par n1k00 dans le forum Zend Framework
    Réponses: 1
    Dernier message: 26/11/2009, 01h17
  3. Erreur du job 'Contrôle des agents de réplication'
    Par pasobo dans le forum Réplications
    Réponses: 0
    Dernier message: 23/06/2009, 12h25
  4. Codes de contrôle des imprimantes
    Par hetzel dans le forum Langages de programmation
    Réponses: 3
    Dernier message: 21/03/2003, 18h17

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