Incomptatibilité de type, besoin d'aide svp

Résolu
cyril76140 Messages postés 18 Date d'inscription mardi 21 juin 2005 Statut Membre Dernière intervention 11 mai 2012 - 12 janv. 2010 à 19:31
cyril76140 Messages postés 18 Date d'inscription mardi 21 juin 2005 Statut Membre Dernière intervention 11 mai 2012 - 12 janv. 2010 à 22:45
bonjour à vous tous,

voilà, j'ai un petit probleme avec une macro excel que j'ai concue.
je me retrouve tous le temps avec une incompatibilité de type alors que cette même macro fonctionne dans un autre document excel.

je vous poste ma macro, si toutefois quelqu'un de vous avait une idée.

Sub Commande()

Dim plageCases As Range
Dim compteur As Integer
Sheets("C.A.G").Range("A321:F340").ClearContents 'efface le contenu du Bon de Cmde précédent.
set plageCases = Range("F18", [F297].End(xlUp)) 'repère les cellules non-vides de la colonne F.
compteur = 321 'puisque bon de Cmde démarre en ligne 321.

For Each cell In plageCases

-------> If cell Then
Sheets("C.A.G").Cells(compteur, 1) = cell.Offset(0, -5).Value 'Nature des Produits A.
Sheets("C.A.G").Cells(compteur, 2) = cell.Offset(0, -4).Value 'Nature des Produits B.
Sheets("C.A.G").Cells(compteur, 3) = cell.Offset(0, -3).Value 'Nature des Produits C.
Sheets("C.A.G").Cells(compteur, 4) = cell.Offset(0, -2).Value 'Unité de Vente.
Sheets("C.A.G").Cells(compteur, 5) = cell.Offset(0, -1).Value 'Prix.
Sheets("C.A.G").Cells(compteur, 6) = cell.Offset(0, 0).Value 'Commande.

compteur = compteur + 1
End If

Next cell

Voilà, en fait la colonne F sert à choisir la quantité d'articles commandés. cela fonctionne bien à partir du moment ou F est égal a 0,1,2,.... mais lorsque ces cases sont vides j'ai donc cette erreur( en pas à pas ca bloque la ou j'ai inséré une flèche).

je ne sait pas si c'est très clair... lol

je reste dispo pour toutes questions où renseignement complémentaire.
merci d'avance.
Cyril

12 réponses

cyril76140 Messages postés 18 Date d'inscription mardi 21 juin 2005 Statut Membre Dernière intervention 11 mai 2012
12 janv. 2010 à 22:45
oui oui j'ai bien compris.

mais je suis débutant et les codes ou conditions que tu me donne me sont inconnus. mais je promet de jetter un oeil dessus afin d'apprendre d'autre fonction de VBA.

Merci à toi PCFOUTU
3
cs_Jack Messages postés 14006 Date d'inscription samedi 29 décembre 2001 Statut Modérateur Dernière intervention 28 août 2015 79
12 janv. 2010 à 20:00
Salut
Essaye ça :
If Not Cell.Value = Empty Then

Vala
Jack, MVP VB
NB : Je ne répondrai pas aux messages privés

Le savoir est la seule matière qui s'accroit quand on la partage (Socrate)
0
cyril76140 Messages postés 18 Date d'inscription mardi 21 juin 2005 Statut Membre Dernière intervention 11 mai 2012
12 janv. 2010 à 20:22
Salut jack merci de ta réponse mais malheureusement celle ci ne fonctionne pas...

d'autre idée?
0
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 211
12 janv. 2010 à 20:47
Bonjour,

tu as écrit :
For Each cell In plageCases 

1) Peux-tu nous dire où et comment tu as défini Cell ? Je ne le vois pas !
2) je n'ose pas te parler de ce que pourrait être la logique d'un cell.Offset(0, 0) !! ... ben.. alors : la cellule elle-même, non ?
3) je suis très loin d'avoir compris ceci (avec le commentaire mis) :
set plageCases = Range("F18", [F297].End(xlUp)) 'repère les cellules non-vides de la colonne F. 

Je crois qu'il va te falloir commencer par l'essentiel : d'abord régler le problème de la définition de la variable cell, avant d'aller à la découverte des erreurs subséquentes ... (une piste, qu'est une cellule, sinon une plage, donc un Range ?)
On ne verra le reste qu'une fois ce pas fait et fait de manière comprise
____________________
Très intéressante fable, L'OISELEUR, L'AUTOUR ET L'ALOUETTE !
Cliquer sur "Réponse acceptée" (en bas d'une solution avérée adéquate) rendra service à d'autres. PENSEZ-Y.
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
cyril76140 Messages postés 18 Date d'inscription mardi 21 juin 2005 Statut Membre Dernière intervention 11 mai 2012
12 janv. 2010 à 21:07
Salut,
alors j'ai trouvé pourquoi ca ne marchais pas.
c'est tous simplement parce que je suis une kève... lol
en fait il y a une ligne (F30)ou j'ai inscris " QUANTITE" et en fait quand je lis les lignes de la colonne F, avec "set plageCases = Range("F18", [F297].End(xlUp))" je cherche une valeur numérique, et comme dans cette colonne je tombe sur F30 ( QUANTITE), et bien ca me met incompatilité de type.

Par contre pourrais t'on faire un range sur F18-F29 ; F31-F297 ?

Merci quand même les gars.
0
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 211
12 janv. 2010 à 21:08
Bàon...
Moi, je propose toujours préférablement d'apprendre à pêcher, plutôt que de recevoir du poisson pêché !

Tu vas donc faire le petit projet suivant :;
SUR FEUIL1 :
1) en cellule F19 : "coucou"
2) en cellule F31 : "voilà"
3) toutes les autres cellules : laissées vides
4) un bouton de commande et ce code

Private Sub CommandButton1_Click()
  Dim plageCases As Range, cell As Range
  Set plageCases = Sheets("feuil1").Range("F18", [F297].End(xlUp))
  For Each cell In plageCases
     If Not IsEmpty(cell.Value) Then MsgBox cell.Value & " en cellule " & cell.AddressLocal
  Next cell
End Sub

lance, clique sur le bouton et tu devrais comprendre et en profiter ...

____________________
Très intéressante fable, L'OISELEUR, L'AUTOUR ET L'ALOUETTE !
Cliquer sur "Réponse acceptée" (en bas d'une solution avérée adéquate) rendra service à d'autres. PENSEZ-Y.
0
cyril76140 Messages postés 18 Date d'inscription mardi 21 juin 2005 Statut Membre Dernière intervention 11 mai 2012
12 janv. 2010 à 21:10
ok je fais de suite
0
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 211
12 janv. 2010 à 21:11
Quant à faire une plage "discontinue", cherche parmi mes réponses d'aujourd'hui. L'une d'entre elles utilise la méthode Union, qui t'intéresse.


____________________
Très intéressante fable, L'OISELEUR, L'AUTOUR ET L'ALOUETTE !
Cliquer sur "Réponse acceptée" (en bas d'une solution avérée adéquate) rendra service à d'autres. PENSEZ-Y.
0
cyril76140 Messages postés 18 Date d'inscription mardi 21 juin 2005 Statut Membre Dernière intervention 11 mai 2012
12 janv. 2010 à 21:16
ok alors j'ai bien compris le mini tuto... comme quoi mieux vaux poser une question plutôt que de faire une usine à gaz.
merci à vous.
Cyril
0
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 211
12 janv. 2010 à 21:20
Attends, ce n'est bpas fini ...
Dans ton mini projet d'essai, ajoute maintenant une valeur numérique en F23 (en laissant coucou et voila là où ils sont).
Remplace maintenant la boucle par :
For Each cell In plageCases
     If Not IsEmpty(cell.Value) And IsNumeric(cell.Value) Then MsgBox cell.Value & " en cellule " & cell.AddressLocal
  Next cell


Lance. Tu vas normalement très vite comprendre.
____________________
Très intéressante fable, L'OISELEUR, L'AUTOUR ET L'ALOUETTE !
Cliquer sur "Réponse acceptée" (en bas d'une solution avérée adéquate) rendra service à d'autres. PENSEZ-Y.
0
cyril76140 Messages postés 18 Date d'inscription mardi 21 juin 2005 Statut Membre Dernière intervention 11 mai 2012
12 janv. 2010 à 22:33
lol ok

alors j'ai essayé, c'est nikel. par contre ce style de code c'est plus pour un utilisateur avancé que je ne suis pas... parce qu'avec ton code, il faut que je gère ma liste comme une base de donnée ce que je ne sait pas encore faire.

mais je te remercie de m'avoir appris ce truc que je vais réutiliser dans un autre xls.
0
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 211
12 janv. 2010 à 22:40
- Ce code n'est pas du niveau "avancé", mais bel et bien du niveau "débutant".
- Je ne comprends pas ta remarque ("parce qu'avec ton code, il faut que je gère ma liste comme une base de données"). Il ne fait que garder l'esprit de ce que tu avais toi-même écrit (ton premier code), en te permettant de ne traiter, à ton gré, que les cellules non vides de ta plage ou (si tu y ajoutes cette condition Isnumeric) que celles qui, en plus, contiennent des numériques, c'est tout !

____________________
Très intéressante fable, L'OISELEUR, L'AUTOUR ET L'ALOUETTE !
Cliquer sur "Réponse acceptée" (en bas d'une solution avérée adéquate) rendra service à d'autres. PENSEZ-Y.
0
Rejoignez-nous