Déclarer une variable vide

Bonjour,

Ma question est facile mais je bloque vraiment

Dans mon code, je souhaite déclarer une variable "cellulevide" qui exprimerait une cellule vide.

Pour la déclarer, est-ce que je dois faire ceci :

Option Explicit
Sub test()
Dim cellulevide As String
cellulevide = 0
End Sub

Si ce n'est pas ça, pourriez-vous m'éclairer s'il vous plait ?

Cordialement,

Lucie.

Re,

Ta question n'a pas de sens !

Dès lors que tu déclares une variable, elle a une valeur par défaut, dépendant de son type.

Si tu déclares :

Dim cellulevide As String

la variable cellulevide a ipso-facto la valeur "" (texte vide).

Lorsque tu l'initialises :

cellulevide = 0

[Pas très malin de déclarer une variable string pour lui affecter un nombre ! ]

ta variable va probablement prendre la valeur "0" parce que dans ce cas VBA va convertir automatiquement la donnée numérique en String (mais méfie-toi ! dans bien d'autres cas où Excel peut opérer des conversions automatiques, ce n'est pas le cas de VBA qui te renvoie alors une erreur 13).

Si tu déclares une variable numérique (Integer, Long, Double...) elle aura par défaut la valeur : 0.

Si tu déclares une variable non typée (donc de type Variant) elle aura par défaut la valeur : Empty (vide).

S'il s'agit d'une variable objet (Range par exemple), sa valeur par défaut sera : Nothing (rien).

Tu devrais donc indiquer ce que tu veux faire plus précisément, que l'on puisse t'indiquer une voie à suivre, car ton orientation actuelle paraît très sujette à caution.

Cordialement.

Le contexte est que je souhaite importer des extractions EXCEL provenant d'un client dans ma base de données personnelle.

Du coup je souhaite créer un code qui me permettent d'importer mon extraction à partir d'une colonne. Je veux que mon code cherche quand une cellule est vide et importe à partir de cette cellule mon extraction EXCEL. Pour cela j'avais pensé à un code

If Then
Else
End If

Mais je ne parviens pas à le formuler.

Je vous mets le fichier ci-joint avec des commentaires pour que vous preniez mieux. C'est sur la feuille Feuilexp1

12outils-copie.xlsm (72.29 Ko)

Donc, tu veux définir une variable cellulevide représentant la première cellule à servir lors de l'import de données...

    Dim cellulevide As Range
    With ActiveSheet
        Set cellulevide = .Range("C" & .Rows.Count).End(xlUp)(2)
    End With

Cordialement.

Merci beaucoup pour votre temps !

Attention, il s'agit d'une variable objet, qui représente la cellule...

Cela signifie qu'il ne s'applique qu'à une seule cellule ?

Ce code te permet de déterminer la cellule supérieure gauche de la plage à laquelle tu veux affecter des données.

Elle suffit donc amplement comme repère.

Ensuite, je ne sais comment tu entends procéder ?

La méthode que je préconise habituellement consiste,après avoir récupéré les données dans un tableau, à redimensionner la cellule cible à la taile du tableau, de façon à y affecter directement le tableau (sans copier ni coller...)

Schéma type :

    aa = PlageDonnéesAImporter 'affectation des valeurs d'une plage à une variable Variant...
    cellulecible.Resize(UBound(aa, 1), UBound(aa, 2)).Value = aa

Le tableau produit par l'affectation d'une plage (ses valeurs) à une variable de type Variant est un tableau à 2 dimensions de base 1 (quel que soit l'emplacement d'origine, les indices lignes et colonnes du tableau débutent à 1).

UBound renvoie l'indice maximal de chacune des dimensions (1 pour les lignes, 2 pour les colonnes), qui représente donc le nb de lignes ou de colonnes, et permet de redimensionner cellulevide...

Cordialement.

Merci beaucoup pour votre temps !

Franchement, ce n'est pas très honnête de ta part de reposer un sujet que je suis en train de traiter tant bien que mal avec toi depuis ce matin (22 messages et on reviens toujours au début). Ton premier post ici démontre un fois de plus que tu brûles les étapes, en voulant t'attaquer à des questions complexes sans maîtrise des bases même d'Excel.

Tu ferais mieux de commencer par la base, et d'aller progressivement vers des choses plus poussées. Tu penses que les contraintes de temps imposées par ton employeur ne t'en laissent pas le luxe, mais tu verras que tu feras moins perdre de temps à tout le monde (toi y compris) en procédant dans l'ordre...

Ah ! Si c'est encore un sujet que tu reposes, je ne peux que m'associer à Pedro dans ses récriminations !

Je profites d'ailleurs pour signaler que je n'ai guère apprécié que le classeur fourni ne tienne aucun compte de ce qui avait pu être fait ou dit auparavant, tout particulièrement le fait de retrouver le module classeur non rétabli...

Tel qu'il se présente, je ne travaillerais pas sur ton classeur car cela revient à jouer à l'acrobate sans filet.

Je m'excuse si j'ai pu vous offenser mais je n'ai pas du tout travailler le sujet plusieurs fois

Justement, je suis entrain de comprendre tes codes Pedro22. Dans cette conversation, je souhaitais simplement savoir comment déclarer une variable vide pour modifier ce code là :

  With Workbooks("MonClasseur.xlsm").Sheets("Feuil1") 'Toute instruction commençant par "." s'y rattache
   LigMax = .Range("A60000").End(xlUp).Row + 1 'Trouve la première ligne vide en colonne A
   .Range("A" & LigMax).Value = "Bonjour" 'Mettre "Bonjour" dans la première cellule vide
   .Range("A" & LigMax).Font.Color = RGB(255, 0, 0) 'Mets le texte en rouge
End With 

Pour ensuite revenir vers toi pour voir si ma démarche est bonne !

MFerrand j'ai utilisé votre classeur et j'utilise encore votre classeur. C'est juste que je prends du temps à comprendre... Je suis entrain d'essayer de recréer un code par moi-même (pour comprendre) grâce à votre classeur et j'essaye de voir les différences/nuances par rapport à ceux des autres car avec un seul code, je ne comprends pas alors que quand j'en ai plusieurs je peux associer les éléments de code et comprendre

Et d'ailleurs ça y'est Pedro22 ! De bon matin j'ai compris ce que tu souhaitais me dire par rapport à ça :

DerLig = UsedRange.Rows.Count 'Compte le nombre de lignes utilisées, donc attention si présence de ligne vide avant ou dans les données

On ne déclare pas une variable vide... On déclare le type (de donnée) d'une variable, qui, tant qu'on y a pas affecté de valeur, est de toute façon vide. Mon conseil : ne t'éparpille pas, concentres toi sur l'essentiel pour l'instant.

Concernant la suite de ton message, je pense que tu fais justement l'erreur d'associer différents codes que tu ne comprend pas, et tu te retrouves alors avec un code complètement incohérent. Procédons donc étape par étape sur un code donné, avant de voir d'autres possibilités.

Ce que MFerrand (bonjour au passage !) te signalais, c'est que tu ne places pas tes codes où il faut dans le classeur. Dans l'éditeur VBA, tu as un onglet "insertion", utilise le pour insérer un nouveau module standard, dans lequel tu vas placer tes codes. Laisse de côté le module "ThisWorkbook" pour l'instant.

Bonjour Pedro22 !

D'accord, justement je suis entrain de me mettre à jour sur les variables grâce à https://www.excel-pratique.com/fr/vba/variables.php

C'est mieux que j'utilise un module plutôt que this workbooks.

Bonjour Pedro22 !

D'accord, justement je suis entrain de me mettre à jour sur les variables grâce à https://www.excel-pratique.com/fr/vba/variables.php

C'est mieux que j'utilise un module plutôt que this workbooks.

ThisWorkbook est réservé aux codes qui dépendent et affectent uniquement ton classeur. Notamment les macro déclenchées par un événement (ouverture ou fermeture du classeur, modification de certaines cellules...).

D'accoooord omg

Donc du coup si je veux transférer des données d'un classeur vers un autre, VBA ne va pas comprendre si je mets mon code dans ThisWorkbooks car ça ne concerne que le classeur sur lequel je travaille ?

D'accoooord omg

Donc du coup si je veux transférer des données d'un classeur vers un autre, VBA ne va pas comprendre si je mets mon code dans ThisWorkbooks car ça ne concerne que le classeur sur lequel je travaille ?

Je n'ai jamais testé, j'utilise rarement ce module, mais je suppose oui.

Bonjour, Salut Pedro !

Tu as un module ThisWorkbook dans tout classeur. De même, chaque feuille d'un classeur dispose d'un module dédié. Contrairement, aux Modules standard, ces modules sont privés. C'est pourquoi les procédures qu'on appelle doivent de préférence aller dans des modules standard, publics.

@Pedro: Je serais un peu réservé sur l'utilisation de UsedRange, qui peut dépasser la limite des données par une mise en forme intempestive... Je lui préfère CurrentRegion qui, s'agissant de données organisées en base de données est généralement fiable (une ligne d'en-tête normalement complète, pas de lignes vides et les trous éventuels n'empêchent pas la connexion dès lors que l'on n'a pas de colonne ou ligne entièrement vide qui casserait la plage), ou dans les cas plus hasardeux End(xlUp)...

Cordialement.

Bonjour, Salut Pedro !

Tu as un module ThisWorkbook dans tout classeur. De même, chaque feuille d'un classeur dispose d'un module dédié. Contrairement, aux Modules standard, ces modules sont privés. C'est pourquoi les procédures qu'on appelle doivent de préférence aller dans des modules standard, publics.

@Pedro: Je serais un peu réservé sur l'utilisation de UsedRange, qui peut dépasser la limite des données par une mise en forme intempestive... Je lui préfère CurrentRegion qui, s'agissant de données organisées en base de données est généralement fiable (une ligne d'en-tête normalement complète, pas de lignes vides et les trous éventuels n'empêchent pas la connexion dès lors que l'on n'a pas de colonne ou ligne entièrement vide qui casserait la plage), ou dans les cas plus hasardeux End(xlUp)...

Cordialement.

J'en conviens ! J'ai laissé de côté l'instruction UsedRange dans la plupart de mes codes maintenant, mais étant donné les difficultés rencontrées, je me concentre d'abord sur le reste avant de proposer quelque chose de plus adapté.

Rechercher des sujets similaires à "declarer variable vide"