petite question en passant

  • Initiateur de la discussion Initiateur de la discussion br44
  • Date de début Date de début

Boostez vos compétences Excel avec notre communauté !

Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force. Apprenez, échangez, progressez – et tout ça gratuitement ! 👉 Inscrivez-vous maintenant !

br44

XLDnaute Impliqué
Bonsoir le forum ,

Voilà je voudrais alimenter une ListeBox avec plusieurs colonnes(12 aux total). j'ai donc crée une variable qui regroupe toutes les colonnes que je veux afficher mais çà beug

J'ai le message d'erreur suivant :

Erreur d'èxècution '13 :incompatibliter de type

Voici ma macro
Code:
Procédure pour la liste de choix "N°de facture"
 Private C As Range 'Déclare la variable C pour la plage "N°Facture"
 Private Cel2 As Range 'Déclare la variable Cel2 pour le "NFacture"

'Création de la liste de choix"N°Facture"
'Définit la variable C
 Set C = Range("DK12:DK" & Range("Dk65536").End(xlUp).Row) And Range("DB12:DB" & Range("DB65536").End(xlUp).Row) _
 And Range("CS12:CS" & Range("CS65536").End(xlUp).Row) And Range("CJ12:CJ" & Range("CJ65536").End(xlUp).Row) _
 And Range("CA12:CA" & Range("CA65536").End(xlUp).Row) And Range("BR12:BR" & Range("BR65536").End(xlUp).Row) _
 And Range("BI12:BI" & Range("BI65536").End(xlUp).Row) And Range("AZ12:AZ" & Range("AZ65536").End(xlUp).Row) _
 And Range("AQ12:AQ" & Range("AQ65536").End(xlUp).Row) And Range("AH12:AH" & Range("AH65536").End(xlUp).Row) _
 And Range("Y12:Y" & Range("Y65536").End(xlUp).Row) And Range("P12:P" & Range("P65536").End(xlUp).Row)
 
 
'On remplit la liste des Noms
'On boucle sur toutes les cellules de la plage A
  For Each Cel2 In C
'On n'ajoute le text de la cellule "NomClient"
  NFacture.AddItem (Cel2.Value)
'On va à la prochaine cellule de la plage A
  Next Cel2
'On n'affiche et on sélectionne la première cellule de la liste
'Pour l'affichage
 NFacture.ListIndex = 0
'Pour la sélection
'Début de la sélection
 NFacture.SelStart = 0
'Longueur de la sélection
 NFacture.SelLength = Len(NFacture.Value)
  
End Sub

Vous remerciant par avance du coup de main je vous dis à bientôt sur se fil .amicalement BR44
 
Re : petite réponse en passant

Bonsoir Br, bonsoir le forum,

La procédure correcte pour ajouter des plage non contiguës est Application.Union :
Code:
 Set C = Application.Union(Range("DK12:DK" & Range("Dk65536").End(xlUp).Row), Range("DB12:DB" & Range("DB65536").End(xlUp).Row), _
    Range("CS12:CS" & Range("CS65536").End(xlUp).Row), Range("CJ12:CJ" & Range("CJ65536").End(xlUp).Row), _
    Range("CA12:CA" & Range("CA65536").End(xlUp).Row), Range("BR12:BR" & Range("BR65536").End(xlUp).Row), _
    Range("BI12:BI" & Range("BI65536").End(xlUp).Row), Range("AZ12:AZ" & Range("AZ65536").End(xlUp).Row), _
    Range("AQ12:AQ" & Range("AQ65536").End(xlUp).Row), Range("AH12:AH" & Range("AH65536").End(xlUp).Row), _
    Range("Y12:Y" & Range("Y65536").End(xlUp).Row), Range("P12:P" & Range("P65536").End(xlUp).Row))

Remarque, on pourrait aussi faire plus simple avec une boucle comme ça :
Code:
'Dim col As Byte
'Set C = Range("P12:P" & Range("P65536").End(xlUp).Row)
'For x = 1 To 11
'    col = 16 + (x * 9)
'    Set C = Application.Union(C, Range(Cells(12, col), Cells(65536, col).End(xlUp)))
'Next x
Mais pour le reste du code j'ai pas saisi... Mais il me semble que le maximum de colonnes dans une ListBox est 10 !
 
Re : petite question en passant

Re à tous ,

Bon je vient de tester avec Application.Union est ça Marche

Ta deuxième solution m'intéresse aussi mais j'ai une petite question : Tu as écrit dans ta procédure :

col = 16 + (x * 9)

Pourrait-tu me dire à quoi cela correspond afin que je comprenne la méthode de calcule ,et le principe de ta macro .

Te remerciant par avance je dis à plus . Amicalement Br44
 
Re : petite question en passant

Bonsoir,Robert ,le forum

Pour répondre a la question de la fin de ton message ,j'ai voulu essayer autre chose mais cela n'a pas fonctionner mais avec la proposition Application.Union tu peut aller jusqu'à 30 arguments.

C'est pour ça que je me suis poser la question suivante : peut-on créer une ListeBox à 2 colonnes et afficher le résultat deux la deuxième colonne dans un TextBox ?

Et si cela est possible comment puis-y arriver ?

Un petit exemple pour que se soie plus claire :

Dans ma première colonne je mets les n°de facture pour alimenter la ListeBox (voire ma procédure au début de post)

Dans la deuxième colonne je mets le montant de la facture correspondant au n° et je l'affiche dans un textBox (Et la je cale,😕😕😕😕) .

Espérant avoir été claire (pas sur😉😉😉😉) je vous dis à plus et merci d'avance. Amicalement BR44
 
Re : petite réponse en passant

Bonsoir Br, bonsoir le forum,

Voici quelques explications. J'ai remarqué que ta plage partait de la colonne P (= 16) et se répétait 11 fois toutes les 9 colonnes (Y = 25 <=> 16 + 9), (AH = 34 <=> 16 + 2*9) etc. Comme c'était régulier j'ai pensé qu'on pouvait faire une boucle :
Code:
'Dim col As Byte
Set C = Range("P12:P" & Range("P65536").End(xlUp).Row)
For x = 1 To 11
    col = 16 + (x * 9)
    Set C = Application.Union(C, Range(Cells(12, col), Cells(65536, col).End(xlUp)))
Next x
On définit C comme la plage de P12😛...(fin)
puis on boucle 11 fois en définissant la variable col à chaque fois
x = 1 ; col = 25 <=> on redéfinit C comme union de C et de Y12:Y...(fin)
x = 2 ; col = 34 <=> on redéfinit C comme union de C et de AH12:AH...(fin)
etc.

En pièce jointe un petite fichier exemple (qu'il faudra certainement que tu adaptes). La lisbox contient deux colonnes, la première est le numéro de facture, la seconde est la somme. On récupère la somme dans la TextBox1. Regarde le propriété BoundColumn de la listbox égale à 2. Cela indique que la propriété Value de cette listbox renvoie la valeur de la seconde colonne. Ainsi la procédure Change de la listbox renvoie-t-elle la somme dans la TexBox1... Est-ce clair ? je l'espère...
 

Pièces jointes

Dernière édition:
Re : petite question en passant

Bonjour Robert,le forum

Un Grand Merci à toi pour toutes ses infos . je n'ai pas le temps de tester aujourd'hui (repas de famille ) . Dès que possibles je te tient au courant de mes progrès .


En te remerciant de nouveau de ton aide je te dis à bientôt en te souhaitant un bon dimanche . Amicalement Br44
 
Re : petite question en passant

Bonjour Robert,le forum

Comme prévue dans mon dernier message je vient données des nouvelles de l'avancement de mon programme .

J'ai réussi à appliquer ta macro à tout les endroit que je voulais ,c'est génial😛😛😛🙂🙂😀😀😀😀😉😉😉

J'aurais voulu savoir si il est possible de modifier ta macro pour qu'elle prenne en compte non pas deux colonnes à suivre mais la première et la dernière colonne ?

j'ai une deuxième question : Est-il possible de relier l'ensemble des macro pour qu'elles s'affichent ensemble à chaque changement de nom ?

Je m'explique j'ai fais un Userform pour faire un suivi facture ,afin de rentrée les payement reçus et de solde la facture .

cette Userform se constitue d'une listebox avec le nom des clients d'un textBox qui doit m'afficher le montant global des facture de l'année et les procédure de listeBox à 2 colonnes (au total de 4, pour les différant types de facturation).

je voudrais donc avoir à l'ouverture de l'userform l'exemple suivant :

Nom du client = titi
montant global = 130.00€
détail facture : 1 = N° de facture = 25 Montant =60,00€
2 = "" " = 12 montant = 70,00€
3 et 4 = " " = 0 " "= 0



Je joint un fichier contenant le tableau ainsi que l'userform et la procèdure dans le VBA . la partie concernant ma première question est placée entre les étoiles dans ma procédure.

je ne te demande pas de me faire la modif mais de me l'expliquer afin que je puisse l'appliquer et la comprendre .

Espérant avoir été claire dans ma demande je te dis à bientôt sans oublier de te remercier par avance de ton aide . Amicalement Br4
 

Pièces jointes

Re : petite question en passant

Bonjour à tous ,

Je voudrais savoir comment modifier ma première ListeBox pour qu'elle soit liée à ma dernière colonne ?

J'ai essayer de modifier la macro de Robert mais ça ne marche pas ,celle ci fonctionne avec 2 colonnes qui se suive et je ne vois pas comment faire avec deux colonnes éloignées l'une de l'autre .

Si quelqu'un à une idées à me soumettre je suis preneur . De mon côté j'ai fait des recherches sur le forum avec la fonction "Décaler" (peut-être une piste) mais je rien trouvée .

Vous remerciant par avance je vous dis à bientôt sur se fil . Amicalement BR44
 
Re : petite question en passant

Bonsoir à tout le forum ,

je voudrais savoir si quelqu'un à trouver un poste sur le forum pour faire une listeBox avec deux colonnes éloignées l'une de l'autre ?

Oui je voudrais lier ma listebox contenant des noms de clients située en colonne A au total des facture de l'année "Montant Global " située à la fin de mon tableau colonne AQ (voir fichier "essai 3" ci_dessus) .

J'ai essayer d'adapter la macro suivante:
Code:
'Dim col As Byte
Set C = Range("P12:P" & Range("P65536").End(xlUp).Row)
For x = 1 To 11
    col = 16 + (x * 9)
    Set C = Application.Union(C, Range(Cells(12, col), Cells(65536, col).End(xlUp)))
Next x:

Mais je bloque . Si vous pouvez m'aider où me donner une piste afin que je puisse continuer se serait vraiment très gentil .Vous remerciant par avance je vous dis à bientôt .Amicalement BR44
 
Re : petite question en passant

Bonsoir le forum ,

Bon j'ai de bonnes nouvelles à vous annoncer j'ai presque réussi à modifier la macro de Robert . j'ai juste un petit problème d'affichage au niveau de l'UserForm

Je m'explique au lieu d'avoir un Nom de client et un montant j'ai le nom du client qui s'affiche dans les deux (1 fois dans la listeBox et 1 fois dans la textBox .

Voici la macro consernée:
Code:
Private Sub UserForm_Initialize()
'Initialise à l'ouvertue de l'UserFrom
'Création de la Liste de Choix"Nom des Clients"
'déclare la varible x
 Dim X As Byte
'On remplit la liste des Noms
'On boucle sur toutes les cellules de la plage A
'Définit la variable A
  Set A = Range("A12:A" & Range("A65536").End(xlUp).Row)
  For X = 1 To 42
  Col = 1 + 43
   Set A = Application.Union(A, Range(Cells(43, Col), Cells(65536, Col).End(xlUp)))
  Next X
'alimentation de la listbox
For Each Cel In A 'boucle sur toutes les cellules Cel de la plage A
    NomClient.AddItem (Cel.Value) 'ajout le nom du client(en colonne 0 de la listbox)
    'ajout le montantGlobal (en colonne 1 de la listbox)
    With Me.NomClient 'prend en compte la listbox
        .Column(1, .ListCount - 1) = Cel.Offset(0, 1).Value 'ajout de la somme
        .Column(1, .ListCount - 1) = Format(.Column(1, .ListCount - 1), "#,##0.00 €") 'mise au format de la somme
    End With 'fin de la prise en compte de la listbox
Next Cel 'prochaine cellule Cel de la listbox
'**********************************************************
Private Sub NomClient_Change()
Me.MontantGlobal.Value = Me.NomClient.Value
Me.MontantGlobal.Value = Format(Me.MontantGlobal, "#,##0.00 €") 'mise au format de la TextBox1
End Sub

SI quelqu'un peut me dire où se trouve l'erreur et comment je peut la corriger
se serais génial.

Je joints en plus le fichier avec l'userform pour voir le résultat et aussi si l'erreur est bien au niveau de ma macro .

Pour info le VBA ne m'indique aucun Beug .

Vous remeriant tous par avance je vous dis à plus . Amicalement BR44
 

Pièces jointes

Re : petite question en passant

Bonjour à tous le forum ,

Je suis vraiment désolé de voir que je n'est aucune réponse à ma dernière question . S'agit-il d'un manque de clarté de ma part où est-il possible qu'il n'y a pas de solution à mon problème ?

Je vous rappel ma demande en quelque mots : J'ai associé une listeBox a un textBox l'un au format text (liste de nom) l'autre au format monétaire (Montant) ,ma procédure fonctionne mais je deux fois la liste de nom qui s'affiche au lieu du montant .

Je croie que le problème est située dans cette partie de ma macro:
Code:
Private Sub NomClient_Change()
Me.MontantGlobal.Value = Me.NomClient.Value [COLOR="SeaGreen"]'affiche la liste des noms  pourquoi,[/COLOR]
Me.MontantGlobal.Value = Format(Me.MontantGlobal, "#,##0.00 €") 'mise au format de la TextBox1
End Sub

Si quelqu'un peut me donner un coup de main où une piste ,où un lien pour que je règle se problème se serait vraiment génial . Vous remerciant par avance vos dis à très bientôt sur se fil . Amicalement Br44
 
Re : petite question en passant

Bonsoir à tous le forum ,

Se petit message pour vous dire que je viens de trouver la solution à mon problème enfin😛😛😛😛😛🙂🙂🙂🙂🙂🙂🙂 Youpi !!!!!!!

je vous mets ci-dessous la macro rectifier :
Code:
Private Sub NomClient_Change() 'récupère F1 F2 etc... pour modification
LNomClient = Cells.Find(NomClient.Value, LookIn:=xlValues).Row
Me.MontantGlobal.Value = Cells(LNomClient, 124).Value
Me.MontantGlobal.Value = Format(Me.MontantGlobal, "#,##0.00 €") 'mise a

Bon maintenant il faut que face la même chose avec les 4 autres ListeBox .
Bien sur si quelqu'un à une idées sur la marche à suivre je suis preneur .
Je remercie tous ceux qui ont pris le temps de lire se poste .Amicalement BR44
 
- Navigue sans publicité
- Accède à Cléa, notre assistante IA experte Excel... et pas que...
- Profite de fonctionnalités exclusives
Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel.
Je deviens Supporter XLD

Discussions similaires

Réponses
7
Affichages
371
  • Question Question
Microsoft 365 Textbox userform
Réponses
10
Affichages
754
Réponses
7
Affichages
988
Retour