XL 2016 [RESOLU] Avis Code VBA excel

jabenj

XLDnaute Junior
Bonjour à tous !

Après de nombreuses années à toucher au VBA grâce à vous, je commence à vraiment m'éclater !

J'aimerai cependant un avis sur le code suivant (il s'agit d'un Userform bien chargé ;) pour l'enregistrement des informations entrée dans l'UF.

Je crains qu'une boucle ne soit pas possible vu les différents contrôles, mais j'aimerai m'en assurer svp ...
(Je fournis le fichier "histoire de", car j'ai dû le tronquer puissance1000 pour qu'il passe ! Pour le moment tout fonctionne au poil ;)

Merci de vos différents retours svp !

Bien à vous !
VB:
Private Sub CommandButton3_Click()
Dim L As Integer

If MsgBox("Etes-vous certain de vouloir créer cette nouvelle demande ?", vbQuestion + vbYesNo, "Demande de confirmation") = vbYes Then 'condition : si oui au message
L = Workbooks("SSPAPA.xlsm").Sheets("SVI-AL").Range("a65536").End(xlUp).Row + 1 'Permet de se positionner sur la dernière ligne de tableau NON VIDE

'Frame1
Workbooks("SSPAPA.xlsm").Sheets("SVI-AT").Range("A" & L).value = Application.UserName 'Insère la donnée de la liste déroulante dans la colonne A
Workbooks("SSPAPA.xlsm").Sheets("SVI-AT").Range("B" & L).value = TextBox1 'Insère la donnée de la textbox1 dans la colonne B
Workbooks("SSPAPA.xlsm").Sheets("SVI-AT").Range("C" & L).value = ComboBox2
Workbooks("SSPAPA.xlsm").Sheets("SVI-AT").Range("D" & L).value = TextBox2
Workbooks("SSPAPA.xlsm").Sheets("SVI-AT").Range("E" & L).value = IIf(Me.OptionButton1.value = True, "Mme", "Mr")
Workbooks("SSPAPA.xlsm").Sheets("SVI-AT").Range("F" & L).value = TextBox3
Workbooks("SSPAPA.xlsm").Sheets("SVI-AT").Range("G" & L).value = TextBox4
Workbooks("SSPAPA.xlsm").Sheets("SVI-AT").Range("H" & L).value = TextBox5
Workbooks("SSPAPA.xlsm").Sheets("SVI-AT").Range("I" & L).value = TextBox6
Workbooks("SSPAPA.xlsm").Sheets("SVI-AT").Range("J" & L).value = ComboBox3
Workbooks("SSPAPA.xlsm").Sheets("SVI-AT").Range("K" & L).value = ComboBox4
'Workbooks("SSPAPA.xlsm").Sheets("SVI-AT").Range("L" & L).value = TextBox7
Workbooks("SSPAPA.xlsm").Sheets("SVI-AT").Range("M" & L).value = TextBox8
'Frame Iodas
Workbooks("SSPAPA.xlsm").Sheets("SVI-AT").Range("N" & L).value = ComboBox5
Workbooks("SSPAPA.xlsm").Sheets("SVI-AT").Range("O" & L).value = TextBox9
Workbooks("SSPAPA.xlsm").Sheets("SVI-AT").Range("P" & L).value = TextBox10
Workbooks("SSPAPA.xlsm").Sheets("SVI-AT").Range("Q" & L).value = TextBox11
Workbooks("SSPAPA.xlsm").Sheets("SVI-AT").Range("R" & L).value = TextBox12
'Frame Infos Supp
Workbooks("SSPAPA.xlsm").Sheets("SVI-AT").Range("S" & L).value = TextBox13
Workbooks("SSPAPA.xlsm").Sheets("SVI-AT").Range("T" & L).value = TextBox14
Workbooks("SSPAPA.xlsm").Sheets("SVI-AT").Range("U" & L).value = ComboBox6
'Workbooks("SSPAPA.xlsm").Sheets("SVI-AT").Range("V" & L).value = IIf(Me.CheckBox1.value = True, "Demande incomplète", DateValue(Now))
'Frame Décision
Workbooks("SSPAPA.xlsm").Sheets("SVI-AT").Range("W" & L).value = ComboBox7
Workbooks("SSPAPA.xlsm").Sheets("SVI-AT").Range("X" & L).value = ComboBox8
Workbooks("SSPAPA.xlsm").Sheets("SVI-AT").Range("Y" & L).value = IIf(Me.CheckBox2.value = True, DateValue(Now), "Non Rejeté")
'Frame Détails
Workbooks("SSPAPA.xlsm").Sheets("SVI-AT").Range("Z" & L).value = IIf(Me.CheckBox3.value = True, "VAD EMS à prévoir", "Pas de VAD EMS")
Workbooks("SSPAPA.xlsm").Sheets("SVI-AT").Range("AA" & L).value = TextBox15
Workbooks("SSPAPA.xlsm").Sheets("SVI-AT").Range("AB" & L).value = TextBox16
Workbooks("SSPAPA.xlsm").Sheets("SVI-AT").Range("AC" & L).value = TextBox17
Workbooks("SSPAPA.xlsm").Sheets("SVI-AT").Range("AD" & L).value = TextBox18
Workbooks("SSPAPA.xlsm").Sheets("SVI-AT").Range("AE" & L).value = TextBox19
Workbooks("SSPAPA.xlsm").Sheets("SVI-AT").Range("AF" & L).value = Label125.Caption
Workbooks("SSPAPA.xlsm").Sheets("SVI-AT").Range("AG" & L).value = TextBox20
Workbooks("SSPAPA.xlsm").Sheets("SVI-AT").Range("AH" & L).value = TextBox21
Workbooks("SSPAPA.xlsm").Sheets("SVI-AT").Range("AI" & L).value = TextBox22
Workbooks("SSPAPA.xlsm").Sheets("SVI-AT").Range("AJ" & L).value = TextBox23
Workbooks("SSPAPA.xlsm").Sheets("SVI-AT").Range("AK" & L).value = TextBox24
Workbooks("SSPAPA.xlsm").Sheets("SVI-AT").Range("AL" & L).value = IIf(Me.CheckBox14.value = True, "Devis Validé Ergo", "Devis NR Ergo")
Workbooks("SSPAPA.xlsm").Sheets("SVI-AT").Range("AM" & L).value = TextBox25
Workbooks("SSPAPA.xlsm").Sheets("SVI-AT").Range("AN" & L).value = TextBox26
Workbooks("SSPAPA.xlsm").Sheets("SVI-AT").Range("AO" & L).value = TextBox27
'Frame MONTANTS
Workbooks("SSPAPA.xlsm").Sheets("SVI-AT").Range("AP" & L).value = TextBox28
Workbooks("SSPAPA.xlsm").Sheets("SVI-AT").Range("AQ" & L).value = TextBox29
Workbooks("SSPAPA.xlsm").Sheets("SVI-AT").Range("AR" & L).value = TextBox30
Workbooks("SSPAPA.xlsm").Sheets("SVI-AT").Range("AS" & L).value = IIf(Me.CheckBox4.value = True, "J'AmenAGE59", "PAS J'AmenAGE59")
Workbooks("SSPAPA.xlsm").Sheets("SVI-AT").Range("AT" & L).value = TextBox31
Workbooks("SSPAPA.xlsm").Sheets("SVI-AT").Range("AU" & L).value = TextBox32
Workbooks("SSPAPA.xlsm").Sheets("SVI-AT").Range("AV" & L).value = TextBox33
Workbooks("SSPAPA.xlsm").Sheets("SVI-AT").Range("AW" & L).value = TextBox34
Workbooks("SSPAPA.xlsm").Sheets("SVI-AT").Range("AX" & L).value = IIf(Me.CheckBox5.value = True, "AL APA", "PAS AL APA")
Workbooks("SSPAPA.xlsm").Sheets("SVI-AT").Range("AY" & L).value = TextBox35
Workbooks("SSPAPA.xlsm").Sheets("SVI-AT").Range("AZ" & L).value = TextBox36
Workbooks("SSPAPA.xlsm").Sheets("SVI-AT").Range("BA" & L).value = TextBox37
Workbooks("SSPAPA.xlsm").Sheets("SVI-AT").Range("BB" & L).value = TextBox38
Workbooks("SSPAPA.xlsm").Sheets("SVI-AT").Range("BC" & L).value = TextBox39
Workbooks("SSPAPA.xlsm").Sheets("SVI-AT").Range("BD" & L).value = TextBox40
'Frame Pièces des la demande
Workbooks("SSPAPA.xlsm").Sheets("SVI-AT").Range("BE" & L).value = IIf(Me.OptionButton3.value = True, "IRPPn-1 Fourni", "IRPPn-1 NonFourni")
Workbooks("SSPAPA.xlsm").Sheets("SVI-AT").Range("BF" & L).value = TextBox41
Workbooks("SSPAPA.xlsm").Sheets("SVI-AT").Range("BG" & L).value = IIf(Me.OptionButton5.value = True, "RIB Fourni", "RIB NonFourni")
Workbooks("SSPAPA.xlsm").Sheets("SVI-AT").Range("BH" & L).value = TextBox42
Workbooks("SSPAPA.xlsm").Sheets("SVI-AT").Range("BI" & L).value = IIf(Me.OptionButton7.value = True, "Devis Fourni", "Devis NonFourni")
Workbooks("SSPAPA.xlsm").Sheets("SVI-AT").Range("BJ" & L).value = TextBox43
Workbooks("SSPAPA.xlsm").Sheets("SVI-AT").Range("BK" & L).value = IIf(Me.OptionButton9.value = True, "Facture Fournie", "Facture NonFournie")
Workbooks("SSPAPA.xlsm").Sheets("SVI-AT").Range("BL" & L).value = TextBox44
Workbooks("SSPAPA.xlsm").Sheets("SVI-AT").Range("BM" & L).value = TextBox45
Workbooks("SSPAPA.xlsm").Sheets("SVI-AT").Range("BN" & L).value = IIf(Me.OptionButton11.value = True, "Autre1 Fourni", "Autre1 NonFourni")
Workbooks("SSPAPA.xlsm").Sheets("SVI-AT").Range("BO" & L).value = TextBox46
Workbooks("SSPAPA.xlsm").Sheets("SVI-AT").Range("BP" & L).value = TextBox47
Workbooks("SSPAPA.xlsm").Sheets("SVI-AT").Range("BQ" & L).value = IIf(Me.OptionButton13.value = True, "Autre2 Fourni", "Autre2 NonFourni")
Workbooks("SSPAPA.xlsm").Sheets("SVI-AT").Range("BR" & L).value = TextBox48
Workbooks("SSPAPA.xlsm").Sheets("SVI-AT").Range("BS" & L).value = TextBox49
Workbooks("SSPAPA.xlsm").Sheets("SVI-AT").Range("BT" & L).value = IIf(Me.OptionButton15.value = True, "Autre3 Fourni", "Autre3 NonFourni")
Workbooks("SSPAPA.xlsm").Sheets("SVI-AT").Range("BU" & L).value = TextBox50
'Frame Commentaires
Workbooks("SSPAPA.xlsm").Sheets("SVI-AT").Range("BV" & L).value = TextBox99

    If MsgBox("Demande créée dans le fichier." & Chr(10) & Chr(10) & " Voulez vous retourner à l'accueil ?", vbQuestion + vbYesNo) = vbYes Then
    Unload Me ' Vide et ferme l'Userform ( formulaire)
'    UF1Accueil.Show False 'Affiche le  formulaire
    End If
    
Else
End If

' Affiche une boîte de message

End Sub
 

Pièces jointes

  • XLdld.xlsm
    878 KB · Affichages: 6
Dernière édition:

xUpsilon

XLDnaute Accro
Bonjour,

Une possibilité pour utiliser une boucle serait de changer les noms de contrôles.
En effet, tu ne peux pas boucler tel qu'ils sont car tu les as simplement créés et associés.
Mais imaginons que tu renommes comme suivant :
VB:
Workbooks("SSPAPA.xlsm").Sheets("SVI-AT").Range("A" & L).value = Application.UserName 'Insère la donnée de la liste déroulante dans la colonne A
Workbooks("SSPAPA.xlsm").Sheets("SVI-AT").Range("B" & L).value = TextBox1 -> TBColB           'Insère la donnée de la textbox1 dans la colonne B
Workbooks("SSPAPA.xlsm").Sheets("SVI-AT").Range("C" & L).value = ComboBox2 -> CBColC
Workbooks("SSPAPA.xlsm").Sheets("SVI-AT").Range("D" & L).value = TextBox2 -> TBColD
Workbooks("SSPAPA.xlsm").Sheets("SVI-AT").Range("E" & L).value = IIf(Me.OptionButton1.value = True, "Mme", "Mr")
Workbooks("SSPAPA.xlsm").Sheets("SVI-AT").Range("F" & L).value = TextBox3 -> TBColF
Workbooks("SSPAPA.xlsm").Sheets("SVI-AT").Range("G" & L).value = TextBox4 -> TBColG
Workbooks("SSPAPA.xlsm").Sheets("SVI-AT").Range("H" & L).value = TextBox5 -> TBColH
Workbooks("SSPAPA.xlsm").Sheets("SVI-AT").Range("I" & L).value = TextBox6 -> TBColI
Workbooks("SSPAPA.xlsm").Sheets("SVI-AT").Range("J" & L).value = ComboBox3 -> CBColJ
Workbooks("SSPAPA.xlsm").Sheets("SVI-AT").Range("K" & L).value = ComboBox4 -> CBColK
'Workbooks("SSPAPA.xlsm").Sheets("SVI-AT").Range("L" & L).value = TextBox7 -> TBColL
Workbooks("SSPAPA.xlsm").Sheets("SVI-AT").Range("M" & L).value = TextBox8 -> TBColM

Tu peux dès lors boucler sur ta colonne, et rechercher le contrôle dont le nom contient Col&LettreDeLaCol, sans avoir à te soucier du type de ton contrôle.
Autrement, plus facile que d'utiliser les lettres pour boucler, tu peux traduire tes colonnes en chiffres, en utilisant non pas Range("A" & L) mais Cells(L, 1) par exemple.

Attention, pour chercher le contrôle dont le nom est correspondant, je n'ai pas d'idée qui me vienne à l'esprit facilement qui n'inclue pas une boucle sur les contrôles existants pour trouver celui qui correspond. Donc je doute que tu sois meilleur niveau performance, mais ça peut être intéressant de tester ça.

Bonne journée,
 

ChTi160

XLDnaute Barbatruc
Bonjour
tu peux déjà simplifier ainsi en Utilisant :
VB:
With
End With
soit :

Code:
Private Sub CommandButton3_Click()
Dim L As Integer
If MsgBox("Etes-vous certain de vouloir créer cette nouvelle demande ?", vbQuestion + vbYesNo, "Demande de confirmation") = vbYes Then 'condition : si oui au message

With Workbooks("SSPAPA.xlsm").Sheets("SVI-AL")' '***************************************************
L = .Range("a65536").End(xlUp).Row + 1 'Permet de se positionner sur la dernière ligne de tableau NON VIDE

'Frame1
        .Range("A" & L).value = Application.UserName 'Insère la donnée de la liste déroulante dans la colonne A
        .Range("B" & L).value = TextBox1 'Insère la donnée de la textbox1 dans la colonne B
        .Range("C" & L).value = ComboBox2
        .Range("D" & L).value = TextBox2
        .Range("E" & L).value = IIf(Me.OptionButton1.value = True, "Mme", "Mr")
        .Range("F" & L).value = TextBox3
        .Range("G" & L).value = TextBox4
        .Range("H" & L).value = TextBox5
        .Range("I" & L).value = TextBox6
        .Range("J" & L).value = ComboBox3
        .Range("K" & L).value = ComboBox4
        .Range("L" & L).value = TextBox7
        .Range("M" & L).value = TextBox8
'Frame Iodas
        .Range("N" & L).value = ComboBox5
        .Range("O" & L).value = TextBox9
        .Range("P" & L).value = TextBox10
        .Range("Q" & L).value = TextBox11
        .Range("R" & L).value = TextBox12
'Frame Infos Supp
        .Range("S" & L).value = TextBox13
        .Range("T" & L).value = TextBox14
        .Range("U" & L).value = ComboBox6
        .Range("V" & L).value = IIf(Me.CheckBox1.value = True, "Demande incomplète", DateValue(Now))
'Frame Décision
        .Range("W" & L).value = ComboBox7
        .Range("X" & L).value = ComboBox8
        .Range("Y" & L).value = IIf(Me.CheckBox2.value = True, DateValue(Now), "Non Rejeté")
'Frame Détails
        .Range("Z" & L).value = IIf(Me.CheckBox3.value = True, "VAD EMS à prévoir", "Pas de VAD EMS")
        .Range("AA" & L).value = TextBox15
        .Range("AB" & L).value = TextBox16
        .Range("AC" & L).value = TextBox17
        .Range("AD" & L).value = TextBox18
        .Range("AE" & L).value = TextBox19
        .Range("AF" & L).value = Label125.Caption
        .Range("AG" & L).value = TextBox20
        .Range("AH" & L).value = TextBox21
        .Range("AI" & L).value = TextBox22
        .Range("AJ" & L).value = TextBox23
        .Range("AK" & L).value = TextBox24
        .Range("AL" & L).value = IIf(Me.CheckBox14.value = True, "Devis Validé Ergo", "Devis NR Ergo")
        .Range("AM" & L).value = TextBox25
        .Range("AN" & L).value = TextBox26
        .Range("AO" & L).value = TextBox27
'Frame MONTANTS
        .Range("AP" & L).value = TextBox28
        .Range("AQ" & L).value = TextBox29
        .Range("AR" & L).value = TextBox30
        .Range("AS" & L).value = IIf(Me.CheckBox4.value = True, "J'AmenAGE59", "PAS J'AmenAGE59")
        .Range("AT" & L).value = TextBox31
        .Range("AU" & L).value = TextBox32
        .Range("AV" & L).value = TextBox33
        .Range("AW" & L).value = TextBox34
        .Range("AX" & L).value = IIf(Me.CheckBox5.value = True, "AL APA", "PAS AL APA")
        .Range("AY" & L).value = TextBox35
        .Range("AZ" & L).value = TextBox36
        .Range("BA" & L).value = TextBox37
        .Range("BB" & L).value = TextBox38
        .Range("BC" & L).value = TextBox39
        .Range("BD" & L).value = TextBox40
'Frame Pièces des la demande
        .Range("BE" & L).value = IIf(Me.OptionButton3.value = True, "IRPPn-1 Fourni", "IRPPn-1 NonFourni")
        .Range("BF" & L).value = TextBox41
        .Range("BG" & L).value = IIf(Me.OptionButton5.value = True, "RIB Fourni", "RIB NonFourni")
        .Range("BH" & L).value = TextBox42
        .Range("BI" & L).value = IIf(Me.OptionButton7.value = True, "Devis Fourni", "Devis NonFourni")
        .Range("BJ" & L).value = TextBox43
        .Range("BK" & L).value = IIf(Me.OptionButton9.value = True, "Facture Fournie", "Facture NonFournie")
        .Range("BL" & L).value = TextBox44
        .Range("BM" & L).value = TextBox45
        .Range("BN" & L).value = IIf(Me.OptionButton11.value = True, "Autre1 Fourni", "Autre1 NonFourni")
        .Range("BO" & L).value = TextBox46
        .Range("BP" & L).value = TextBox47
        .Range("BQ" & L).value = IIf(Me.OptionButton13.value = True, "Autre2 Fourni", "Autre2 NonFourni")
        .Range("BR" & L).value = TextBox48
        .Range("BS" & L).value = TextBox49
        .Range("BT" & L).value = IIf(Me.OptionButton15.value = True, "Autre3 Fourni", "Autre3 NonFourni")
        .Range("BU" & L).value = TextBox50
'Frame Commentaires
        .Range("BV" & L).value = TextBox99
End With '***************************************************
    If MsgBox("Demande créée dans le fichier." & Chr(10) & Chr(10) & " Voulez vous retourner à l'accueil ?", vbQuestion + vbYesNo) = vbYes Then
    Unload Me ' Vide et ferme l'Userform ( formulaire)
'    UF1Accueil.Show False 'Affiche le  formulaire
    End If   
Else
End If
' Affiche une boîte de message
End Sub
Bonne fin de Journée
Jean marie
 

jabenj

XLDnaute Junior
Bonjour à tous les 2 !
Merci pour votre rapidité ! et vos solutions ;)
@xUpsilon : pas bête l'idée de nommer les TextBox1/2/3 en TextBox A/B/C 🤔... mais cette solution ne fonctionnera pas pour les CheckBox ou les OptionButton si je ne m'abuse.. ? Pas grave !

Pour
VB:
 .Cells(L,1)
je me suis posé la question... Range et Cells se valent en terme de performances et comptabilité ? Cela dit les types de champs à renseigner étant trop différents/ aléatoires, il ne me parait pas non plus envisageable d'automatiser le remplissage par une boucle... (ce qui n'est pas trop grave en soi, hein, c'est juste pour ma culture personnelle !!)

(Fallait pas en parler ;) ) SI c'est possible : Comment mesurer la performance d'un code ??
Merci néanmoins de t'être penché sur la question !!

@ChTi160 : merci pour ta proposition ! j'ai failli le faire avant de poster pour ne pas me faire huer mais me suis dit qu'il fallait assumer !
CEla dit; passer par with plutot que les lignes peut-il améliorer les performances justement soulignées par xUpsilon ?

Merci en tout cas déjà du temps pris pour ce code !
 

xUpsilon

XLDnaute Accro
@xUpsilon : pas bête l'idée de nommer les TextBox1/2/3 en TextBox A/B/C 🤔... mais cette solution ne fonctionnera pas pour les CheckBox ou les OptionButton si je ne m'abuse.. ? Pas grave !
Il y a une autre possibilité, qui est d'appeler tous les contrôles Ctrl1,2,3 etc plutôt que de les nommer Checkbox, Textbox, Combobox, etc. Et si tu souhaites garder en mémoire le type de contrôle que ça représente, tu peux très bien appeler la première Textbox comme ceci : Ctrl1Txt, et tu peux dès lors boucler sur le 5ème caractère du nom du contrôle, sans pour autant "oublier" le type de contrôle.

Range et Cells se valent en terme de performances et comptabilité
Je ne saurais pas te dire lequel est le plus efficace, mais on ne parle pas du même objet.
Range désigne une plage, Cells désigne une cellule. Ainsi, pour indiquer une plage qui s'étend de A1 à C5, on peut tout à fait indiquer Range(Cells(1,1) , Cells(5,3)). Par principe, j'ai tendance à utiliser Cells lorsque je fais appel à une cellule à la fois (notamment du fait de la facilité à boucler sur les lignes et les colonnes).

SI c'est possible : Comment mesurer la performance d'un code ??
Il suffit de stocker deux variables différentes du genre HeureDébut et HeureFin. Au début du code, tu remplis HeureDébut = Now(), et à la fin du code HeureFin = Now(). Ensuite tu regardes HeureFin - HeureDébut et tu as le temps écoulé pour exécuter ton code ;)

Bonne journée,
 

jabenj

XLDnaute Junior
Merci encore pour la promptitude et l'exhaustivité de réponse !
Très bonne idée le coup de Ctrl1Txt !!! je regrette de ne pas y avoir pensé avant.. mais (c'est maaaal) j'avoue avoir construit l'UserForm au fur et à mesure.. Fonctionner avec ta méthode signifierait... AVOIR de la méthode 😅 !!
J'y penserai assurément pour mon prochain projet !

Range et Cells se valent en terme de performances et comptabilité
C'est en effet ce que j'avais lu.. Merci de ta conformation ;)

HeureDébut = Now(), et à la fin du code HeureFin = Now()
Yep, merci ! j'avais lu aussi ! Je crois qu'il y a des méthodes d'optimisations/performances de code pour le HTML (?), j'espérais qu'une telle chose existe pour vba...

MERCI !!!!
Certainement à bientôt !
 

JM27

XLDnaute Barbatruc
Bonjour
Tu pourrais utiliser la propriété Tag des contrôles , ce qui te permettrait de faire des boucles et simplifier grandement tes macros , que ce soit pour documenter une base de données ou récupérer des données dans un userform.
nota dans cette propriété tag est rangée :
1/ la colonne de destination
2/Si cette zone de saisie doit être à saisie impérative ou facultative
3/Le type de données ( string , numérique , date etc.)
4/ la frame ou est située les données
le tout étant séparé par un espace.( pour permettre de "splitter" les données)

Ci joint un fichier exemple dont tu peux t'inspirer
 

Pièces jointes

  • Gestion Parc Auto new.xlsm
    142.3 KB · Affichages: 6
Dernière édition:

jabenj

XLDnaute Junior
Salut JM27 !
MAIS pourquoi ne parle-t-on pas de cette propriété ?
1661442558979.png

C'es la première fois que je vois ça ! je suis ébahi !

Bon, pour avoir un peu "joué" avec ton tableur : RESPECT ! moi qui pensais toucher un peu, je me rends compte de l'immensité du potentiel de vba !!

Merci, je vais tenter de la disséquer encore un peu ;p !
 

Discussions similaires

Membres actuellement en ligne

Statistiques des forums

Discussions
315 087
Messages
2 116 082
Membres
112 654
dernier inscrit
SADIKA