Au secour

Jacky1002 Messages postés 94 Date d'inscription mardi 11 mai 2010 Statut Membre Dernière intervention 3 avril 2011 - 17 mai 2010 à 09:57
Jacky1002 Messages postés 94 Date d'inscription mardi 11 mai 2010 Statut Membre Dernière intervention 3 avril 2011 - 17 mai 2010 à 21:36
bonjour jai un problème avec un code

Sub Commander()
Dim Str As Variant, MaFeuille As Worksheet
'Ci dessus j'ai changer le "string" en "variant"'
Str = ActiveSheet.Range("B" & ActiveSheet.Range("B65536").End(xlUp).Row).Value
'ici je veu appeler str la valeur de la dernière ligne de la colonne B de la feuille active (cest là dessus que ca plante quand je laisse string en haut'
Select Case Str
Case ""'et cest ici que ca plante qd je met variant'
Exit Sub
Case "F001"
Set MaFeuille = Sheets("F001")
Case "F002"
Set MaFeuille = Sheets("F002")
End Select
'ici au dessus je compare Str avec des valeur et affecte MaFeuille à "F001" ou "F002" en fonction de Str
ActiveSheet.Range("D2").copy
MaFeuille.Range("A21:A" & MaFeuille.Range("A65536").End(xlUp).Row + 1).PasteSpecial xlPasteValues, , , True
ActiveSheet.Range("H2").copy
MaFeuille.Range("B21:B" & MaFeuille.Range("B65536").End(xlUp).Row + 1).PasteSpecial xlPasteValues, , , True
ActiveSheet.Range("F2").copy
MaFeuille.Range("C21:C" & MaFeuille.Range("C65536").End(xlUp).Row + 1).PasteSpecial xlPasteValues, , , True
ActiveSheet.Range("F3:F" & MaFeuille.Range("F65536").End(xlUp).Row).copy
MaFeuille.Range("D21:D" & MaFeuille.Range("D65536").End(xlUp).Row + 1).PasteSpecial xlPasteValues, , , True
ActiveSheet.Range("G3:G" & MaFeuille.Range("G65536").End(xlUp).Row).copy
MaFeuille.Range("E21:E" & MaFeuille.Range("E65536").End(xlUp).Row + 1).PasteSpecial xlPasteValues, , , True
ActiveSheet.Range("E3:E" & MaFeuille.Range("E65536").End(xlUp).Row).copy
MaFeuille.Range("C6").PasteSpecial xlPasteValues, , , True
ActiveSheet.Range("C3:C" & MaFeuille.Range("C65536").End(xlUp).Row).copy
MaFeuille.Range("C5").PasteSpecial xlPasteValues, , , True
et là cest de la copie
End Sub

Quelqu'un saurait pk ca plante apparemment cest un problème de compatibilité de type mais je suis pas assez callé pour trouvé

Merci d'avance
Jacky

15 réponses

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
17 mai 2010 à 10:24
Salut
Puisque tu sais que tu vas récupérer une chaine, pourquoi ne pas dimensionner correctement et directement en String ?

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
Jacky1002 Messages postés 94 Date d'inscription mardi 11 mai 2010 Statut Membre Dernière intervention 3 avril 2011
17 mai 2010 à 10:33
pcq jai limpression que qd je met string il n'accepte pas que je dise :
Str = ActiveSheet.Range("B" & ActiveSheet.Range("B65536").End(xlUp).Row).Value

mais jai besoin de selectionner la dernière ligne

voilà pour ca

et à tout hazard vous pourriez m'aide sur autre chose ne meme tps cest sur le meme code :

dans mon tableau je saisie la cellule B (par l'intermédiaire d'un menu déroulant) qd cette cellule B est renseignée les cellules C D E de la meme ligne se renseigne automatiquement (=RechercheV....) du coup quand je demande de copier la dernière cellule pleine de C par exemple il me copie la formul dont la réponse est pour le moment #N/A.
auriez vous une solution pour copier les dernière cellule pleine mais remplie avec une vrai valeur et pas #N/A

Merci davance
Jacky
0
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
17 mai 2010 à 10:50
Pourquoi ne l'accepterait-il pas ?
De toute façon, la récupération de la valeur de la cellule n'a pas de lien avec la méthode de sélection de celle-ci.
Pour simplifier ta syntaxe, tu pourrais décomposer en lignes de code plus simples :
    Range("B65535").Select
    Selection.End(xlUp).Select
    Str = Selection.Value

Pour ta 2ème question, ne serait-il pas plus simple d'utiliser .Offset que RechercheV ?
    ' Contenu de la cellule placée 2 colonnes 
    ' à droite de celle actuellemet sélectionnée :
    MsgBox Selection.Offset(0, 2).Value

S'il te met un #N/A, c'est qu'il manque qqchose. Tout dépend ce que tu colles : la valeur ou la formule ? --> Voir collage spécial
0
Jacky1002 Messages postés 94 Date d'inscription mardi 11 mai 2010 Statut Membre Dernière intervention 3 avril 2011
17 mai 2010 à 11:02
bon maintenant cest bien beau mais je peu pas tester jai tjs un plantage

Sub Commander()
Dim Str As String, MaFeuille As Worksheet
ligne = ActiveSheet.[A65536].End(xlUp).Row

Range("B65535").Select
selection.End(xlUp).Select
Str = selection.Value
ca cest ce que tu vien de me donner
If Str = "F001" Then
Set MaFeuille = Sheets("F001")
End If
If Str = "F002" Then
Set MaFeuille = Sheets("F002")
End If
ca sa marche a première vue

cest ici que ca se corsejai une erreur "variable objet ou variable de bloc with non définie" pour temps jai bien défini MaFeuille, aurais je de grave problème de vision??? ou de comprehension
With MaFeuille

ActiveSheet.Range("D2").copy
MaFeuille.Range("A21" & MaFeuille.Range("A65536").End(xlUp).Row + 1).PasteSpecial xlPasteValues, , , True
ActiveSheet.Range("H2").copy
MaFeuille.Range("B21" & MaFeuille.Range("B65536").End(xlUp).Row + 1).PasteSpecial xlPasteValues, , , True
ActiveSheet.Range("F2").copy
MaFeuille.Range("C21" & MaFeuille.Range("C65536").End(xlUp).Row + 1).PasteSpecial xlPasteValues, , , True
ActiveSheet.Range("F" & ActiveSheet.Range("F65536").End(xlUp).Row).copy
MaFeuille.Range("D21" & MaFeuille.Range("D65536").End(xlUp).Row + 1).PasteSpecial xlPasteValues, , , True
ActiveSheet.Range("G" & ActiveSheet.Range("G65536").End(xlUp).Row).copy
MaFeuille.Range("E21" & MaFeuille.Range("E65536").End(xlUp).Row + 1).PasteSpecial xlPasteValues, , , True
ActiveSheet.Range("E" & ligne).copy
MaFeuille.Range("C6").PasteSpecial xlPasteValues, , , True
ActiveSheet.Range("C" & ligne).copy
MaFeuille.Range("C5").PasteSpecial xlPasteValues, , , True
End With

End Sub

De plus quel est la différence entre ("A65536") et ("A65535") s'il y en a une.

Merci
Jacky
0

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

Posez votre question
Jacky1002 Messages postés 94 Date d'inscription mardi 11 mai 2010 Statut Membre Dernière intervention 3 avril 2011
17 mai 2010 à 11:05
ah oui joublier


' Contenu de la cellule placée 2 colonnes
' à droite de celle actuellemet sélectionnée :
MsgBox Selection.Offset(0, 2).Value


je ne vois pas bien comment ca marche ... m'expliquerais-tu??
je nai pas besoin de boite de dialogue je veoudrais que la valur se saisisse automatiquement dès que la cellule B de la ligne est remplie

merci
Jacky
0
Molenn Messages postés 797 Date d'inscription mardi 7 juin 2005 Statut Membre Dernière intervention 23 février 2011 7
17 mai 2010 à 14:16
Dans ton bout de code, vire le With ...

With MaFeuille

ActiveSheet.Range("D2").copy
MaFeuille.Range("A21" & MaFeuille.Range("A65536").End(xlUp).Row + 1).PasteSpecial xlPasteValues, , , True


Ca ne sert à rien puisque tu donnes en paramètre à chaque fois la feuille que tu copies (activesheet) et la feuille de destination (MaFeuille).

Le with, c'est si tu veux travailler sur différentes propriétés ou méthodes d'un même objet sans rappeler cet objet en permanence.

Molenn
0
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
17 mai 2010 à 15:26
Exemple avec tes 2 première lignes :
Actuellement :
With MaFeuille
    ActiveSheet.Range("D2").copy
    MaFeuille.Range("A21" & MaFeuille.Range("A65536").End(xlUp).Row + 1).PasteSpecial _
                                  xlPasteValues, , , True 
    ' Les autres sont similaires
End With

Pour vraiment utiliser le With :
With MaFeuille
    ActiveSheet.Range("D2").copy
    .Range("A21" & .Range("A65536").End(xlUp).Row + 1).PasteSpecial xlPasteValues, , , True 
    ' Les autres sont similaires
End With

Il te suffit de supprimer toute apparition de MaFeuille à l'intérieur du With
= économise l'écriture
= raccourcit les lignes
= compile très légèrement plus vite (utile sur de grosse quantités de données)

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
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
17 mai 2010 à 15:33
Au fait, ça peut pas marcher ton truc :
    .Range("A21" & .Range("A65536").End(xlUp).Row + 1)
L'adresse du premier Range donnera quelque chose comme A21412, pour une ligne trouvée en 411 + 1 = 412
Cette formulation d'adresse n'est pas correcte.

Si tu veux obtenir "A21:A412", il ne faut rien oublier :
    .Range("A21:A" & .Range("A65536").End(xlUp).Row + 1)
(manque le :A après le A21)
0
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
17 mai 2010 à 15:50
Alors que la syntaxe était bonne dans ton premier message
Si tu te crées des erreurs au fur et à mesure, on va jamais s'en sortir !
0
Jacky1002 Messages postés 94 Date d'inscription mardi 11 mai 2010 Statut Membre Dernière intervention 3 avril 2011
17 mai 2010 à 17:01
Merci à tous pour vos réponse mais maintenant ca régrèsse :@
il y a un pb de compatibilité de type...
Sub Commande()

Dim Str As String, MaFeuille As Worksheet

Range("B65535").Select
selection.End(xlUp).Select
Str = selection.Value incompatibilité de type sur cette ligne apparemment erreur 13... le reste ça devrait aller

If Str = "F001" Then
Set MaFeuille = Sheets("F001")
End If
If Str = "F002" Then
Set MaFeuille = Sheets("F002")
End If

ActiveSheet.Range("D2").copy
MaFeuille.Range("A21:A" & MaFeuille.Range("A65356").End(xlUp).Row + 1).PasteSpecial xlPasteValues, , , True
ActiveSheet.Range("F2").copy
MaFeuille.Range("C21:C" & MaFeuille.Range("C65356").End(xlUp).Row + 1).PasteSpecial xlPasteValues, , , True
ActiveSheet.Range("H2").copy
MaFeuille.Range("B21:B" & MaFeuille.Range("B65356").End(xlUp).Row + 1).PasteSpecial xlPasteValues, , , True
ActiveSheet.Range("F4:F" & ActiveSheet.Range("F65356").End(xlUp).Row).copy
MaFeuille.Range("D21:D" & MaFeuille.Range("D65356").End(xlUp).Row + 1).PasteSpecial xlPasteValues, , , True
ActiveSheet.Range("G4:G" & ActiveSheet.Range("G65356").End(xlUp).Row).copy
MaFeuille.Range("E21:E" & MaFeuille.Range("E65356").End(xlUp).Row + 1).PasteSpecial xlPasteValues, , , True
ActiveSheet.Range("C4:C" & ActiveSheet.Range("C65356").End(xlUp).Row).copy
MaFeuille.Range("C5").PasteSpecial xlPasteValues, , , True
ActiveSheet.Range("E4:E" & ActiveSheet.Range("E65356").End(xlUp).Row).copy
MaFeuille.Range("C6").PasteSpecial xlPasteValues, , , True
End Sub


Merci d'avance
Jacky
0
Jacky1002 Messages postés 94 Date d'inscription mardi 11 mai 2010 Statut Membre Dernière intervention 3 avril 2011
17 mai 2010 à 17:13
Pour ta 2ème question, ne serait-il pas plus simple d'utiliser .Offset que RechercheV ?
Code Visual Basic :

' Contenu de la cellule placée 2 colonnes
' à droite de celle actuellemet sélectionnée :
MsgBox Selection.Offset(0, 2).Value


S'il te met un #N/A, c'est qu'il manque qqchose. Tout dépend ce que tu colles : la valeur ou la formule ? --> Voir collage spécial

en fait les ligne que je veu copier comporte toute des formules mais les valeur ne sont affichées que si la cellule C de la ligne est renseigner {=SI(ESTERREUR(RECHERCHEV(C5;fourn!A:D;4))=VRAI;"";RECHERCHEV(C5;fourn!A:D;4))} formule fournie par Molenn sur un autre post

moi je voudrais copier la valeur de la dernière cellule renseignée, pcq pour l'instant il plante, mais si je renseigne ma dernière ligne qui contient une formule,la cellule contient une valeur et ca marche...

Donc en gro, comment remplacer la formule de molenn pour que ca marche
ou
comment faire pour que ça ne prenne en compte que les cellules contenant qqch car pour linstant il me copie des cellule qui à première vue ne contiennent rien (cellule vide à l'écran) mais elle contiennent des formule et le pc il est pas con il le sais jarriverais pas a le finter comma ca... aider moi please

Jacky
0
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
17 mai 2010 à 21:07
Et qu'y a t-il dans selection.Value ?
Quand tu as l'erreur, survole avec la souris le mot selection.Value et dis-nous ce que tu vois dedans ?

Une chose m'épate, c'est que le S de sélection soit en minuscule.
L'aurais-tu écris à la main dans ce message ou bien Excel ne reconnait pas ce mot clé ?
Bizarre.
0
Jacky1002 Messages postés 94 Date d'inscription mardi 11 mai 2010 Statut Membre Dernière intervention 3 avril 2011
17 mai 2010 à 21:33
non cest bon

l'erreur est due a un problème que j explique ici : http://www.vbfrance.com/forum/sujet-SELECTION-CELLULE_1438046.aspx
que je t'invite à résoudre d'ailleurs (si ca te dit)

je n'ai plus aucune erreur juste les mauvaise cellule qui se copie (suit le lien pour m'éviter de ré expliquer)

merci de ton aide
Jacky
0
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
17 mai 2010 à 21:33
N'aurais-tu pas appelé, ailleurs dans ton code, une variable ou un objet "selection" ?
Tu peux essayer d'imposer la conversion :
Str = CStr(selection.Value)
0
Jacky1002 Messages postés 94 Date d'inscription mardi 11 mai 2010 Statut Membre Dernière intervention 3 avril 2011
17 mai 2010 à 21:36
ah oui j'oublier le terme selection s'écrit tel quel si je met une majuscule il la modifie en minuscule
0
Rejoignez-nous