Forums XLPages

Tous les messages (myDearFriend!)

« 1 2 3 4 5 6 7 8 ... 149 »
Re: Userform, Liste déroulante dépendante sans doublon
#41
Webmestre

Inscription: 18/05/2006
De Saône-et-Loire (71)

Messages: 1539

Système d'exploitation:
PC
Version Excel utilisée:
97, 2000, 2002, 2003, 2007, 2010, 2013, 2016 et 365
Posté le : 28-01-2021 17h46

Bonjour Theo44,

 

Tu trouveras en pièce jointe peut-être une façon de faire pour répondre à ton besoin.

 

J'ai tout d'abord créé la Function suivante :

 

DANS LE MODULE DE CODE DU USERFORM

Private Function defListeTiers(valTC As String) As Variant
' myDearFriend! - www.mdf-xlpages.com
Dim Dict As Object
Dim vTabTemp As Variant
Dim L As Long

    Set Dict = CreateObject("Scripting.Dictionary")
    'Mémorise les valeurs des plages "V_TC" et "L_TC_Tiers" (colonnes I et J) dans un seul tableau variant à 2 colonnes
    vTabTemp = Sheets("P").Range("V_TC").Resize(ColumnSize:=2).Value
    'On parcourt ligne à ligne le tableau variant
    For L = 1 To UBound(vTabTemp, 1)
        'Si correspondance avec le choix en Combobox "L_TC"
        If vTabTemp(L, 1) = valTC Then
            'On ajoute l'item au dictionary (sans doublon!)
            Dict(vTabTemp(L, 2)) = ""
        End If
    Next L
    'Si liste vide alors on sort de la fonction
    If Dict.Count = 0 Then Exit Function
    'On récupère la liste des items sans doublon
    vTabTemp = Dict.Keys
    Set Dict = Nothing
    ' On retourne la liste avec tri
    defListeTiers = Tri(vTabTemp, LBound(vTabTemp), UBound(vTabTemp))
End Function

 

Puis, j'ai aujouté une procédure évènementielle, laquelle est déclenchée par tout changement de valeur dans la liste de choix "Type contrat" :

 

Private Sub L_TC_Change()
Dim vTabTemp As Variant
    'Selon choix dans la liste "L_TC", on redéfinit la liste "L_Tiers"
    vTabTemp = defListeTiers(L_TC.Text)
    With L_Tiers.Style = fmStyleDropDownList
        .Clear
        If Not IsEmpty(vTabTemp) Then
            .List = vTabTemp
            .ListIndex = -1
        End If
    End With
End Sub

 

Attention cependant : pour être sûr que le fonctionnement soit fiable, il te faut impérativement modifier la propriété "Style" de tes ComboBox sur "fmStyleDropDownList" (qui n'est pas la valeur par défaut).

Ca permet d'obliger l'utilisateur à faire un choix existant dans la liste, et l'empeche de saisir une autre valeur non proposée.

C'est ce que j'ai fait pour tes 2 ComboBox "L_TC" et "L_Tiers".

 

J'ai tenté de commenter au maximum le code utilisé pour que tu puisses le comprendre au mieux.

 

Par ailleurs, (et j'aurai dû commencer par ça), je me permets 2 conseils concernant ton code  :

  1. - donner le même nom aux plages nommées et aux contrôles de ton Userform n'est pas la meilleure idée. Ca donne quelque chose d'assez confus dans le code, selon moi.
     
  2. - La déclaration des variables est toujours hautement recommandée ! Et l'utilisation de l'instruction "Option explicit" en tête de module est requise sans modération... (à l'occasion et si tu as envie d'en savoir plus, je te conseille cet article "VBA et les variables". Il demande certainement à être réactualisé, mais son contenu reste toujours valable à mon avis). J'ai d'ailleurs modifié légèrement ta procédure de Tri en conséquence.

 

En espérant que ça puisse t'inspirer pour la suite de ton projet...

 

Bien cordialement,

 

Pièce jointe:
zip PourTheo44 - P1.zip   [ Taille: 37.91 Ko - Téléchargements: 397 ]

Didier_mDF
Image redimensionnée
Le Webmaster

La réponse vous satisfait ? Merci de revenir solder le sujet en [résolu], voir ce lien
Hors Ligne
Rapport   Haut 

Re: Afficher une msgbox
#42
Webmestre

Inscription: 18/05/2006
De Saône-et-Loire (71)

Messages: 1539

Système d'exploitation:
PC
Version Excel utilisée:
97, 2000, 2002, 2003, 2007, 2010, 2013, 2016 et 365
Posté le : 27-01-2021 00h53

Re,

Citation :

Parafun a écrit :

petite Question Didier : Le code fonctionne impeccablement bien pour un doublon, quid si il y a 2 3 4 ..bref plusieurs doublons, le MSGBOX n'en affiche qu'un seul...



En fait, c'est un peu ce dont je te parlais dans mon premier post ci-dessus :

si je décide qu'il faut cliquer sur un bouton, alors faut-il que le code parcourt tout le tableau et recherche, ligne après ligne, la présence de doublons ? Dans l'affirmative : en cas de présence de multiples doublons (selon la taille du tableau), l'utilisateur risque fort de subir une overdose de MsgBox d'alerte en cascade, non ?


Tu as donc 2 possibilités :

  1.  La première, c'est de :
    • cliquer sur le bouton pour lancer la détection de doublons
    • corriger le 1er doublon détecté (correction facilitée avec l'indication des numéros de lignes concernées lors de l'alerte).
    • puis, relancer une détection pour l'éventuel doublon suivant.
    • corriger.
    • etc...
    • jusqu'à que tu obtiennes le message "Détection terminée. Aucun doublon trouvé."

      Dans le doute, c'est la solution que j'avais en tête en te proposant ce code.

  2. La deuxième solution, c'est sans doute de :
    • supprimer l'instruction "Exit Sub" dans le code présenté.


C'est à tester et peut-être à adapter. Mais sans cette instruction, les boucles de recherche continueront de tourner jusqu'à la fin. Mais, s'il y a plusieurs doublons, tu obtiendras les MsgBox l'une après l'autre, sans aucune pause entre elles... Il te faudra donc noter les numéros de lignes concernées au fur et à mesure, et faire l'ensemble des corrections à l'issue.


Bien cordialement,


Didier_mDF
Image redimensionnée
Le Webmaster

La réponse vous satisfait ? Merci de revenir solder le sujet en [résolu], voir ce lien
Hors Ligne
Rapport   Haut 

Re: Userform, Liste déroulante dépendante sans doublon
#43
Webmestre

Inscription: 18/05/2006
De Saône-et-Loire (71)

Messages: 1539

Système d'exploitation:
PC
Version Excel utilisée:
97, 2000, 2002, 2003, 2007, 2010, 2013, 2016 et 365
Posté le : 26-01-2021 17h22

Bonjour Théo, et bienvenue sur mDF-XLpages.com Content(e)



Maintenant je chercher à lié la liste T_Tiers au résultat de la selection de la 1ére liste L_TC le lien étant effectué colonne J.


A vrai dire, je n'ai pas compris ce que tu entends par "lier la liste T_Tiers au résultat de la selection de la 1ère liste L_TC"... "le lien étant effectué colonne J"


Je pense que le mieux serait que tu cites un ou plusieurs exemples complets, par exemple :

  • si je sélectionne "Stock" dans la liste L_TC
  • alors je devrais obtenir... dans la liste T_Tiers ou autre... etc

Sinon, ce n'est pas facile de comprendre exactement ce que tu cherches à faire...


Par ailleurs, j'ai vu que tu avais nommé les plages de tes listes sur la page P, mais visiblement, tu ne t'en sers pas dans ton code VBA. C'est voulu ?

Peut-être que ces plages nommés sont variables et vont évoluées dans le temps ?


Bien cordialement,


Didier_mDF
Image redimensionnée
Le Webmaster

La réponse vous satisfait ? Merci de revenir solder le sujet en [résolu], voir ce lien
Hors Ligne
Rapport   Haut 

Re: Afficher une msgbox
#44
Webmestre

Inscription: 18/05/2006
De Saône-et-Loire (71)

Messages: 1539

Système d'exploitation:
PC
Version Excel utilisée:
97, 2000, 2002, 2003, 2007, 2010, 2013, 2016 et 365
Posté le : 26-01-2021 17h02

Bonjour Parafun, le Forum,

Tout d 'abord, ne le prends pas mal Parafun, mais je dirais que la procédure VBA que tu a insérée dans le module de code de ta feuille (Feuil1), n'est pas vraiment... "académique" .
(Et j'avoue que je suis même surpris qu'il ne provoque pas un plantage Excel!)

En fait, ta procédure VBA pourrait être de ce type :

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
     ' TON CODE ICI...
End Sub

... c'est ce qu'on appelle une procédure "évènementielle" et qui se lance automatiquement lorsque l'utilisateur déplace la sélection d'une cellule à une autre. Cela signifie qu'à chaque fois que le curseur est déplacé dans la feuille, ton code se lance !
Il existe d'autres évènements de feuille exploitables ainsi, mais l'évènement "Worksheet_SelectionChange()" ne me semble pas une bonne idée dans ton cas selon moi, car il va tourner en continue et se lancer à chaque déplacement dans la feuille!

Sinon, ta procédure VBA pourrait être de ce type :

Sub Alerte()
     ' TON CODE ICI...
End Sub

... ce qui est utilisable, par exemple, si tu décides de lancer ton code via un clic sur un objet bouton notamment.
Il suffit d'affecter cette procédure "Sub" à ton bouton.
Dans ce cas, il est cependant préférable de la déplacer dans un module de code "standard" (Module1 par exemple) au lieu du module "private" de la feuille de calcul elle-même. Les modules "privates" des feuilles sont, en principe, réservés aux procédures évènementielles comme vu plus haut.

Tu as donc 2 types de procédures différentes utilisables, mais en aucun cas, il ne faut imbriquer les 2, l'une dans l'autre comme tu l'as fait. C'est soit l'une, soit l'autre.

Dans l'exemple que je t'ai préparé (voir pièce jointe), j'ai opté pour la 2ème façon de faire avec une procédure "Sub Alerte()" placée dans un module de code standard et liée à un bouton "DETECTION DOUBLONS" sur ta feuille.

Bien évidemment, il existe des façons de faire beaucoup plus optimisées et bien plus rapides, mais il me semble que le code VBA suivant te sera très simple à comprendre :

DANS UN MODULE DE CODE STANDARD (ex. Module1)

Option Explicit

Sub Alerte()
' myDearFriend! - www.mdf-xlpages.com
Dim codePylone As String
Dim L As Long, L2 As Long, Lmax As Long

    With Sheets("Feuil1")                                ' A adapter
        'Numéro de la dernière ligne utilisée en colonne F (colonne 6) ?
        Lmax = .Cells(.Rows.Count, 6).End(xlUp).Row
        'On parcourt la colonne F à partir de la ligne 5
        For L = 5 To Lmax
            codePylone = .Cells(L, 6).Value
            'S'il y a un code Pylone (cellule non vide)
            If codePylone <> "" Then
                'On parcourt toutes lignes placée en dessous
                For L2 = L + 1 To Lmax
                    'Si on trouve un équivalent, on affiche l'alerte
                    If .Cells(L2, 6).Value = codePylone Then
                        MsgBox "ATTENTION!!!" & vbLf & "Le code Pylone « " & codePylone & " » est en doublon!" & vbLf & vbLf & "Il apparaît en ligne " & L & ", et en ligne " & L2
                        'On interrompt la recheche à la découverte d'un doublon, et on quitte directement la procédure pour éviter de tourner en boucle...
                        Exit Sub
                    End If
                Next L2
            End If
        Next L
    End With
    MsgBox "Détection terminée." & vbLf & "Aucun doublon trouvé."
End Sub
  

En espérant que ça puisse te dépanner.


Bien cordialement,

Pièce jointe:
zip PourParafun - Alerte Doublons.zip   [ Taille: 103.73 Ko - Téléchargements: 293 ]

Didier_mDF
Image redimensionnée
Le Webmaster

La réponse vous satisfait ? Merci de revenir solder le sujet en [résolu], voir ce lien
Hors Ligne
Rapport   Haut 

Re: Afficher une msgbox
#45
Webmestre

Inscription: 18/05/2006
De Saône-et-Loire (71)

Messages: 1539

Système d'exploitation:
PC
Version Excel utilisée:
97, 2000, 2002, 2003, 2007, 2010, 2013, 2016 et 365
Posté le : 23-01-2021 00h48

Bonsoir Parafun et bienvenue sur mDF-XLpages.com.smiley

 

Ta question semble être simple, mais selon moi, elle demande cependant quelques éclaircissements et points de réflexion...

 

Pour tout traitement VBA, la première question à se poser, c'est : quel évènement (ou quelle action) devra déclencher mon code ?

 

La présence de doublons dans un tableau n'est pas un évènement en soi.

Par évènement, il faut entendre un fait générateur, une action ou un changement d'état  qui servira de point de départ pour déclencher ton programme. Une fois déclenché, ton code pourra ensuite analyser tes cellules et, le cas échéant, t'avertir par un message d'alerte. Mais avant toutes choses, il faut trouver le déclencheur.

 

La détection de tes valeurs doublons (impliquant l'affichage du message d'alerte éventuel) doit-elle être déclenchée par :

  • l'action de saisir une valeur dans une cellule ?
  • l'action de cliquer sur un bouton ?
  • l'action d'ouvrir le classeur lui-même ?  
  • etc.

 

La deuxième étape, consiste ensuite à définir la façon dont le code devra agir et son déroulement :

Par exemple : si je décide qu'il faut cliquer sur un bouton, alors faut-il que le code parcourt tout le tableau et recherche, ligne après ligne, la présence de doublons ?

Dans l'affirmative : en cas de présence de multiples doublons (selon la taille du tableau), l'utilisateur risque fort de subir une overdose de MsgBox d'alerte en cascade, non ?

 

Ensuite, n'aurais-tu pas inversé la logique dans ton énoncé ? 

 

" Attention doublon" quand K1<>I1

Pour moi, c'est l'inverse : si les éléments sont différents, alors ils ne s'agit justement pas de doublons. 

 

Je pense qu'il serait préférable que tu joignes un fichier exemple (très simplifié) de ce que tu souhaiterais obtenir (voir la FAQ : Comment joindre un fichier dans le Forum ?" au besoin). N'hésite pas à donner plus de détails.

 

Bien cordialement,


Didier_mDF
Image redimensionnée
Le Webmaster

La réponse vous satisfait ? Merci de revenir solder le sujet en [résolu], voir ce lien
Hors Ligne
Rapport   Haut 

Re: mDF XLdoublons
#46
Webmestre

Inscription: 18/05/2006
De Saône-et-Loire (71)

Messages: 1539

Système d'exploitation:
PC
Version Excel utilisée:
97, 2000, 2002, 2003, 2007, 2010, 2013, 2016 et 365
Posté le : 08-12-2020 19h03

Bonjour alienus120, le Forum,

 

Oui, tu as tout à fait raison!

Et pour te dire la vérité - faute de temps - je suis comme toi et cet outil me manque énormément car j'en ai souvent besoin dans le cadre de mes activités diverses.

 

Depuis quelques temps, je travaille sur une nouvelle version qui devrait pouvoir (enfin) être compatible avec les versions actuelles Excel (et en particulier, les versions 64bits !). En effet, certains composants ne sont plus accessibles en environnement 64bits et Microsoft n'a visiblement pas jugé utile de fournir des équivalents compatibles. sad 

 

La reprise de ce projet demande donc beaucoup d'adaptations et m'oblige particulièrement à revoir radicalement l'interface utilisateur. J'espère seulement pouvoir produire à nouveau un outil efficace, clair et simple d'utilisation. Mais ma plus grosse difficulté, ça reste le manque de temps à y consacrer...

 

Tout comme toi, j'ai hâte que cet outil soit prêt car, à titre personnel, c'est vraiment une de mes applications les plus utiles, depuis des années.

 

Je ne manquerai pas de venir vous informer dans ce fil de discussions lorsque j'aurai finalisé la nouvelle macro complémentaire, laquelle (je l'espère) sera aussi fiable que la précédente.

 

Bien cordialement,


Didier_mDF
Image redimensionnée
Le Webmaster

La réponse vous satisfait ? Merci de revenir solder le sujet en [résolu], voir ce lien
Hors Ligne
Rapport   Haut 

Re: Mettre un texte dans une image
#47
Webmestre

Inscription: 18/05/2006
De Saône-et-Loire (71)

Messages: 1539

Système d'exploitation:
PC
Version Excel utilisée:
97, 2000, 2002, 2003, 2007, 2010, 2013, 2016 et 365
Posté le : 06-11-2020 17h35

Bonjour Louis4458, le Forum,

 

Citation :

Louis4458 a écrit :

Bonjour,

 

En fonction de la valeur d'une cellule, je souhaite mettre un texte dans une image, et je ne sais pas si cela est possible et comment faire. Merci pour votre aide.

 

Si tu veux obtenir de l'aide Louis, il faudrait que tu sois plus explicit, car présenté comme ça, ta question ne veut pas dire grand chose je crois. frown

 

  • "mettre un texte dans une image", c'est à dire ?
  • Quel type d'image ?
  • Afficher le texte de la cellule en question ou un autre texte ?
  • Quel critère de valeur pour afficher ce texte ?

 

Quelques explications détaillées, et sans doute un classeur exemple simple en pièce jointe * permettraient sans doute aux visiteurs ici de mieux comprendre ta demande...

 

Bien cordialement,

 

* Attention :

Pièce jointe de préférence zippée, et de 120 Ko maximum.

Son contenu doit toujours être anonymisé.

Consultez cette FAQ au besoin.


Didier_mDF
Image redimensionnée
Le Webmaster

La réponse vous satisfait ? Merci de revenir solder le sujet en [résolu], voir ce lien
Hors Ligne
Rapport   Haut 

Re: Faire clignoter une image
#48
Webmestre

Inscription: 18/05/2006
De Saône-et-Loire (71)

Messages: 1539

Système d'exploitation:
PC
Version Excel utilisée:
97, 2000, 2002, 2003, 2007, 2010, 2013, 2016 et 365
Posté le : 05-11-2020 19h28

Bonjour Louis4458,

 

Tout d'abord, si tu ne veux pas que ton fichier devienne une usine à gaz... Oui, je te confirme que ton image devrait être au préalable collée sur ta feuille de calcul.

 

Ensuite, sur base du fichier « Cellules et Alertes clignotantes » et son code VBA, je vais essayer de te détailler point par point ce que tu peux tester :

 

 

Tu l'as compris, l'objet qui clignote en jaune ici, est nommé "Alerte" et il est représenté dans VBA sous l'expression :

Shapes("Alerte")

(voir procédures "Clign" et "StopClign")

 

Ce que je te propose, c'est d'échanger cet objet "Alerte" par ta propre image pour t'aider à comprendre.

 

  • Tout d'abord, tu saisies une valeur inférieure à 9 dans la cellule pour désactiver le clignotement (l'objet va devenir invisible, c'est normal).​

 

1ère ETAPE : on va supprimer l'ancien objet nommé "Alerte" (alors qu'il est invisible) :
 

  • Tu vas saisir directement le mot "Alerte", dans la « Zone de nom » (c'est la zone située en haut, et juste à gauche de la Zone de formule et c'est là que affiche l'adresse de la cellule en cours de sélection d'habitude)  :
  • Puis touche "ENTREE" et tu vas voir s'afficher le cadre de l'objet caché.
  • Dès lors, tu appuies immédiatement sur la touche "SUPPR" de ton clavier. 
     

L'objet est supprimé, cette 1ère étape est donc terminée.

 

2ème ETAPE : on va déposer ton image perso dans la feuille et la nommer "Alerte" (en remplacement de l'ancienne).

 

  • Tu insères donc ton image perso dans la feuille Excel, via le Ruban / Insertion / Images.
  • Tu la positionnes où tu veux dans la feuille.
  • Ensuite, tu cliques directement dessus et le cadre de transformation va s'afficher tout autour.
  • Tu retournes ensuite immédiatement dans la Zone de nom et tu saisies à nouveau "Alerte".
  • Touche "ENTREE" pour terminer.

 

Et voilà, tu peux maintenant tester en modifiant le contenu de la cellule B3 : ton image va clignoter lorsque la valeur sera supérieure à 9 et devenir invisible dans le cas contraire.

 

Bien évidemment, tu pourras ensuite renommer ton image autrement que par "Alerte", mais il te faudra veiller à remplacer également dans le code VBA pour que sa fonctionne.

 

J'espère que ces quelques explications te permettront d'avancer dans ton projet.

Je te recommande cependant de bien lire l'article portant sur « La Méthode OnTime » car, si mal utilisée, ton fichier peut vite ressembler à une guirlande de Noël incontrôlable !

 

Observe en particulier le code présent dans l'objet ThisWorkbook et notamment la procédure Workbook_BeforeClose() qui est très importante pour désactiver OnTime à la fermeture du classeur.

 

Avec les fichiers exemples en téléchargement, l'article sur cette méthode, et les quelques explications ci-dessus, je pense que tu as tout le nécessaire pour faire tes propres expériences sur ce sujet.

 

Cela dit, tout ça est fait uniquement pour le fun et pour expérimenter. J'ai toujours déconseillé ce type de gadget dans les projets "sérieux".

 

Bien cordialement,

Edité par myDearFriend! le 05/11/2020 20:53:50

Didier_mDF
Image redimensionnée
Le Webmaster

La réponse vous satisfait ? Merci de revenir solder le sujet en [résolu], voir ce lien
Hors Ligne
Rapport   Haut 

Re: Problème d'installation mDF_XLcalendar.xla
#49
Webmestre

Inscription: 18/05/2006
De Saône-et-Loire (71)

Messages: 1539

Système d'exploitation:
PC
Version Excel utilisée:
97, 2000, 2002, 2003, 2007, 2010, 2013, 2016 et 365
Posté le : 02-11-2020 19h21

Bonjour Gouloute62, bienvenue sur mDF-XLPages.com smiley

 

En effet, grâce à notre ami Bob362 dans ce fil de discussion, la cause du problème est visiblement cernée. Grand merci à lui car je n'aurai jamais trouvé sans son analyse !

 

Cependant, comme tu as pu le voir, à l'époque je n'ai jamais trouvé de solution fiable à cette situation qui touche donc uniquement les PC sur lesquels l'option de mise à l'échelle Windows a été modifiée via le panneau de configuration Système. Et je comprends naturellement que pour certaines personnes, il soit utile (voire nécessaire!) de paramétrer l'affichage du texte supérieur à 100%.

 

La version du mDF XLcalendar (v3.2) en téléchargement actuellement ne corrige donc pas ce souci.

En toute honnêteté, il y a longtemps que je devrais me repencher sur cet utilitaire et, au moins, l'adapter pour les versions Excel récentes... Mais j'ai d'autres activités qui m'occupent beaucoup depuis un certain temps.

 

Cependant, je tente rapidement un nouveau "correctif" (enfin, j'espère enlightenedcar j'ai modifié le code VBA de façon pas vraiment propre cette fois!). Tu trouveras ce correctif en pièce jointe.

 

Peux-tu essayer cette version légèrement modifiée et me dire si ça règle ton problème ?

Dans l'attente,

 

Bien cordialement, 

 

 

Pièce jointe:
zip mDF_XLcalendar_v3-2b(Correctif affichage).zip   [ Taille: 119.75 Ko - Téléchargements: 343 ]
Edité par myDearFriend! le 02/11/2020 19:56:05

Didier_mDF
Image redimensionnée
Le Webmaster

La réponse vous satisfait ? Merci de revenir solder le sujet en [résolu], voir ce lien
Hors Ligne
Rapport   Haut 

Re: Faire cligoter une image
#50
Webmestre

Inscription: 18/05/2006
De Saône-et-Loire (71)

Messages: 1539

Système d'exploitation:
PC
Version Excel utilisée:
97, 2000, 2002, 2003, 2007, 2010, 2013, 2016 et 365
Posté le : 02-11-2020 17h05

Bonjour Louis, bienvenue sur mDF-XLpages.com smiley

 

Je pense que la section de téléchargements "Horloges, Timers et Clignotements" pourrait t'intéresser et particulièrement le fichier "Cellules et Alertes clignotantes".

 

Je te conseille vivement aussi la lecture de l'article portant sur "La méthode OnTime".

 

En espérant que ça puisse t'être utile.

Bien cordialement,


Didier_mDF
Image redimensionnée
Le Webmaster

La réponse vous satisfait ? Merci de revenir solder le sujet en [résolu], voir ce lien
Hors Ligne
Rapport   Haut 

« 1 2 3 4 5 6 7 8 ... 149 »