Définir une plage de données variable

Bonsoir,

J'aurais à nouveau besoin d'aide pour corriger un morceau de code.

En effet je n'arrive à adapter tout ce que j'ai lu....

Via un "inputbox", je récupére le nom d'un catalogue, et je dois reporter cette information, sur un certains nombre de ligne qui varient (information que je récupére avant dans le code), et ma cellule de départ est changeante car c'est un tableau qui est alimenter au fur et à mesure.

Voici le morceau de code :

Sub nom()

Dim Nblig as long
Dim maplage, cata, adresse

    Nblig = 8 'pour les tests je suis parti du principe que ça serait 8 lignes, car l'information est récupérer en amont dans le code.
    Range("A65536").End(xlUp).Offset(1, 0).Select
    adresse = Selection.Address

    Set maplage = Range((adresse) & (Nblig)) ' je souhaite définir la plage ou dois être mis l'information

    cata = Application.InputBox("Quel est le nom du cata à ajouter ?")

    For Each cell In maplage
       cell = cata

        Next cell

End Sub

Je pense que le problème vient du fait que "maplage" reste "vide", et j'aimerai savoir comment faire pour la définir, en effet je voudrai adapter ce morceau de code pour d'autre colonne ou je dois mettre différentes formules.

Je vous joint un fichier, cela sera peut être plus simple à comprendre

Merci d'avance

Trinytie

72suivi-catalo3.xlsm (34.18 Ko)

Bonsoir,

Ton code est particulièrement approximatif ! Variables non typées, expressions non qualifiées et évidemment des select en veux-tu en voilà !, surabondance de parenthèses et tu ne sembles pas voir que ta plage ne comportera qu'une seule cellule ni laquelle !

Tu devrais au moins analyser pas à pas ton code pour voir ce que tu définis au bout du compte. Devant autant d'imprécisions, il semble qu'Excel (ou VBA ?) en perd la reconnaissance des propriétés par défaut ! et s'abstient !

Cordialement.

Salut Trinytie, MFerrand,

essaie ceci...

'
Dim Nblig As Integer
Dim cata As String
'
Nblig = 8 'pour les tests je suis parti du principe que ça serait 8 lignes, car la donné vient d'un autre fichier
iRow = Range("A" & Rows.Count).End(xlUp).Row + 1
'
cata = InputBox("Quel est le nom du cata à ajouter ?")
If cata = "" Then Exit Sub
Range("A" & iRow).Resize(Nblig, 1).Value = cata
'

A+

Bonjour curulis57, MFerrand

Curulis57, un grand merci pour ton aide, en effet le code fonctionne parfaitement ! (j'ai juste rajouter un dim pour le irow ).

MFerrand, si je suis venu demandai de l'aide sur le forum c'est bien parce que je n'y arrivai pas, on doit tous commencer ou recommencer un jour....

Trinytie

MFerrand, si je suis venu demandai de l'aide sur le forum c'est bien parce que je n'y arrivai pas, on doit tous commencer ou recommencer un jour....

Oh ! Certes...

Mais je considère que Curulis ne te rend aucun service si, profitant du fait que son code va fonctionner, tu te dispenses de voir comment tu aboutissais à définir comme plage A108 alors que ce n'était pas l'objectif, à mettre le doigt sur une erreur conceptuelle augmentée d'une erreur de syntaxe... erreurs que tu reproduiras si tu ne prends pas la peine d'en démonter le mécanisme pour assimiler les méthodes te permettant de réaliser tel ou tel objectif.

Même chose à un moindre degré pour l'ensemble des approximations que j'ai soulevées, dont au moins une avait pour effet que la commande finale n'était pas exécutée : il suffisait de rajouter .Value dans la commande et tu aurais vu une valeur s'inscrire en A108 ! Mais tes expressions en amont auraient été qualifiées, Excel aurait spontanément usé de .Value implicite (propriété par défaut d'un objet Range). Ce point était plus délicat à interpréter que le problème de syntaxe précédent, mais cela devrait tout de même t'inciter à mieux écrire ton code, en respectant les règles de base, car se contenter du fait que dans l'immédiat ça marche, c'est s'exposer à ce qu'au moindre changement ultérieur, cela cesse de marcher et tu te demandes alors pourquoi, comme beaucoup de demandeurs... Question triviale que se demander tardivement pourquoi cela ne marche plus ! Tout simplement parce que tu n'auras pas fait le nécessaire avant pour que cela marche en toutes circonstances.

Cordialement.

Déjà tu pars du principe que je ne me poserai aucune questions…. si tu avais lu mon premier post jusqu’au bout tu auras pu lire « en effet je voudrai adapter ce morceau de code pour d'autre colonne ou je dois mettre différentes formules. »

Et oui il m’a permis de pouvoir, intégrer mes formules, faire la mise en forme de ma plage….

Et simplement pourquoi tu n’as pas repris mon code en mettant des commentaires devant les lignes d’erreur pour me mettre sur la voix ?

Alors je dirai que bien au contraire Curulis57 m'a bien rendu service ! Car après deux jours de recherche il m'a aidé en me "débloquant".

Je te mettrai bien les lignes de codes que j'ai réécrite, mais tu vas surement me dire qu'elles sont mal écrites..... aller je prends le risque comme cela tu pourras constater....

' calcule date 
    irow = Range("AB" & Rows.Count).End(xlUp).Row + 1
    Range("AB" & irow).Resize(Nblig, 1).Value = "=RC[-1]-40"

'autre calcul de date

    irow = Range("AD" & Rows.Count).End(xlUp).Row + 1
    Range("AD" & irow).Resize(Nblig, 1).Value = "=RC[-3]-15"

‘'une petite mise en forme et copiant / collant la ligne précédente

    lcop = Range("A" & irow).Row - 1
    Rows(lcop).Select
    Selection.Copy
    Range("A" & irow).Resize(Nblig, 33).Select
    Selection.PasteSpecial Paste:=xlPasteFormats, Operation:=xlNone, _
        SkipBlanks:=False, Transpose:=False
    Application.CutCopyMode = False

Chacun fait ce qu'il peut avec ses connaissances, pour ma part j'ai un jour eu 2 jours deux formations en VBA, il y a 10 ans alors tout le monde ne peux pas comme toi maitriser. Et je pensai que les forums étaient justement là pour que les personnes de mon niveau puissent apprendre.

Bonne après midi.

Déjà tu pars du principe que je ne me poserai aucune questions….

Je ne l'ai pas dit ainsi ! J'ai simplement laissé entendre que c'était là la tendance naturelle à poursuivre dans la même voie tant que l'on ne butait pas sur un écueil bloquant et si l'on n'était pas contraint de décoder en totalité cet écueil pour débloquer...

Et je suis bien obligé de me conforter dans cette appréciation que tout ton code me démontre à l'envie...

pour ma part j'ai un jour eu 2 jours deux formations en VBA, il y a 10 ans

Ça fait déjà 2 jours de plus que moi !!! Mais :

1) Je n'ai jamais utilisé l'enregistreur

2) Je me suis documenté sur les règles de programmation (en VBA4 puis VBA5) [NB- On en est à 7]

3) J'utilise l'Aide en permanence.

Je ne vais pas perdre plus de temps à expliciter ton code...

Je serais juste curieux de savoir la raison d'être de la dernière ligne de code que tu cites : ce qu'elle signifie et pourquoi tu l'utilises ?

Cordialement.

Rechercher des sujets similaires à "definir plage donnees variable"