XL 2013 la méthode value de l'objet range a échoué!!

Boostez vos compétences Excel avec notre communauté !

Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force. Apprenez, échangez, progressez – et tout ça gratuitement ! 👉 Inscrivez-vous maintenant !

youguybass

XLDnaute Junior
Bonjour
Quand je click sur le btn de validation dans les userform de création référence / Creation matière/ création client, excel plante très souvent et me met en message:
"la méthode value de l'objet range a échoué"
J'ai lu que c'était apparemment un boucle qu'Excel n'arrivait pas à terminer mais je ne vois pas où!

Donc Help
 

Pièces jointes

Bonjour,

Essayez de faire le même travail sans activation/sélection des feuilles et cellules.

Exemple :
VB:
Dim NumLig as long
With ThisWorkbook.Sheets("NomDeLaFeuilleQuiVaBien")
NumLig = .Cells( Rows.Count,1).End(xlup).row+1
'....  autre Travail sur la feuille
End With

Ou si vous voulez travailler sur plusieurs feuilles
Code:
Dim shSource as worksheet, shDest as worksheet
Dim DerLigne as Long

With ThisWorkbook ' on est sûr d'être sur le classeur qui contient la macro, au bon moment
    Set shSource = .Sheets("NomFeuilleSource")
    Set shDest = .Sheets("NomFeuilleDestination")
End with
'
' Récupération du prochain numéro de ligne ligne de la colonne 1 de Destination
NumLigne = shDest.Cells(rows.Count,1).End(xlup).Row+1
'
' Copie des valeurs de A10:F10 de la feuille source dans la feuille destination à la prochaine ligne disponible sous le tableau
shDest.Range("A" & NumLigne & ":F" & NumLigne ).Value = shSource.Range("A10:F10").Value
'
' ou
'shDest.Cells(1,NumLigne).resize(,5).Value = shSource.Cells(1,1).Resize(,5).Value

NumLigne = NumLigne +1 'Ligne suivante

Il y a plusieurs façons de référencer et travailler sur les objets excel. Vous trouverez votre style propre par la pratique.

Mais ce qui est le plus important est que vous et le moteur d'exécution vb sache à un instant T sur quelle cellule de quelle feuille de quel classeur il doit travailler.

A cet instant T, ActiveSheet renseigne uniquement sur la feuille active. Mais sans nous dire qu'elle est cette feuille ni ne parle de son classeur. Si vos appels à d'autres procedures ont modifié ActiveSheet, de retour à la procédure appelante, la feuille active n'est plus la même.

Pour être certain avec activeSheet et selection il faudrait (au minimum) :
Code:
If ActiveSheet.Parent.Name = "NomDuClasseurDeLaFeuilleAttendue.xlsx" then
    ' ActiveSheet  appartient au bon classeur
       If ActiveSheet.Name = "NomDeLaFeuilleAttendue" then
          'ActiveSheet est la bonne feuille du bon classeur
           If TypeOf Selection Is Range then
                'La selection est bien un objet range et non pas un Shape ou Graphique ou image ou autre chose
                 ' nous pouvons travailler sur l'objet range
           Else
                 ' M...e ! pas le bon objet
           End if
        Else
              ' M...e ! pas la bonne feuille
        End if
Else
       ' M...e ! pas le bon classeur
End if

P.S. j'ai pu faire quelques coquilles dans les lignes ci-dessus les ayant saisies à la volée.

P.S. Lorsque vous joignez un fichier excel, arrangez-vous pour qu' aucune procédure ne se lance au démarrage. C'est pénible, d'autant que le bouton 'Exit' ferme le classeur et pas seulement le userform.
Cordialement
 
Dernière édition:
Bonjour,

Essayez de faire le même travail sans activation/sélection des feuilles et cellules.

Exemple :
VB:
Dim NumLig as long
With ThisWorkbook.Sheets("NomDeLaFeuilleQuiVaBien")
NumLig = .Cells( Rows.Count,1).End(xlup).row+1
'....  autre Travail sur la feuille
End With

Ou si vous voulez travailler sur plusieurs feuilles
Code:
Dim shSource as worksheet, shDest as worksheet
Dim DerLigne as Long

With ThisWorkbook ' on est sûr d'être sur le classeur qui contient la macro, au bon moment
    Set shSource = .Sheets("NomFeuilleSource")
    Set shDest = .Sheets("NomFeuilleDestination")
End with
'
' Récupération du prochain numéro de ligne ligne de la colonne 1 de Destination
NumLigne = shDest.Cells(rows.Count,1).End(xlup).Row+1
'
' Copie des valeurs de A10:F10 de la feuille source dans la feuille destination à la prochaine ligne disponible sous le tableau
shDest.Range("A" & NumLigne & ":F" & NumLigne ).Value = shSource.Range("A10:F10").Value
'
' ou
'shDest.Cells(1,NumLigne).resize(,5).Value = shSource.Cells(1,1).Resize(,5).Value

NumLigne = NumLigne +1 'Ligne suivante

Il y a plusieurs façons de référencer et travailler sur les objets excel. Vous trouverez votre style propre par la pratique.

Mais ce qui est le plus important est que vous et le moteur d'exécution vb sache à un instant T sur quelle cellule de quelle feuille de quel classeur il doit travailler.

A cet instant T, ActiveSheet renseigne uniquement sur la feuille active. Mais sans nous dire qu'elle est cette feuille ni ne parle de son classeur. Si vos appels à d'autres procedures ont modifié ActiveSheet, de retour à la procédure appelante, la feuille active n'est plus la même.

Pour être certain avec activeSheet et selection il faudrait (au minimum) :
Code:
If ActiveSheet.Parent.Name = "NomDuClasseurDeLaFeuilleAttendue.xlsx" then
    ' ActiveSheet  appartient au bon classeur
       If ActiveSheet.Name = "NomDeLaFeuilleAttendue" then
          'ActiveSheet est la bonne feuille du bon classeur
           If TypeOf Selection Is Range then
                'La selection est bien un objet range et non pas un Shape ou Graphique ou image ou autre chose
                 ' nous pouvons travailler sur l'objet range
           Else
                 ' M...e ! pas le bon objet
           End if
        Else
              ' M...e ! pas la bonne feuille
        End if
Else
       ' M...e ! pas le bon classeur
End if

P.S. j'ai pu faire quelques coquilles dans les lignes ci-dessus les ayant saisies à la volée.

P.S. Lorsque vous joignez un fichier excel, arrangez-vous pour qu' aucune procédure ne se lance au démarrage. C'est pénible, d'autant que le bouton 'Exit' ferme le classeur et pas seulement le userform.
Cordialemen

Bonjour,

Essayez de faire le même travail sans activation/sélection des feuilles et cellules.

Exemple :
VB:
Dim NumLig as long
With ThisWorkbook.Sheets("NomDeLaFeuilleQuiVaBien")
NumLig = .Cells( Rows.Count,1).End(xlup).row+1
'....  autre Travail sur la feuille
End With

Ou si vous voulez travailler sur plusieurs feuilles
Code:
Dim shSource as worksheet, shDest as worksheet
Dim DerLigne as Long

With ThisWorkbook ' on est sûr d'être sur le classeur qui contient la macro, au bon moment
    Set shSource = .Sheets("NomFeuilleSource")
    Set shDest = .Sheets("NomFeuilleDestination")
End with
'
' Récupération du prochain numéro de ligne ligne de la colonne 1 de Destination
NumLigne = shDest.Cells(rows.Count,1).End(xlup).Row+1
'
' Copie des valeurs de A10:F10 de la feuille source dans la feuille destination à la prochaine ligne disponible sous le tableau
shDest.Range("A" & NumLigne & ":F" & NumLigne ).Value = shSource.Range("A10:F10").Value
'
' ou
'shDest.Cells(1,NumLigne).resize(,5).Value = shSource.Cells(1,1).Resize(,5).Value

NumLigne = NumLigne +1 'Ligne suivante

Il y a plusieurs façons de référencer et travailler sur les objets excel. Vous trouverez votre style propre par la pratique.

Mais ce qui est le plus important est que vous et le moteur d'exécution vb sache à un instant T sur quelle cellule de quelle feuille de quel classeur il doit travailler.

A cet instant T, ActiveSheet renseigne uniquement sur la feuille active. Mais sans nous dire qu'elle est cette feuille ni ne parle de son classeur. Si vos appels à d'autres procedures ont modifié ActiveSheet, de retour à la procédure appelante, la feuille active n'est plus la même.

Pour être certain avec activeSheet et selection il faudrait (au minimum) :
Code:
If ActiveSheet.Parent.Name = "NomDuClasseurDeLaFeuilleAttendue.xlsx" then
    ' ActiveSheet  appartient au bon classeur
       If ActiveSheet.Name = "NomDeLaFeuilleAttendue" then
          'ActiveSheet est la bonne feuille du bon classeur
           If TypeOf Selection Is Range then
                'La selection est bien un objet range et non pas un Shape ou Graphique ou image ou autre chose
                 ' nous pouvons travailler sur l'objet range
           Else
                 ' M...e ! pas le bon objet
           End if
        Else
              ' M...e ! pas la bonne feuille
        End if
Else
       ' M...e ! pas le bon classeur
End if

P.S. j'ai pu faire quelques coquilles dans les lignes ci-dessus les ayant saisies à la volée.

P.S. Lorsque vous joignez un fichier excel, arrangez-vous pour qu' aucune procédure ne se lance au démarrage. C'est pénible, d'autant que le bouton 'Exit' ferme le classeur et pas seulement le userform.
Cordialement
Je débute en VBA, a quel endroit dois-je mettre ce/ces codes.
Pouvez vous me les intégrer directement au fichier.
 
- Navigue sans publicité
- Accède à Cléa, notre assistante IA experte Excel... et pas que...
- Profite de fonctionnalités exclusives
Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel.
Je deviens Supporter XLD

Discussions similaires

Retour