Erreur 438 VBA Excel [Résolu/Fermé]

Signaler
Messages postés
5
Date d'inscription
mercredi 2 janvier 2013
Statut
Membre
Dernière intervention
3 janvier 2013
-
Messages postés
5
Date d'inscription
mercredi 2 janvier 2013
Statut
Membre
Dernière intervention
3 janvier 2013
-
Bonjour,
Je débute en VBA et je ne maitrise pas encore très bien les objets
Dans le cadre d'un projet, je dois réaliser une macro vérifiant le contenu d'un tableau de commande et demandant le délai si les colonnes 1à7 sont bien remplies.

Le probleme c'est que à chacune de mes boucles For each, j'ai l'erreur 438 "Propiété ou méthode non gérée par l'objet"

Voici le programme :
Sub VerifCommand()
Dim NbColonne As Integer
Dim NbLigne As Integer
Dim feuille As Range
Dim cellule As Range
Dim colonne As Integer
NbColonne = 1
NbLigne = 1
Worksheets("Commande").Range("A3").Select 'selectionne A3
For Each cellule In Worksheets("Commande") 'regarde combien il y a de colonne et l'affecte dans NbColonne
If Not (InStr(CStr(Worksheets("Commande").cellule), "") > 0) Then
NbColonne = NbColonne + 1
Else
Exit For
End If
Cells(ActiveCell.Row, ActiveCell.Column + 1).Select
Next cellule
Worksheets("Commande").Cells(3, 1).Select 'selectionne A3
For Each cellule In Worksheets("Commande") 'regarde combien il y a de lignes et l'affecte dans Nbligne
If Not InStr(ActiveCell.Value, "") > 0 Then
NbLigne = NbLigne + 1
Else
Exit For
End If
Cells(ActiveCell.Row + 1, ActiveCell.Column).Select
Next cellule

Worksheets("Commande").Cells(4, 1).Select 'selectionne A2
For Each feuille In Worksheets("Commande") 'change de ligne
For Each cellule In Worksheets("Commande") 'change de colonne
If Not InStr(CStr(Worksheets("Commande").ActiveCell), "") > 0 Then
ActiveCell.Value = InputBox("la cellule " & Cells(ActiveCell.Row, ActiveCell.Column).Value & "n'est pas remplie") 'informe l'utilisateur que la commande n'est pas complète
End If
Cells(ActiveCell.Row, ActiveCell.Column + 1).Select
colonne = cellule.Column
If colonne > NbColonne - 2 Then 's'arrete avant la colonne délai
Exit For
End If
Next cellule
If Not InStr(Worksheets("Commande").ActiveCell, "") > 0 Then 'verifie si la colonne délai est vide
Call UserForm2
End If
Cells(ActiveCell.Row + 1, 1).Select
If Cells(ActiveCell.Row).Value > NbLigne Then
Exit For
End If
Next feuille
End Sub



9 réponses

Messages postés
1491
Date d'inscription
vendredi 26 octobre 2012
Statut
Membre
Dernière intervention
28 janvier 2013
84
Bonsoir Michaos,

Il faudrait le classeur pour mieux comprendre car là .. difficile à dire

Pour que l'on puisse avoir accès à une copie du classeur, il déposer sa copie sur un site de stockage tel que www.cjoint.com et nous donner l'adresse Internet de ce lien.

Attention toutefois à ne laisser aucune données sensibles !!
Messages postés
5
Date d'inscription
mercredi 2 janvier 2013
Statut
Membre
Dernière intervention
3 janvier 2013

Merci Heliotte voici le document
http://cjoint.com/data/0Acvg0D96RC.htm
Messages postés
1491
Date d'inscription
vendredi 26 octobre 2012
Statut
Membre
Dernière intervention
28 janvier 2013
84
Bonsoir Michaos,

Ce fichier est un peu fouilli ..

Est-ce que le tableau de commande de la feuille "Commande" est délimité ? .. en colonnes ? .. et en lignes ?

Autre question:
Quand vous dites demandant le délai si les colonnes 1à7 sont bien remplies:
Ce sont les colonnes A, B, C, D, E, F et G ?
Messages postés
5
Date d'inscription
mercredi 2 janvier 2013
Statut
Membre
Dernière intervention
3 janvier 2013

Désolé, comme je suis chargé d'une petite partie du projet seule la feuille commande me concerne, le nombre de colonnes est fixe, par contre les lignes peuvent augmenter ou diminuer, et oui je parle bien de ces colonnes A à G.

J'ai deja reussi le programme avec des boucles For mais comme le tableau peut changer, j'ai du changer avec des For each, le probleme est que je n'arrive pas a corriger les erreurs
Messages postés
1491
Date d'inscription
vendredi 26 octobre 2012
Statut
Membre
Dernière intervention
28 janvier 2013
84
Bonsoir,

Ce n'est pas obligé de faire des For Each ..

Le tableau contient toujours le même nombre de colonnes.
Ces colonnes se trouvent toujours à la même position.

Si oui pour les 2 affirmations précédentes, alors:
- Chercher la dernière ligne non-vide pour l'ensemble de tableau,
- Boucler (For Next) sur les lignes, puisque l'on connaît la première et la dernière ligne ..

Edit:
Pour trouver la dernière ligne:
Dim DerLig As Integer
DerLig = Columns(1).Find("*", , , , xlByColumns, xlPrevious).Row
Messages postés
5
Date d'inscription
mercredi 2 janvier 2013
Statut
Membre
Dernière intervention
3 janvier 2013

Bonsoir, cela me parait bien, mais comment trouver la derniere ligne non vide sans utiliser for each?
Messages postés
1491
Date d'inscription
vendredi 26 octobre 2012
Statut
Membre
Dernière intervention
28 janvier 2013
84
Bonjour Michaos,

Comme je l'ai écrit dans le dernier message .. ou ici https://www.commentcamarche.net/faq/32220-vba-toutes-versions-detection-de-cellule-vide-ligne-colonne pour trouver la dernière ligne d'une colonne, il faut écrire:
Dim DerLig As Integer
DerLig = Columns(1).Find("*", , , , xlByColumns, xlPrevious).Row
.. où
Columns(1) signifie colonne "A"
Columns(2) signifie colonne "B".

Et si l'on doit vérifier la plus grande de plusieurs colonne, on fait une boucle dans laquelle DerLig prend la plus grande valeur .. c'est tout !
Messages postés
23558
Date d'inscription
mardi 11 septembre 2007
Statut
Contributeur
Dernière intervention
12 octobre 2020
6 402
Bonjour à tous,

on peut aussi écrire Columns("A"), ça passe très bien (et plus pratique pour les colonnes style AK ;-) )
.

eric
Messages postés
8700
Date d'inscription
dimanche 8 avril 2007
Statut
Contributeur
Dernière intervention
22 janvier 2020
1 110
Bonjour,
Pas besoin de boucle pour connaître la dernière adresse employée
DerniereLigne = Range("A1").SpecialCells(xlCellTypeLastCell).Row 

Avec ça peu aussi connaître la dernière la colonne ou la dernière adresse absolue.
Note : Ça marche pas à chaque fois, si des lignes ou colonnes ont étés effacées y faut réinitialiser le classeur.
A+

Si tu te cognes à un pot et que ça sonne creux, c'est pas forcément le pot qui est vide. ;-)(Confucius)
NOTE : Je ne répond pas aux MP pour les questions techniques.
Messages postés
5
Date d'inscription
mercredi 2 janvier 2013
Statut
Membre
Dernière intervention
3 janvier 2013

Merci beaucoup tout le monde, probleme règlé, je met en résolu :)