Autres Recherche de la première ligne vide

bigbroz

XLDnaute Nouveau
Bonjour, je suis débutant en vba même si j'y ai déjà un peu touché.

Je cherche a créer un programme pour faciliter la création de devis.
j'ai un userform qui me permet d'entrer les valeurs d'un matériau et son module récupère un prix dans une feuille bibliothèque
a partir de ce userform j'aimerais créer une ligne qui récupère ces valeurs dans une feuille "résultat" : à chaque nouveau matériau une nouvelle ligne.
J'ai essayé d'utiliser la fonction suivante :

VB:
 Dim ligne As Integer

    ligne = Sheets("Feuil1").Range("a1048576").End(xlUp).Row + 1
    'Range("B" & ligne).Value = SectOss
    'Range("C" & ligne).Value = EssOss
    'Range("D" & ligne).Value = UsinOss & " " & TraitOss
    'Range("F" & ligne).Value = TotOss / PrixOss
    'Range("G" & ligne).Value = PrixOss
    'Range("H" & ligne).Value = TotOss

mais j'ai une erreur au moment de donner une valeur à ma variable "ligne".

J'ai mis les lignes suivantes en commentaire pour ne pas gêner mais vous avez l'idée ^^

Je ne suis pas sur mais il me semble que j'utilise excel V. 2004
je ne sais pas d'ou cela peut venir. auriez vous une idée ?

merci
 
Solution
je vois
et dans ce cas :
VB:
ligne = Sheets("Feuil1").Range("a1048576").End(xlUp).Row + 1
ne saurait être la cause de l'erreur.
En espérant, bien entendu, que tu ne t'amuses pas à exécuter cette instruction sur une version dont le nombre de lignes possibles est très inférieur à 1048576 (mais ce serait tellement gros que je ne veux pas le croire).

jmfmarques

XLDnaute Accro
Bonjour
La ligne de code en cause n'est pas, en elle-même, génératrice d'erreur.
Je vois par contre que tu as typé ligne en integer (dont la limite est 32 767).
Tu auras donc une erreur si le rang de la dernière ligne remplie est supérieur à ce nombre.
Ce ne peut toutefois qu'être une supposition puisque tu t'es abstenu d'indiquer le message d'erreur reçu ;)
A noter que tu aurais également un message d'erreur (autre, encore) en cas d'inexistence d'une feuille nommée "Feuil1" (mais là encore : simple supposition puisque tu ne rapportes pas ce message d'erreur !)
 

bigbroz

XLDnaute Nouveau
merci de ta réponse rapide, je te retranscrit le message d'erreur : "Erreur d'exécution '1004' : Erreur définie par l'application ou par l'objet"

Pour la dernière ligne remplie, en effet ce n'est pas de la que vient le problème ^^ j'en suis à remplir la ligne 2 pour tester mon programme. et c'est peu probable que je dépasse la limite.
pour le nom de la feuille, j'ai fait exprès d'utiliser ce nom pour évacuer cette possibilité mais je vais essayer avec un autre nom.

je peux essayer de faire une copie du fichier en supprimant les éléments reconnaissables si tu veux.
 

bigbroz

XLDnaute Nouveau
VB:
Private Sub CommandButton1_Click()

'OSSATURE

    Dim PrixOss As Single, EssOss As String, SectOss As String, TraitOss As String, UsinOss As String, SurOss As Single, LgOss As Single, TotOss As String
    EssOss = ComboBox2.Value
    SectOss = ComboBox1.Value
    TraitOss = ComboBox3.Value
    UsinOss = ComboBox4.Value
    SurOss = TextBox1.Value
    LgOss = TextBox2.Value
    
    Dim rngData As Range, rngLabelRow As Range, rngLabelColumn As Range, fn As WorksheetFunction
 
    Set fn = Application.WorksheetFunction
 
 With ThisWorkbook.Sheets("Bibliotheque")
    
    
    
    If UsinOss = "PROFILE" Then
        
        Set rngData = .Range("H4:I31") 'definition de la plage de recherche de prix
        Set rngLabelRow = .Range("C4:C31") 'definition de la plage de recherche de section
        Set rngLabelColumn = .Range("H2:I2") 'definition de la plage de recherche d'essence
        With fn
            PrixOss = Application.WorksheetFunction.Index(rngData, .Match(SectOss, rngLabelRow, 0), .Match(EssOss, rngLabelColumn, 0))
        End With
 
    ElseIf UsinOss = "BRUT" Then
        
        'changer liste déroulante des sections
        Set rngLabelRow = .Range("C4:C31")
        
        If EssOss = "Epicéa" Then
            Set rngData = .Range("D4:E31")
            Set rngLabelColumn = .Range("D3:E3")
            
        Else
            Set rngData = .Range("F4:G31")
            Set rngLabelColumn = .Range("F3:G3")
        
        End If
        With fn
            PrixOss = Application.WorksheetFunction.Index(rngData, .Match(SectOss, rngLabelRow, 0), .Match(TraitOss, rngLabelColumn, 0))
        End With
    End If

 

End With
    
    If LgOss <> 0 Then
        TotOss = PrixOss * LgOss
    Else
        TotOss = PrixOss * SurOss * 5
    End If
    
    Label35.Caption = "prix unitaire : " & PrixOss & " Prix Total : " & TotOss



    Dim ligne As Integer 'intégration des valeurs au tableau dans la premiere ligne vide

    ligne = Sheets("Feuil1").Range("a1048576").End(xlUp).Row + 1
    Range("B" & ligne).Value = SectOss
    Range("C" & ligne).Value = EssOss
    Range("D" & ligne).Value = UsinOss & " " & TraitOss
    Range("F" & ligne).Value = TotOss / PrixOss
    Range("G" & ligne).Value = PrixOss
    Range("H" & ligne).Value = TotOss


    
    
      CommandButton1.SetFocus 'permet d'enclencher le bouton commande avec la touche entrée sans court-circuiter les "boxs"
    
End Sub
Capture userform.JPG
Capture feuille.JPG
 

jmfmarques

XLDnaute Accro
Avec la copie du code et les deux photos ça devrait remplacer
Non car ni l'un ni l'autre ne saurait expliquer l'erreur que tu affirmes avoir en :
VB:
ligne = Sheets("Feuil1").Range("a1048576").End(xlUp).Row + 1
J'ignore le rang de la dernière ligne remplie et donc si le type integer suffit
Et le nom de la feuille ("Feuil1") existe apparemment (sauf si espace non visible à la fin)
 

jmfmarques

XLDnaute Accro
je vois
et dans ce cas :
VB:
ligne = Sheets("Feuil1").Range("a1048576").End(xlUp).Row + 1
ne saurait être la cause de l'erreur.
En espérant, bien entendu, que tu ne t'amuses pas à exécuter cette instruction sur une version dont le nombre de lignes possibles est très inférieur à 1048576 (mais ce serait tellement gros que je ne veux pas le croire).
 
Dernière édition:

Discussions similaires

Statistiques des forums

Discussions
312 198
Messages
2 086 137
Membres
103 129
dernier inscrit
Atruc81500