IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Macros et VBA Excel Discussion :

Comment déclarer une variable pour qu'elle soit considérée de type Range


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Candidat au Club
    Femme Profil pro
    Ingénieur qualité méthodes
    Inscrit en
    Septembre 2018
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 31
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur qualité méthodes

    Informations forums :
    Inscription : Septembre 2018
    Messages : 3
    Par défaut Comment déclarer une variable pour qu'elle soit considérée de type Range
    Bonjour à tous,
    Je débute en VBA et je suis actuellement sur un petit problème dans ma macro Excel.
    Je m'explique:

    J'ai une feuille Excel dans laquelle j'aimerais fusionner des cellules (je sais, j'ai lu que ce n'était pas conseillé, mais je n'ai pas le choix...) .
    Mon idée est de déclarer une variable LigneDébut qui correspondrait à la première cellule que je voudrais fusionner et LigneFin correspondrait à la dernière cellule que je voudrais fusionner.

    j'ai donc tenté un:
    LigneDébut = paramSheet.Cells(2,1)
    LigneFin = paramSheet.Cells(L+1,1)

    (paramSheet est une variable représentant ma feuille Excel actuelle)
    L est défini dans une autre partie de mon code mais je ne pense pas que cela importe. Pour le moment, j'ai déclaré LigneDébut et LigneFin sans leur donner d'attribut. Mais lorsque je veux faire fusionner, problème, j'ai une erreur me disant que mon Range ne peut pas supporter un objet Global... Comment dois-je déclarer ces variables pour que je puisse les réutiliser comme Range???

    J'écris ma fusion comme ça:
    paramSheet.Range("LigneDébut:LigneFin").MergeCells = True

    J'espère avoir été claire...
    Une idée de comment je pourrais régler ou contourner le problème?


    Merci d'avance!!!

  2. #2
    Membre chevronné
    Femme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2012
    Messages
    214
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Septembre 2012
    Messages : 214
    Par défaut
    Bonjour
    Je te déconseigne de fusionner des lignes entieres
    sinon, il faut mettre les variables en dehors des "" pour que Excel les remplace par leurs valeures
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    paramSheet.Range("A" & LigneDébut & ":B" & LigneFin).MergeCells = True

  3. #3
    Expert confirmé
    Homme Profil pro
    aucune
    Inscrit en
    Avril 2016
    Messages
    7 563
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 84
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : aucune

    Informations forums :
    Inscription : Avril 2016
    Messages : 7 563
    Par défaut
    Bonjour
    J'ajoute ceci :
    LigneDébut et LigneFin sont des numéros de ligne et donc des numériques. Il est prudent de les déclarer de type Long
    Pour le moment, j'ai déclaré LigneDébut et LigneFin sans leur donner d'attribut
    Il ne s"agit pas d' "attribut", mais de la propriété concernée -->> la propriété row

    Excel est un tableur. Il n'est pas un traitement de texte. Je ne vois que de mauvaises raisons de fusionner les cellules d'un tableur.

  4. #4
    Candidat au Club
    Femme Profil pro
    Ingénieur qualité méthodes
    Inscrit en
    Septembre 2018
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 31
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur qualité méthodes

    Informations forums :
    Inscription : Septembre 2018
    Messages : 3
    Par défaut
    Merci beaucoup pour vos réponses

    Ça ne fonctionne toujours pas...

    Cela dit je pense m'être mal exprimée dans le nom de mes variables.
    Du coup je les ai renommées en CaseDébut et CaseFin et ce que je souhaiterais faire est par exemple si CaseDébut vaut A1 et CaseFin vaut A4 faire une fusion de A1:A4 .

    Cela dit impossible de les déclarer As long sinon lors de l'exécution de CaseDébut= paramSheet.Cells(2,1) il me met une erreur d’incompatibilité....

    En débogage si je ne met rien comme type cette étape passe...

    Je vous met une partie de mon code si jamais ça peut vous donner des idées... En mode débogage c'est la partie: "paramSheet.Range( CaseDébut : CaseFinA).MergeCells = True" qui ne fonctionne pas. J'ai tenté de mettre des "", des "A" & CaseDébut...rien ne fonctionne Encore Merci!

    CaseDébutA = paramSheet.Cells(2, 1)


    Do While paramSheet.Cells(L, "B") <> ""

    If paramSheet.Cells(L, "B").Value <> Libellé Then

    step = 0

    paramSheet.Rows(L).Insert

    CaseFinA = paramSheet.Cells(L - 1, "A")

    If CaseFinA <> Cells(1, "A") Then
    CaseDébutA = paramSheet.Cells(L, "A")

    paramSheet.Range( CaseDébut : CaseFinA).MergeCells = True



    End If

  5. #5
    Expert confirmé
    Homme Profil pro
    aucune
    Inscrit en
    Avril 2016
    Messages
    7 563
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 84
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : aucune

    Informations forums :
    Inscription : Avril 2016
    Messages : 7 563
    Par défaut
    Il est indispensable d'avoir l'esprit clair et de s'exprimer dans le même esprit.
    Ceci :
    ce que je souhaiterais faire est par exemple si CaseDébut vaut A1 et CaseFin vaut A4 faire une fusion de A1:A4 .
    n'est pas exprimé dans cet esprit. Il ne permet par exemple pas de savoir sii tu veux dire que CaseDébut est la cellule A1 ou si CaseDébut a pour valeur la valeur de la cellule A1 !
    Relis s'il te plait attentivement mon message précédent, notamment en ce qui concerne la propriété Row.

  6. #6
    Candidat au Club
    Femme Profil pro
    Ingénieur qualité méthodes
    Inscrit en
    Septembre 2018
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 31
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur qualité méthodes

    Informations forums :
    Inscription : Septembre 2018
    Messages : 3
    Par défaut
    Citation Envoyé par liom11 Voir le message
    Merci beaucoup pour vos réponses

    Ça ne fonctionne toujours pas...

    Cela dit je pense m'être mal exprimée dans le nom de mes variables.
    Du coup je les ai renommées en CaseDébut et CaseFin et ce que je souhaiterais faire est par exemple si CaseDébut vaut A1 et CaseFin vaut A4 faire une fusion de A1:A4 .

    Cela dit impossible de les déclarer As long sinon lors de l'exécution de CaseDébut= paramSheet.Cells(2,1) il me met une erreur d’incompatibilité....

    En débogage si je ne met rien comme type cette étape passe...

    Je vous met une partie de mon code si jamais ça peut vous donner des idées... En mode débogage c'est la partie: "paramSheet.Range( CaseDébut : CaseFinA).MergeCells = True" qui ne fonctionne pas. J'ai tenté de mettre des "", des "A" & CaseDébut...rien ne fonctionne Encore Merci!

    CaseDébutA = paramSheet.Cells(2, 1)


    Do While paramSheet.Cells(L, "B") <> ""

    If paramSheet.Cells(L, "B").Value <> Libellé Then

    step = 0

    paramSheet.Rows(L).Insert

    CaseFinA = paramSheet.Cells(L - 1, "A")

    If CaseFinA <> Cells(1, "A") Then
    CaseDébutA = paramSheet.Cells(L, "A")

    paramSheet.Range( CaseDébut : CaseFinA).MergeCells = True



    End If
    Oubliez ce que je viens de dire j'ai trouvé la solution il y avait plusieurs erreurs dans mon code et après correction cela semble fonctionner Je vous remercie encore pour vos réponses et met mon code corrigé à la suite si jamais ça peut aider d'autres personnes...

    CaseDébutA = 2


    Do While paramSheet.Cells(L, "B") <> ""

    If paramSheet.Cells(L, "B").Value <> Libellé Then

    step = 0

    paramSheet.Rows(L).Insert

    CaseFinA = L - 1

    If CaseFinA <> 1 Then


    paramSheet.Range(paramSheet.Cells(CaseDébutA, 1), paramSheet.Cells(CaseFinA, 1)).MergeCells = True

    CaseDébutA = L

    End If

Discussions similaires

  1. Réponses: 11
    Dernier message: 05/04/2010, 22h10
  2. Comment stocker une macro pour qu'elle soit accessible partout
    Par Godzestla dans le forum Macros et VBA Excel
    Réponses: 10
    Dernier message: 06/06/2008, 23h11
  3. Déclarer une variable pour remplacer cout
    Par alvun dans le forum SL & STL
    Réponses: 11
    Dernier message: 29/06/2006, 10h29
  4. Comment déclarer une variable binaire?
    Par Pragmateek dans le forum C++
    Réponses: 12
    Dernier message: 22/03/2006, 17h35
  5. Réponses: 5
    Dernier message: 20/09/2005, 22h48

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo