Correction?

Signaler
Messages postés
94
Date d'inscription
mardi 11 mai 2010
Statut
Membre
Dernière intervention
3 avril 2011
-
Messages postés
94
Date d'inscription
mardi 11 mai 2010
Statut
Membre
Dernière intervention
3 avril 2011
-
voilà mon code y'aurait - il des erreurs (sur la partie en rouge) si oui comment syntaxer tout ca
merci de votre aide
jacky


Sub Commande()
Dim Str As String, MaFeuille As Worksheet

Range("B65536").Select
selection.End(xlUp).Select
Str = selection

ca dois donner qqch comme ca je pense mais pas sur du tout
If str.value =#N/A then
Range("A65536").End(xlUp).Row - 1
Else str = selection
End if
If str = "001"
Set MaFeuille = Sheets("F001")
End If
If Str = "F003" Then
Set MaFeuille = Sheets("F003")
End If

ActiveSheet.Range("D2").copy
MaFeuille.Range("A21:A" & MaFeuille.Range("A65536").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("H2").copy
MaFeuille.Range("B21:B" & MaFeuille.Range("B65536").End(xlUp).Row + 1).PasteSpecial xlPasteValues, , , True
ActiveSheet.Range("F" & ActiveSheet.Range("F65356").End(xlUp).Row).copy
MaFeuille.Range("D21:D" & MaFeuille.Range("D65536").End(xlUp).Row + 1).PasteSpecial xlPasteValues, , , True
ActiveSheet.Range("G" & ActiveSheet.Range("G65356").End(xlUp).Row).copy
MaFeuille.Range("E21:E" & MaFeuille.Range("E65536").End(xlUp).Row + 1).PasteSpecial xlPasteValues, , , True
ActiveSheet.Range("C" & ActiveSheet.Range("C65536").End(xlUp).Row).copy
MaFeuille.Range("C5").PasteSpecial xlPasteValues, , , True
ActiveSheet.Range("E" & ActiveSheet.Range("E65536").End(xlUp).Row).copy
MaFeuille.Range("C6").PasteSpecial xlPasteValues, , , True

End Sub

12 réponses

Messages postés
14770
Date d'inscription
vendredi 14 mars 2003
Statut
Modérateur
Dernière intervention
27 février 2021
151
Bonjour,

Select Case str.Text
    Case "#N/A" 
'Je n'ai pas compris l'intérêt de cette ligne, de plus, elle fait une erreur de syntaxe
        Range("A65536").End(xlUp).Row - 1
    Case "001" 
        Set MaFeuille = Sheets("F001")
    Case "F003"
        Set MaFeuille = Sheets("F003")
End Select


Me semble plus probant.

Messages postés
94
Date d'inscription
mardi 11 mai 2010
Statut
Membre
Dernière intervention
3 avril 2011

en fait cette ligne que tu te demande à koi elle sert me sert à désigner la dernière cellule pleine de la colonne mais vu que pour le moment ma dernière cellule contient en vérité une formule qui a pour linstant comme réponse #N/A je veu que si la cellule selectionner contient cette valeur alors il passe à la ligne au dessus.

une autre idée peut etre??
merci
Jacky
Messages postés
1835
Date d'inscription
vendredi 13 mai 2005
Statut
Membre
Dernière intervention
20 novembre 2013
9
Salut,

Jacky, ATTENTION str est un nom réservé VBA ! il ne peut être utilisé comme nom de variable !!!

une petite correction du code de NHenry:

Reference=Selection.Txt, MaFeuille As Worksheet
Select Case Reference
Case "#N/A"
'Moi aussi Je n'ai pas compris l'intérêt de cette ligne même avec ton explication car cette ligne ne sert à rien !!!
Range("A65536").End(xlUp).Row - 1
Case "001" '<-- pourquoi 001 ? cela ne devrait pas plutôt être F001 ?
Set MaFeuille = Sheets("F001")
Case "F003"
Set MaFeuille = Sheets("F003")
End Select

A+
Messages postés
14008
Date d'inscription
samedi 29 décembre 2001
Statut
Modérateur
Dernière intervention
28 août 2015
74
BONJOUR
aussi

Voilà quelques jours que tu submerges le forum avec ton code.
Est-ce que tu prends le temps de réfléchir un peu avant de nous soumettre tes questions ?
Range("A65536").End(xlUp).Row - 1
D'après toi, ça désigne une cellule.
Ok, mais qu'en fais-tu ?
Cette formule renvoie un chiffre et ... et rien. Tu ne stockes ce chiffre nulle part, tu n'en fais pas une sélection, rien.
Normal donc que tu aies une erreur.

Str est une String : Pourquoi ajoutes-tu .Value derrière ? ça n'a pas de sens.

Si tu comptes revenir à la ligne du dessus, ne penses-tu pas qu'il faudrait qu'il y ait une structure de boucle ? genre un For-Next ou un Do-While ?

Je te soumets ci-dessous une solution, mais par pitié, avant de dire que ça ne marche pas, essaye de l'analyser et éventuellement de la corriger.

    Range("A65536").Select
    Selection.End(xlUp).Select
    Str = CStr(Selection.Value)
    Do While (IsError(Selection.Value)) Or (Len(Str) = 0)
        Range(ActiveCell.Address).Offset(-1, 0).Select
        Str = CStr(Selection.Value)
    Loop
    Select Case Str
        Case "001"
            Set maFeuille = Sheets("F001")
        Case "F003"
            Set maFeuille = Sheets("F003")
        Case Else
            MsgBox "Résultat n'est pas ""001"", ni ""F003"""
    End Select

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)
Messages postés
1835
Date d'inscription
vendredi 13 mai 2005
Statut
Membre
Dernière intervention
20 novembre 2013
9
Oups !

je recommence:

une petite correction du code de NHenry:

Dim Reference As String, MaFeuille As Worksheet
Reference=Selection.Txt

Select Case Reference
   Case "#N/A"
      'Moi aussi Je n'ai pas compris l'intérêt de cette ligne même avec ton explication car cette ligne ne sert à rien !!!
      Range("A65536").End(xlUp).Row - 1
   Case "001" '<-- pourquoi 001 ? cela ne devrait pas plutôt être F001 ?
      Set MaFeuille = Sheets("F001")
   Case "F003"
     Set MaFeuille = Sheets("F003")
End Select
Messages postés
94
Date d'inscription
mardi 11 mai 2010
Statut
Membre
Dernière intervention
3 avril 2011

merci a tous pour vos réponses

grace au code de jack je nest plus de problème.

MAIS ce nest pas encore ce que je voudrais

au sujet la ligne que vous vous demander à quoi elle sert : sachant que la dernière ligne pleine est rechercher de bas en haut le code s'occupe de cellule contenant une formule mais dont le resultat de cette formule est pour l'instant #N/A (le tableur va etre remplie au fur et a mesure mais je dois laisser les formule pour linstant, les réponse se feront quand on aura saisie une valeur en cellule B de la ligne suivante) donc qd il trouve cette réponse je voudrais qu'il passe a la ligne d'au dessus jusqu'a ce qu'il trouve une valeur du type F001 ou F002 ...sachant qu'ici ce nest qu'un exemple et que par la suite cette valeur sera comprise en F001 et F100

comment faire pour rechercher la dernière ligne pleine contenant une valeur autre que #N/A?? (la ligne qui semble inutile devrais me servir à ca mais ca ne marche pas)

merci de votre aide
Jacky
Messages postés
1835
Date d'inscription
vendredi 13 mai 2005
Statut
Membre
Dernière intervention
20 novembre 2013
9
Salut,

attention les amis le select est source de lenteur et d'erreur !
On en a generalement pas besoin.

    Dim DerniereLigne As Long
    Dim Reference As String, MaFeuille As Worksheet

    ' "Columns("b").Rows.Count" au lieu de "B65536" permet d'être compatible avec toutes les versions d'excel.
    DerniereLigne = Range("B" & Columns("B").Rows.Count).End(xlUp).Row
    'Application.WorksheetFunction.IsNA() renvoi "true" si la cellule spécifiée contient une erreur de type N/A
    Do While Application.WorksheetFunction.IsNA(Range("B" & DerniereLigne)) = True
        DerniereLigne = DerniereLigne - 1
    Loop
    Reference = Range("B" & DerniereLigne).Txt '.Txt permet de récuperer la valeur de la cellule directement sous forme de
    ' texte sans avoir à passer par une conversion.
    Select Case Reference
        Case "001"
            Set maFeuille = Sheets("F001")
        Case "F003"
            Set maFeuille = Sheets("F003")
    End Select


Pose des questions completes pas des morceaux d'enigmes

A+
Messages postés
94
Date d'inscription
mardi 11 mai 2010
Statut
Membre
Dernière intervention
3 avril 2011

Re bonjour

parfait dslé big fish mais le code de jack m'est plus compréhensible

maintenant et après ca jaurais "fini" :

dans le meme code je souhaite copier la dernière cellule pleine de la colonne E par exemple et la coller en C5 de "MaFeuille" (feuille selectionner grace au If) le problème est tjs le meme ma colonne E contient des formule pas solutionner qui ont une réponse #N/A.

je souhaiterais selctionner les cellule dont la valeur est autre que #N/A

Peut-on utiliser 2 fois Str dans le meme code pour désigner des élément différent ... je ne pense pas mais bon

jai essayé ca ce nest qu'une partie :

Range("E65536").Select
selection.End(xlUp).Select
Str = CStr(selection.Value) [color=blue]ici il me surligne Str et affiche une erreur de compilation : Qualificateur incorrect
Do While (IsError(selection.Value)) Or (Len(Str) = 0)
Range(ActiveCell.Address).Offset(-1, 0).Select
Str = CStr(selection.Value)
Loop

Str.copy
MaFeuille.Range("C6").PasteSpecial xlPasteValues, , , True
/color

sinon voilà le code en entier avec les modifs :

Sub Commande()

Dim DerniereLigne As Long, Adresse As String
Dim Str As String, MaFeuille As Worksheet



Range("B65536").Select
selection.End(xlUp).Select
Str = CStr(selection.Value)
Do While (IsError(selection.Value)) Or (Len(Str) = 0)
Range(ActiveCell.Address).Offset(-1, 0).Select
Str = CStr(selection.Value)
Loop
Select Case Str
Case "F001"
Set MaFeuille = Sheets("F001")
Case "F003"
Set MaFeuille = Sheets("F003")
Case Else
MsgBox "Résultat n'est pas ""F001"", ni ""F003"""
End Select

ActiveSheet.Range("D2").copy
MaFeuille.Range("A21:A" & MaFeuille.Range("A65536").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("H2").copy
MaFeuille.Range("B21:B" & MaFeuille.Range("B65536").End(xlUp).Row + 1).PasteSpecial xlPasteValues, , , True
ActiveSheet.Range("F" & ActiveSheet.Range("F65356").End(xlUp).Row).copy
MaFeuille.Range("D21:D" & MaFeuille.Range("D65536").End(xlUp).Row + 1).PasteSpecial xlPasteValues, , , True
ActiveSheet.Range("G" & ActiveSheet.Range("G65356").End(xlUp).Row).copy
MaFeuille.Range("E21:E" & MaFeuille.Range("E65536").End(xlUp).Row + 1).PasteSpecial xlPasteValues, , , True
ActiveSheet.Range("C" & ActiveSheet.Range("C65536").End(xlUp).Row).copy
MaFeuille.Range("C5").PasteSpecial xlPasteValues, , , True

Range("E65536").Select
selection.End(xlUp).Select
Str = CStr(selection.Value)
Do While (IsError(selection.Value)) Or (Len(Str) = 0)
Range(ActiveCell.Address).Offset(-1, 0).Select
Str = CStr(selection.Value)
Loop

Str.copy
MaFeuille.Range("C6").PasteSpecial xlPasteValues, , , True

End Sub


Merci
Jacky
Messages postés
94
Date d'inscription
mardi 11 mai 2010
Statut
Membre
Dernière intervention
3 avril 2011

au debut du sub, le adresse as string est un résidue d'essais nen tenez pas compte jai essayer avec et sans
Messages postés
94
Date d'inscription
mardi 11 mai 2010
Statut
Membre
Dernière intervention
3 avril 2011

C'est bon ça marche


un grand merci à tous pour votre patience plus ou moins flagrante

si ca vous dit voici mon code final :

Sub Commande()

Dim Str As String, MaFeuille As Worksheet
   
    Range("B65536").Select
    selection.End(xlUp).Select
    Str = CStr(selection.Value)
    Do While (IsError(selection.Value)) Or (Len(Str) = 0)
        Range(ActiveCell.Address).Offset(-1, 0).Select
        Str = CStr(selection.Value)
    Loop
      
Select Case Str
         Case "F001"
            Set MaFeuille = Sheets("F001")
End Select

        ActiveSheet.Range("D2").copy
    MaFeuille.Range("A21:A" & MaFeuille.Range("A65536").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("H2").copy
    MaFeuille.Range("B21:B" & MaFeuille.Range("B65536").End(xlUp).Row + 1).PasteSpecial xlPasteValues, , , True
         ActiveSheet.Range("F" & ActiveSheet.Range("F65356").End(xlUp).Row).copy
    MaFeuille.Range("D21:D" & MaFeuille.Range("D65536").End(xlUp).Row + 1).PasteSpecial xlPasteValues, , , True
      ActiveSheet.Range("G" & ActiveSheet.Range("G65356").End(xlUp).Row).copy
    MaFeuille.Range("E21:E" & MaFeuille.Range("E65536").End(xlUp).Row + 1).PasteSpecial xlPasteValues, , , True
      ActiveSheet.Range("C" & ActiveSheet.Range("C65536").End(xlUp).Row).copy
    MaFeuille.Range("C5").PasteSpecial xlPasteValues, , , True
    
    Range("E65536").Select
    selection.End(xlUp).Select
    Str = CStr(selection.Value)
    Do While (IsError(selection.Value)) Or (Len(Str) = 0)
        Range(ActiveCell.Address).Offset(-1, 0).Select
    Str = CStr(selection.Value)
    Loop
    MaFeuille.Range("C6") = Str
           
End Sub



Encore Merci

et a bientot pour de nouvelle aventures ^^
Jacky
Messages postés
1835
Date d'inscription
vendredi 13 mai 2005
Statut
Membre
Dernière intervention
20 novembre 2013
9

et a bientot pour de nouvelle aventures ^^


Sur que tu vas revenir

je répètes :
[u]
ATTENTION str est un nom réservé VBA ! il ne peut être utilisé comme nom de variable !!! /u

Donc remplace str par tout ce que tu veux : toto, truc... mais remplace le !

A+

PS: Avec toi "A+" prend tout son sens
Messages postés
94
Date d'inscription
mardi 11 mai 2010
Statut
Membre
Dernière intervention
3 avril 2011

OK merci du conseil

et pour tout le reste

respectueusement (hé oui)
jacky