Lien de deux Macros

Fermé
Rom189 - 18 mars 2015 à 19:49
 Rom189 - 20 mars 2015 à 09:19
Bonsoir à tous !

Voila, ce matin je me suis fait aider à débloquer une macro trop longue. Continuant à évoluer dans mon programme, je suis maintenant bloquer, en effet j'ai deux boutons, affectés à deux macros différentes, et j'aimerai que la macro du bouton 1 se lance, ainsi que la macro du bouton 2, de façon à pouvoir supprimer mon bouton 2.

J'ai essayer les Call (Nom de la macro) etc. et rien ne marche ... Mauvaise manipulation ? Erreur de formulation de code ? Aide Svp :/

Mon second problème est un peu plus gênant, en effet, j'ai crée des userform avec des textbox, et les valeurs des textbox sont ensuite réaffectés à des cellules, seulement des formules étaient en liens avec la cellule, et les valeurs qui sont ajoutées ne sont plus reconnu et bloquent mes formules, comment faire ? Svp :/


Voici le lien de mon Document Excel :

http://www.fichier-xls.fr/2015/03/18/suivis-michel-ope/


Références :

-> Problème N°1 :

Dans le sommaire, dans la colonne emprunt, lorsque je clique sur Petit Matériel, j'aimerai lancer la macro affecté à ce bouton, ainsi que la macro affecter au bouton validation situer dans la page Petit Matériel.

-> Problèmes N°2 :

Pour les pages "Véhicules" "Gros Matériel" "Petit Matériel" et "Matériaux", la colonne disponibilité, est en lien avec la date de départ et la date de retour, seulement ces deux dernières cases sont remplie par mon bouton situé en sommaire affecter au UserForm et donc au TextBox. J'aimerai que ma formule de disponibilité fonctionne lorsque j'entre des valeurs avec partir du textbox.

Merci d'avance ! !

6 réponses

ThauTheme Messages postés 1442 Date d'inscription mardi 21 octobre 2014 Statut Membre Dernière intervention 29 juillet 2022 160
18 mars 2015 à 23:45
Bonsoir Rom, bonsoir le forum,

Pour ton premier problème modifie la macro comme ça :

Sub CalculPetMat()
Dim O As Worksheet
Dim Lign As Byte

Set O = Sheets("Petit Matériel")
For Lign = 5 To 30
    O.Range("C" & Lign).Value = O.Range("C" & Lign).Value - O.Range("J" & Lign).Value
    O.Range("J" & Lign).ClearContents
Next Lign
End Sub


Pour ton second problème il me semble que tes formules devraient prendre en compte les colonnes F (date de départ) et G (date de retour) de la même ligne plutôt que $K$3:$K$4. Comme ça, à la validation de l'UserForm
la disponibilité se fera par rapport à la ligne modifiée.
0
Bonjour ThauTheme,
Merci de ta réponse très rapide, devant tes "Range" est-ce ZÉRO ou ô ?

Et j'ai pas compris ce que tu m'explique pour la deuxieme solution :/
0
ThauTheme Messages postés 1442 Date d'inscription mardi 21 octobre 2014 Statut Membre Dernière intervention 29 juillet 2022 160
19 mars 2015 à 08:32
Bonjour Rom, bonjour le forum,

Pour éviter toute confusion, le même code avec le nom de la variable différent :

Sub CalculPetMat()
Dim WS As Worksheet
Dim Lign As Byte

Set WS = Sheets("Petit Matériel")
For Lign = 5 To 30
    WS.Range("C" & Lign).Value = WS.Range("C" & Lign).Value - WS.Range("J" & Lign).Value
    WS.Range("J" & Lign).ClearContents
Next Lign
End Sub

Pour le second point, difficile d'expliquer une chose que toi tu as faite...
Personnellement je n'aurais pas utiliser autant d'UserForm. Normalement, si tes tableaux étaient formatés de la même manière, une seule UserForm était nécessaire. Je vais voir si j'arrive à te faire une proposition mais je crains de ne pas avoir le temps. Donc je ne peux rien te garantir...
0
Oui je t'avoue qu'avec tous ces UserForm, et tous ces Modules, je commence à un peut perdu, mais le problème c'est que je ne sais pas faire autrement..

Si tu pouvais en effet me proposer un document avec un seul UserForm se serait vraiment génial en effet !

Et je comprend pour le temps, ce n'est pas super urgent, mais bon un peu quand même ^^ :)

Merci d'avance.
0
ThauTheme Messages postés 1442 Date d'inscription mardi 21 octobre 2014 Statut Membre Dernière intervention 29 juillet 2022 160
19 mars 2015 à 12:12
Bonjour Rom, bonjour le forum,

J'ai commencé a regarder ton problème mais je me heurte à un défaut important. Pour ne pouvoir utiliser qu'une seule (ou un nombre réduit) UserForm, il faudrait que tous les tableaux aient la même structure. Or ce n'est pas le cas... Pourrais-tu voir de ton coté si il y a moyen de faire quelque chose dans ce sens là ?
0
ThauTheme, j'ai réfléchis à la structure de mes tableaux, mais comme tu peux le constater, chaque colonne à son importance.
Bien sur on peut changer l'ordre des colonnes de façon à de ce que les colonnes communes soient située au même endroit, mais au aucun cas je ne peut modifier mes colonnes ....

Imagine si je mettais une colonne immatriculation pour les matériaux ^^
0
Mais si non ne te prend pas la tête pour les UserForm, ça marche comme ça pour le moment, ce n'est certes pas très pratique quand on veut changer quelque chose, mais sa au moins ça marche, en ce qui concerne l'erreur du bouton 6 c'est résolu, maintenant il me reste plus que le problème N°2....

En fait quand je rentre une date à partir du textbox du UserForm il ne me la reconnais pas comme une date mais comme du texte on dirait, du coup ma formule de disponibilité, ne fonctionne plus :/
0
ThauTheme Messages postés 1442 Date d'inscription mardi 21 octobre 2014 Statut Membre Dernière intervention 29 juillet 2022 160
19 mars 2015 à 16:45
Bonjour Rom, bonjour le forum,

Coup classique ! il faut renvoyer les dates dans le tableau au format américain et ça va marcher. Si la date est TOUJOURS éditée jj/mm/aaaa utilise le code ci-dessous :

Dim TDD As String 'déclare le tableau de variables TDD (Tableau Date de Début)
Dim DD As Date 'déclare la variable DD (Date de Début)
Dim TDR As String 'déclare le tableau de variables TDR (Tableau Date de Retour)
Dim DR As Date 'déclare la variable DD (Date de Retour)

TDD = Split(Me.TextBox2.Value, "/") 'définit le tableau TDD (textbox à adapter)
DD = TDD(2) & "/" & TDD(1) & "/" & TDD(0) 'définit la date de début DD
TDR = Split(Me.TextBox3.Value, "/") 'définit le tableau TDR (textbox à adapter)
DR = TDR(2) & "/" & TDR(1) & "/" & TDR(0) 'définit la date de retour DR
Sh.Range("F" & ligne).Value = DD 'renvoie la date de début DD  dans la colonne F (colonne à adapter)
Sh.Range("G" & ligne).Value = DR 'renvoie la date de Retour DR  dans la colonne G (colonne à adapter)


Attention un format du type jj/mm/aa risque de ne pas fonctionner (non testté)

0
Bonsoir ThauTheme,
Désoler de retard, merci bien pour ta solution qui j'espère va me sauver la vie ! :)
Une simple question ce code je l'écrit dans le Sub du TextBox en question ?
0
Alors je viens d'essayer et ça me met Erreur Tableau non définis en me surlignant TDD (2) ? Problème ? :/
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
ThauTheme Messages postés 1442 Date d'inscription mardi 21 octobre 2014 Statut Membre Dernière intervention 29 juillet 2022 160
Modifié par ThauTheme le 19/03/2015 à 23:02
Bonsoir Rom, bonsoir le forum,

Réponse 1 : Non ! tu dois intégrer ces lignes dans le bouton Validation de l'UserForm.
Réponse 2 : Il y avait une erreur dans le code. C'est certainement pour cela...

Voici, par exmple, le code corrigé intégré au bouton Validation de l'UserForm3 :

Private Sub CommandButton3_Click()
Dim TDD() As String 'déclare le tableau de variables TDD (Tableau Date de Début)
Dim DD As Date 'déclare la variable DD (Date de Début)
Dim TDR() As String 'déclare le tableau de variables TDR (Tableau Date de Retour)
Dim DR As Date 'déclare la variable DD (Date de Retour)
Dim Sh As Worksheet
Dim ligne As Integer

TDD = Split(Me.TextBox3.Value, "/") 'définit le tableau TDD (textbox à adapter)
DD = TDD(2) & "/" & TDD(1) & "/" & TDD(0) 'définit la date de début DD
TDR = Split(Me.TextBox4.Value, "/") 'définit le tableau TDR (textbox à adapter)
DR = TDR(2) & "/" & TDR(1) & "/" & TDR(0) 'définit la date de retour DR
ligne = ComboBox3.ListIndex + 3
Set Sh = Sheets("Véhicules")
Sh.Range("I" & ligne).Value = UserForm3.TextBox2.Value
Sh.Range("F" & ligne).Value = DD 'renvoie la date de début DD  dans la colonne F (colonne à adapter)
Sh.Range("G" & ligne).Value = DR 'renvoie la date de Retour DR  dans la colonne G (colonne à adapter)
Sh.Range("H" & ligne).Value = UserForm3.TextBox5.Value
Unload Me
End Sub


J'ai testé ça marche mais uniquement avec le format de date dans les TextBoxes = JJ/MM/AAA.

À plus,
ThauTheme
0
Bonsoir ThauTheme,

Le même problème persiste ...

"Erreur de Compilation : Impossible d'affecter à un tableau "

Mon code est pourtant le même que toi ? ..

Dim Sh As Worksheet
Dim ligne As Integer
Dim TDD() As String
Dim DD() As Date
Dim TDR() As String
Dim DR() As Date

TDD = Split(Me.TextBox3.Value, "/")
DD = TDD(2) & "/" & TDD(1) & "/" & TDD(0)
TDR = Split(Me.TextBox4.Value, "/")
DR = TDR(2) & "/" & TDR(1) & "/" & TDR(0)
ligne = ComboBox3.ListIndex + 3
Set Sh = Sheets("Véhicules")
Sh.Range("I" & ligne).Value = UserForm3.TextBox2.Value
Sh.Range("F" & ligne).Value = DD
Sh.Range("G" & ligne).Value = DR
Sh.Range("H" & ligne).Value = UserForm3.TextBox5.Value

Unload Me
0
Un message s'affiche lorsque que fait Aide :
Un composant ActiveX ne peut pas crée un objet.
0
La valeur de chaque élément d'un tableau doit être affectée individuellement. Causes et solutions de cette erreur :

Vous avez essayé par inadvertance d'affecter une valeur à une variable de tableau sans spécifier l'élément auquel la valeur devait être affectée.
Pour affecter une valeur à un élément de tableau, vous devez spécifier l'élément dans un indice. Par exemple, si MyArray est un tableau d'entiers, l'expression MyArray = 5 est incorrecte, alors que l'expression qui suit est valide :

MyArray(UBound(MyArray)) = 5

Vous avez essayé d'affecter la totalité d'un tableau à un autre tableau. Si, par exemple, Arr1 et Arr2 sont deux tableaux différents, les deux affectations suivantes sont toutes deux incorrectes :
Arr1 = Arr2 ' Affectation incorrecte.
Arr1() = Arr2() ' Affectation incorrecte.

Pour affecter un tableau à un autre, assurez-vous que le tableau à gauche de l'affectation est redimensionnable et que les types de tableaux sont compatibles.


Note Vous pouvez placer la totalité d'un tableau dans un Variant et obtenir ainsi une variable de type variant contenant l'ensemble du tableau :

Dim MyArr As Variant
MyVar = Arr2()

Vous pouvez ensuite référencer les éléments du tableau dans la variable de type variant avec une notation d'indice identique à celle d'un tableau ordinaire, par exemple :

MyVar(3) = MyVar(1) + MyVar(5)

Ça veux dire ? :/
0
ThauTheme Messages postés 1442 Date d'inscription mardi 21 octobre 2014 Statut Membre Dernière intervention 29 juillet 2022 160
20 mars 2015 à 08:49
Bonjour Rom, bonjour le forum,

Tu as mal recopié le code que je t'ai proposé. Le problème vient de la déclaration des variable DD et DR. Tu les as déclarées en tant que tableaux en mettant les parenthèses derrière et il n'y en a pas ! Remplace :

Dim DD() As Date
Dim DR() As date

par :

Dim DD As Date
Dim DR As Date


Ça devrait aller mieux...
0
Exacte ThauTheme ... Heureusement que tu est là ^^

Bien maintenant que mon logiciel fonctionne à merveille, je ne peux que remercier tous les gens du forum qui m'ont aider à la réalisation de celui ci !

En grand merci à vous tous, et félicitation à vous, bon courage pour la suite !

A bientot.
0