A voir également:
- Lien de deux Macros
- Lien url - Guide
- Créer un lien pour partager des photos - Guide
- Verifier un lien - Guide
- Cliquez sur ce lien. en n'utilisant que le clavier, quel mot obtenez-vous ? ✓ - Forum souris / Touchpad
- Un ecouteur sur deux marche ✓ - Forum Audio
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
18 mars 2015 à 23:45
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.
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
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 :
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.
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
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à ?
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 :/
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
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 :
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
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
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 :
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 ? :/
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
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 :
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...
19 mars 2015 à 07:18
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 :/