Jacky1002
Messages postés94Date d'inscriptionmardi 11 mai 2010StatutMembreDernière intervention 3 avril 2011
-
17 mai 2010 à 09:57
Jacky1002
Messages postés94Date d'inscriptionmardi 11 mai 2010StatutMembreDerniè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é
Jacky1002
Messages postés94Date d'inscriptionmardi 11 mai 2010StatutMembreDerniè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
cs_Jack
Messages postés14006Date d'inscriptionsamedi 29 décembre 2001StatutModérateurDernière intervention28 août 201579 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 :
Jacky1002
Messages postés94Date d'inscriptionmardi 11 mai 2010StatutMembreDerniè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
Jacky1002
Messages postés94Date d'inscriptionmardi 11 mai 2010StatutMembreDerniè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
cs_Jack
Messages postés14006Date d'inscriptionsamedi 29 décembre 2001StatutModérateurDernière intervention28 août 201579 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)
Jacky1002
Messages postés94Date d'inscriptionmardi 11 mai 2010StatutMembreDerniè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
Jacky1002
Messages postés94Date d'inscriptionmardi 11 mai 2010StatutMembreDerniè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
cs_Jack
Messages postés14006Date d'inscriptionsamedi 29 décembre 2001StatutModérateurDernière intervention28 août 201579 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.
cs_Jack
Messages postés14006Date d'inscriptionsamedi 29 décembre 2001StatutModérateurDernière intervention28 août 201579 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)