VBA difficulté pour soustraire deux valeurs
Résolu
florent5528
Messages postés
104
Date d'inscription
Statut
Membre
Dernière intervention
-
florent5528 Messages postés 104 Date d'inscription Statut Membre Dernière intervention -
florent5528 Messages postés 104 Date d'inscription Statut Membre Dernière intervention -
Bonjour,
Je travaille sous exel 2007.
j'ai une première feuille sur laquelle je remplis différents items.
Lorsque j'active la macro, cela récupère les items remplis et les rentre dans un tableau.
J'ai une petite sous macro qui indique qu'à chaque activation de la macro je dois remplir la ligne suivante.
La récupération et l'écriture des données ne pose pas de soucis.
Dans les items à remplir il y a l'heure de début et l'heure de fin à remplir.
Je récupère ces items toujours dans les mêmes colonnes.
Je souhaiterai que automatiquement une sous macro calcule le temps passé et l'indique dans une troisième colonne sur la ligne correspondante.
les données à utiliser sont sous la forme hh:mm
et le résultat devrait s'afficher sous la même forme
J'ai un peu cherché et trouvé ceci et qui d'après la personne fonctionne normalement
Sheets("Données").Cells(Ligne, 5).Select
ActiveCell.FormulaR1C1 = "=RC[-1]-RC[-2]"
dans mon cas j'ai une erreur a la première ligne du code précédent.
Auriez vous une idée ou des suggestion?
Pour vous aidez voici le code de ma macro dans son ensemble.
Private Sub CommandButton1_Click()
Dim Numéro_intervention As String
'Macro permettant l'affichage d'un message d'erreur et d'empécher le transfert de donnés si le numéro d'intervention est vierge
'je l'informe que la variable numéro_intervention sera du texte
Numéro_intervention = Range("B1").Value
If Numéro_intervention = "" Then Sheets("Remplissage").Range("B1").Select
If Numéro_intervention = "" Then MsgBox "NUMERO D'INTERVENTION MANQUANT !", vbCritical, "Erreur"
'si la variable est vierge => affichage d'une boite de dialogue d'erreur, avec juste bouton, ok "message",type de boite, "titre"
If Numéro_intervention = "" Then Exit Sub
'Si variable vierge stopper la macro
Dim Ligne As Long
Ligne = ThisWorkbook.Worksheets("Remplissage").Range("A16").Value
'cette ligne permet de savoir a partir de quelle ligne écrire les données rentrées pour éviter la surécriture
Sheets("Données").Cells(Ligne, 1).Value = Sheets("Remplissage").Range("B1").Value 'n°d'inter
Sheets("Données").Cells(Ligne, 2).Value = Sheets("Remplissage").Range("B3").Value 'mois de l'année
Sheets("Données").Cells(Ligne, 3).Value = Sheets("Remplissage").Range("B5").Value 'Heure de début
Sheets("Données").Cells(Ligne, 4).Value = Sheets("Remplissage").Range("B7").Value 'Heure de fin
Sheets("Données").Cells(Ligne, 7).Value = Sheets("Remplissage").Range("B9").Value 'ISP
Sheets("Données").Cells(Ligne, 8).Value = Sheets("Remplissage").Range("B11").Value 'vecteur
Sheets("Données").Cells(Ligne, 9).Value = Sheets("Remplissage").Range("B13").Value 'commune
Sheets("Données").Cells(Ligne, 10).Value = Sheets("Remplissage").Range("E1").Value 'Niveau de soins
Sheets("Données").Cells(Ligne, 11).Value = Sheets("Remplissage").Range("E3").Value 'PISU
Sheets("Données").Cells(Ligne, 12).Value = Sheets("Remplissage").Range("E13").Value 'SAI
Sheets("Données").Cells(Ligne, 13).Value = Sheets("Remplissage").Range("E5").Value 'SMUR présent
Sheets("Données").Cells(Ligne, 14).Value = Sheets("Remplissage").Range("E7").Value 'Avant SMUR
Sheets("Données").Cells(Ligne, 15).Value = Sheets("Remplissage").Range("E9").Value 'Avant VSAV
Sheets("Données").Cells(Ligne, 16).Value = Sheets("Remplissage").Range("E11").Value 'Transport
Sheets("Données").Cells(Ligne, 5).Select
ActiveCell.FormulaR1C1 = "=RC[-1]-RC[-2]"
ThisWorkbook.Worksheets("Remplissage").Range("A16").Value = Ligne + 1
'cette ligne indique que la valeur de la ligne A16 doit être augmenté de plus un. C'est la fin de la procédure lancé à la 1ère ligne
ActiveWindow.ScrollRow = 1
'j'ai gardé volontairement cette ligne pour ramener à la bonne place une feuille éventuellement déplacer cela équivaut à remonter la page avec la molette de la souris
Range("B1").ClearContents
Range("B3").ClearContents
Range("B5").ClearContents
Range("B7").ClearContents
Range("B9").ClearContents
Range("B11").ClearContents
Range("B13").ClearContents
Range("E1").ClearContents
Range("E3").ClearContents
Range("E13").ClearContents
Range("E5").ClearContents
Range("E7").ClearContents
Range("E9").ClearContents
Range("E11").ClearContents
' en cas de dysfonctionnement la macro de base est:
' Range("I7").Select
' Selection.ClearContents
' au lieu de: Range("I7").ClearContents
Range("B1").Select
End Sub
Je précise que je suis débutant en VBA et que je suis preneur de tout autre conseil en plus de mon problème si vous voyez des aberrations
Merci
Je travaille sous exel 2007.
j'ai une première feuille sur laquelle je remplis différents items.
Lorsque j'active la macro, cela récupère les items remplis et les rentre dans un tableau.
J'ai une petite sous macro qui indique qu'à chaque activation de la macro je dois remplir la ligne suivante.
La récupération et l'écriture des données ne pose pas de soucis.
Dans les items à remplir il y a l'heure de début et l'heure de fin à remplir.
Je récupère ces items toujours dans les mêmes colonnes.
Je souhaiterai que automatiquement une sous macro calcule le temps passé et l'indique dans une troisième colonne sur la ligne correspondante.
les données à utiliser sont sous la forme hh:mm
et le résultat devrait s'afficher sous la même forme
J'ai un peu cherché et trouvé ceci et qui d'après la personne fonctionne normalement
Sheets("Données").Cells(Ligne, 5).Select
ActiveCell.FormulaR1C1 = "=RC[-1]-RC[-2]"
dans mon cas j'ai une erreur a la première ligne du code précédent.
Auriez vous une idée ou des suggestion?
Pour vous aidez voici le code de ma macro dans son ensemble.
Private Sub CommandButton1_Click()
Dim Numéro_intervention As String
'Macro permettant l'affichage d'un message d'erreur et d'empécher le transfert de donnés si le numéro d'intervention est vierge
'je l'informe que la variable numéro_intervention sera du texte
Numéro_intervention = Range("B1").Value
If Numéro_intervention = "" Then Sheets("Remplissage").Range("B1").Select
If Numéro_intervention = "" Then MsgBox "NUMERO D'INTERVENTION MANQUANT !", vbCritical, "Erreur"
'si la variable est vierge => affichage d'une boite de dialogue d'erreur, avec juste bouton, ok "message",type de boite, "titre"
If Numéro_intervention = "" Then Exit Sub
'Si variable vierge stopper la macro
Dim Ligne As Long
Ligne = ThisWorkbook.Worksheets("Remplissage").Range("A16").Value
'cette ligne permet de savoir a partir de quelle ligne écrire les données rentrées pour éviter la surécriture
Sheets("Données").Cells(Ligne, 1).Value = Sheets("Remplissage").Range("B1").Value 'n°d'inter
Sheets("Données").Cells(Ligne, 2).Value = Sheets("Remplissage").Range("B3").Value 'mois de l'année
Sheets("Données").Cells(Ligne, 3).Value = Sheets("Remplissage").Range("B5").Value 'Heure de début
Sheets("Données").Cells(Ligne, 4).Value = Sheets("Remplissage").Range("B7").Value 'Heure de fin
Sheets("Données").Cells(Ligne, 7).Value = Sheets("Remplissage").Range("B9").Value 'ISP
Sheets("Données").Cells(Ligne, 8).Value = Sheets("Remplissage").Range("B11").Value 'vecteur
Sheets("Données").Cells(Ligne, 9).Value = Sheets("Remplissage").Range("B13").Value 'commune
Sheets("Données").Cells(Ligne, 10).Value = Sheets("Remplissage").Range("E1").Value 'Niveau de soins
Sheets("Données").Cells(Ligne, 11).Value = Sheets("Remplissage").Range("E3").Value 'PISU
Sheets("Données").Cells(Ligne, 12).Value = Sheets("Remplissage").Range("E13").Value 'SAI
Sheets("Données").Cells(Ligne, 13).Value = Sheets("Remplissage").Range("E5").Value 'SMUR présent
Sheets("Données").Cells(Ligne, 14).Value = Sheets("Remplissage").Range("E7").Value 'Avant SMUR
Sheets("Données").Cells(Ligne, 15).Value = Sheets("Remplissage").Range("E9").Value 'Avant VSAV
Sheets("Données").Cells(Ligne, 16).Value = Sheets("Remplissage").Range("E11").Value 'Transport
Sheets("Données").Cells(Ligne, 5).Select
ActiveCell.FormulaR1C1 = "=RC[-1]-RC[-2]"
ThisWorkbook.Worksheets("Remplissage").Range("A16").Value = Ligne + 1
'cette ligne indique que la valeur de la ligne A16 doit être augmenté de plus un. C'est la fin de la procédure lancé à la 1ère ligne
ActiveWindow.ScrollRow = 1
'j'ai gardé volontairement cette ligne pour ramener à la bonne place une feuille éventuellement déplacer cela équivaut à remonter la page avec la molette de la souris
Range("B1").ClearContents
Range("B3").ClearContents
Range("B5").ClearContents
Range("B7").ClearContents
Range("B9").ClearContents
Range("B11").ClearContents
Range("B13").ClearContents
Range("E1").ClearContents
Range("E3").ClearContents
Range("E13").ClearContents
Range("E5").ClearContents
Range("E7").ClearContents
Range("E9").ClearContents
Range("E11").ClearContents
' en cas de dysfonctionnement la macro de base est:
' Range("I7").Select
' Selection.ClearContents
' au lieu de: Range("I7").ClearContents
Range("B1").Select
End Sub
Je précise que je suis débutant en VBA et que je suis preneur de tout autre conseil en plus de mon problème si vous voyez des aberrations
Merci
A voir également:
- VBA difficulté pour soustraire deux valeurs
- Deux ecran pc - Guide
- Comment faire deux colonnes sur word - Guide
- Nombre de jours entre deux dates excel - Guide
- Deux whatsapp sur un téléphone - Guide
- Supprimer une conversation messenger pour les deux personnes ✓ - Forum Facebook
4 réponses
Bonjour à tous,
Sans avoir le classeur sous les yeux, on va tourner en rond ....
pour joindre une pièce
mettre le classeur sans données confidentielles en pièce jointe sur
https://www.cjoint.com/
et faire un clic droit sur le lien proposé puis "copier l'adresse du lien" et coller dans le message de réponse
Sans avoir le classeur sous les yeux, on va tourner en rond ....
pour joindre une pièce
mettre le classeur sans données confidentielles en pièce jointe sur
https://www.cjoint.com/
et faire un clic droit sur le lien proposé puis "copier l'adresse du lien" et coller dans le message de réponse
Bonjour,
Sheets("Données").Cells(Ligne, 5).Select
1) Verifier le nom de la feuille "Données".
2) Verifier que la variable Ligne prend une valeur strictement positive.
;)
Sheets("Données").Cells(Ligne, 5).Select
1) Verifier le nom de la feuille "Données".
2) Verifier que la variable Ligne prend une valeur strictement positive.
;)
j'ai essayé de nouveau,
en mettant integer au lieu de byte qui donnait erreur 6
et au lieu de Long comme au départ qui donne erreur 1004.
Integer me donne comme aussi une erreur 1004 et ça déconne au même niveau que si la variable est de type Long
du coup j'ai envie de dire que cela ne provient pas du type de variable.
Et merci pour le coup de main
en mettant integer au lieu de byte qui donnait erreur 6
et au lieu de Long comme au départ qui donne erreur 1004.
Integer me donne comme aussi une erreur 1004 et ça déconne au même niveau que si la variable est de type Long
du coup j'ai envie de dire que cela ne provient pas du type de variable.
Et merci pour le coup de main
re
Je n'arrive pas à reproduire l'erreur!
dans Sheets("Données"), n'y a t il pas un espace en trop ou un caractère qui diffère par rapport au nom de la feuille?
C'est curieux puisque cette feuille est utilisée plusieurs fois.
Pour la valeur de Ligne essaie ceci
Ligne = Val(Worksheets("Remplissage").Range("A16").Value)
On force en numérique la valeur lue en texte.
Peut-être que les deux erreurs sont liées, commence par rajouter val .... et vois...
A+
Je n'arrive pas à reproduire l'erreur!
dans Sheets("Données"), n'y a t il pas un espace en trop ou un caractère qui diffère par rapport au nom de la feuille?
C'est curieux puisque cette feuille est utilisée plusieurs fois.
Pour la valeur de Ligne essaie ceci
Ligne = Val(Worksheets("Remplissage").Range("A16").Value)
On force en numérique la valeur lue en texte.
Peut-être que les deux erreurs sont liées, commence par rajouter val .... et vois...
A+
Voici l'adresse du document
https://www.cjoint.com/?0BbrpF7iRtT
partie de la macro corrigée (il te reste à compléter la ligne de nettoyage de la feuille "remplissage)
un grand merci pour le coup de main et pour toutes les infos que j'ai pu glaner dans ta macro
cela me resservira pour bien d'autre chose