Variable objet ou variable de bloc with non définie

Salut le fil,

Je n'aurais pas le temps aujourd'hui de regarder le fichier. Ce soir peut-être.

Je viens de voir ceci sur le post de 12h12

Ma question : comment ces deux feuilles se remplissent-elles .

Tout simplement avec des formules : dans la colonne I se trouve la formule SansDoublonsTrier comme indiquer en commentaires, le tableau n'est là que pour l'exemple, et permet de récupérer les valeurs d'une colonne sans doublons et triées. Cette plage peut servir ensuite pour alimenter une zone de liste, avec sa propriété List.

Exemple :

Pour les gens qui sont possesseur d'Office 2021 ou 365 il existe les nouvelle fonctions TRIER, UNIQUE, avec lesquelles tu peux arriver au même résultat.

Bonjour Jean-Paul,

Prenez tout votre temps, ce n'est pas d'une urgence extrême. Pour l'instant, je travaille sur le fichier de Jacques que j'ai refais entièrement : aujourd'hui, j'attaque les codes, les userform, etc. car j'ai modifié plusieurs choses (le nom des combo boxes, des textes boxes, etc.). J'ai envoyé un mail à Jacques la semaine dernière mais je n'ai toujours pas reçu de réponse de sa part.

Bonjour,

Jacques est décédé.

Quelle triste nouvelle ! Il était malade ?

Bonjour,

J'ai refait le fichier de Jacques en modifiant le nom des cb, tb, ListBox et j'en ai tenu compte dans les codes. Par contre, je n'ai pas compris le fonctionnement, notamment des feuilles Fonction tableau et CompteSansDoublonsCritères qui sont les feuilles qui m'intéressent le plus, je crois.

Dans formules, Gestionnaire des noms, le premier LibreServices : il est fait référence à la feuille CompteSansDoublonsCritères, colonne H. Or, dans ladite feuille, le colonne H est pour ainsi dire vide, sauf à un endroit où il est écrit Accueil.

Toujours dans la feuille CompteSansDoublonsCritères, cellule F2, il existe la formule suivante :

=comptesansdoublons($A$2:$A$31;$B$2:$B$31;E2); d'où vient comptesansdoublons. Toujours dans cette feuille, cellule H2, nous avons cette formule :

=comptesansdoublons($A$2:$A$31;$B$2:$B$31;F2); dans la formule précédente, il est fait référence à la cellule E2. Toujours dans cette feuille, mis à part les formules, comment la colonne F est-elle remplie (je n'ai pas compris les nombres qui sortent pour le nombre de conteneurs) ?

Salut le fil

Dans formules, Gestionnaire des noms, le premier LibreServices : il est fait référence à la feuille CompteSansDoublonsCritères, colonne H. Or, dans ladite feuille, le colonne H est pour ainsi dire vide, sauf à un endroit où il est écrit Accueil.

ListeServices est un champ nommé apparemment il n'est pas utilisé.

Toujours dans la feuille CompteSansDoublonsCritères, cellule F2, il existe la formule suivante :=comptesansdoublons($A$2:$A$31;$B$2:$B$31;E2)

d'où vient comptesansdoublons.

CompteSansDoublons et une fonction que tu peux retrouver dans le module Mod_Tableur. Quand tu crée une fonction dans un module elle est publique et donc accessible depuis les feuilles de calculs.
Si tu regardes la fonction de plus prés CompteSansDoublons(champ, champcritere, critere) tu te rends compte qu'il-y-a trois variable le champ de recherche, celui pour le critère et la troisième variable c'est le critère de recherche, la fonction renvoie un entier.

je n'ai pas compris les nombres qui sortent pour le nombre de conteneurs

On prend pour exemple les lignes qui contiennent CHARGES en colonne B de la feuille CompteSansDoublonCritère

  • Il y a 7 lignes
    • 6 lignes avec la référence 7015272554
    • 1 ligne avec la référence 7015272555

Donc deux références différentes c'est ce que renvoie la fonction. Fait le même calcul pour COMPTABILITE et GESTION et tu comprendra.

Bonjour Jean-Paul,

Pour la function CompteSansDoublons, c'est écrit ainsi; dans la feuille CompteSansDoublonsCritère, quand on tape la formule dans la cellule F2, dans la liste déroulante, à un moment donné apparait CompteSansDoublons : quand on valide la formule, les majuscules disparaissent. Il en est de même pour les formules matricielles. Pour ce qui est des conteneurs, j'ai compris. Merci pour ces informations. Et pour ce qui est de F2 d'un côté et E2 de l'autre côté (normalement, je pense que la cellule devrait être identique dans les deux cas). Et pour ce qui est du gestionnaire des noms, le premier ListeServices (cellule H2 qui semble être vide) ?

Dans la feuille CompteSansDoublosn, quand on clique dans la cellule H2, à gauche de la barre des formules, apparaît la mention text box 2 avec une flèche descendante : quand on clique sur cette flèche, la case est vide. Dans un très vieux fichier (que je n'ai plus), j'avais ce genre de chose et, autant que je m'en souvienne, la case était remplie mais comment, je n'ai aucun souvenir.

Avez-vous pu jeter un coup d'œil sur mon fichier MENUSV2 et voir ce qui entraine l'erreur et comment la corriger ? Avez-vous pu voir les instructions que vous ai transmises pour la création d'un dictionary (voir message de dimanche de 18 heures 59).

Je vous joints le fichier que j'ai créé d'après celui de Jacques. Impossible de remplir la colonne nombre de conteneurs. D'autre part, dans formules, Nom des gestionnaires : Services ne semble pas être utilisé (sauf erreur ou omission de ma part).

4boisgontier.xlsm (68.16 Ko)

Re,

Il ne faut pas toucher aux fonctions si tu n'est pas habitué !
Dans la fonction CompteSansDoublons il manque l'accent sur Critere If UCase(ChampCritere(i).Value) = UCase(Critere) Then Cela ne se produirait pas si Option Explicit était écrit en tête de tous les modules.

Comme dit dans mon précédant post ListeServices n'est pas utilisé.

De quel accent parles-tu ? Dans jb-dictionary_9, il n'y a pas d'accent à critere dans le if

J'ai vu l'erreur : dans le nom Function, il y avait un accent à critère qui était absent dans le if. Maintenant, cela fonctionne. Certaines cellules sont visiblement remplies manuellement. Les cellules ayant une formule matricielle peuvent-elles être modifiées si on supprime la partie matricielle; actuellement, avec la matrice, impossible de les modifier (J'ai trouvé : il faut modifier les colonnes A à E de la feuille FonctionTableur, ainsi la colonne I est automatiquement modifiée). Pour ce qui est d'option Explicit, je l'ai supprimée car je n'ai pas eu de réponse à ma question.

Au plaisir de te lire pour les autres problèmes soumis.

Bonjour BUDGETS, le fil, le forum,

Critère en orange à un accent grave.

UCase(critere) en rouge n'a pas d'accent grave, c'est cet accent que Jean-Paul mentionne.

Il faut que ces deux mots soient écrits pareils.

Function CompteSansDoublons(champ, ChampCritere, Critère)

Set MonDico = CreateObject("Scripting.Dictionary")

For i = 1 To champ.Count

If UCase(ChampCritere(i).Value) = UCase(critere) Then

If Not MonDico.exists(champ(i).Value) Then MonDico.Add champ(i).Value, champ(i).Value

End If

Next i

CompteSansDoublons = MonDico.Count

End Function

Bastr

Bonjour Bastr,

Merci, j'avais vu l'erreur. Je l'avais rectifiée et ton message est arrivé pendant que je le signalais à Jean-Paul

Re,

Pour ce qui est d'option Explicit, je l'ai supprimée car je n'ai pas eu de réponse à ma question.

Option Explicit oblige la déclaration des variables dans l'ensemble du module

Option Explicit, instruction (VBA) | Microsoft Learn

Exemple ici a n'est pas déclaré donc message d'erreur du compilateur

image

Ou sur une erreur de frappe :

image

d'où l'importance de Option Explicit.

Je m'étais permis de te demander, je cite de tête, "Dans le cas d'utilisation d'option explicit, dans le fichier de Jaques, quelles seraient les variables à déclarer et, pour chacune d'elles, son type". Voir message d'un vendredi à 15 heures 09 (page 2)

Re,

Pfff, trop long pour tout faire, mais pour exemple cette fonction :

Function CompteSansDoublons(champ, ChampCritere, Critère)
    Set MonDico = CreateObject("Scripting.Dictionary")
    For i = 1 To champ.Count
        If UCase(ChampCritere(i).Value) = UCase(critere) Then
            If Not MonDico.exists(champ(i).Value) Then MonDico.Add champ(i).Value, champ(i).Value
        End If
    Next i
    CompteSansDoublons = MonDico.Count
End Function

Peut devenir :

Function CompteSansDoublons(Champ As Range, ChampCritere As Range, Critere As String)
  ' // Comme l'on fait du Late Binding le type MonDico est inconnu, on le déclare donc en Objet
  Dim MonDico As Object
  Set MonDico = CreateObject("Scripting.Dictionary")

  ' // 
   Dim i As Long
  For i = 1 To Champ.Count
    If UCase(ChampCritere(i).Value) = UCase(Critere) Then
      If Not MonDico.Exists(Champ(i).Value) Then _
          MonDico.Add Champ(i).Value, Champ(i).Value
    End If
  Next i
  CompteSansDoublons = MonDico.Count
End Function

Un peu de lecture

Early and Late Binding - Visual Basic | Microsoft Learn

Long (type de données) - Visual Basic | Microsoft Learn

Dans Mod_Dictionnaire, je n'arrive pas à déclarer ref (j'avais opté pour string mais variable non définie, ensuite j'ai opté pour long mais toujours variable non définie puis variant mais encore variable non définie).

Re,

Là c'est l'exemple qui tue...

Le tableau peut contenir des nombre, des chaines, etc...
Ref est en relation avec a, gauc, droi donc tout en variant

Bonjour Jean-Paul,

Merci pour ta réponse. Je viens de m'apercevoir que j'avais déclaré ref as variant dans Sub dictionnnaire au lieu de Sub Tri. Déclarée au bon endroit, je n'ai plus le message d'erreur.

D'après l'instruction, j'essaie de comprendre et, de là, je mets un type qui me semble approprié sinon si j'hésite je mets variant. Plus j'avance, plus je trouve sensationnel de déclarer les variables dans un module public : là je suis obligé de revenir en arrière pour voir le type de la variable et lui affecter le même type. Pour moi, c'est une perte de temps.

Toutes mes variables sont déclarées. Merci de perdre un peu de ton temps précieux pour me dire si le type est correct pour chacune des variables.

Dans la feuille CompteSansDoublonsCritere, impossible de voir le nombre de conteneurs du service DSF. Merci de me guider. Par la même occasion, comment procéder pour modifier une formule matricielle ? J'ai trouvé mais il y a un hic : DSF apparaît bien avec 1 conteneur mais Gestion a disparu et impossible de le faire réapparaître.

J'ai créé un module Module_VariablesPubliques dans lequel j'ai défini toutes les variables. Mais cela ne marche pas, il faut les déclarer dans les procédures. Dans un autre fichier, cela fonctionnait. Si tu as une idée du pourquoi, merci de me le signaler.

Rechercher des sujets similaires à "variable objet bloc definie"