Lien de deux Macros
Rom189
-
Rom189 -
Rom189 -
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 ! !
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 ! !
A voir également:
- Lien de deux Macros
- Lien url - Guide
- Créer un lien pour partager des photos - Guide
- Verificateur de lien - Guide
- Nombre de jours entre deux dates excel - Guide
- Deux ecran pc - Guide
6 réponses
Bonsoir Rom, bonsoir le forum,
Pour ton premier problème modifie la macro comme ça :
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.
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.
Bonjour Rom, bonjour le forum,
Pour éviter toute confusion, le même code avec le nom de la variable différent :
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...
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...
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.
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.
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à ?
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à ?
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 ^^
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 ^^
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 :/
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 :/
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 :
Attention un format du type jj/mm/aa risque de ne pas fonctionner (non testté)
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é)
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
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 :
J'ai testé ça marche mais uniquement avec le format de date dans les TextBoxes = JJ/MM/AAA.
À plus,
ThauTheme
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
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
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
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 ? :/
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 ? :/
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 :
par :
Ça devrait aller mieux...
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...
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 :/